Class: Mihari::Services::AlertProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/mihari/services/proxies.rb

Overview

Alert proxy

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**data) ⇒ AlertProxy

Initialize

Parameters:

  • data (Hash)


20
21
22
23
24
25
26
27
# File 'lib/mihari/services/proxies.rb', line 20

def initialize(**data)
  super()

  @data = data.deep_symbolize_keys
  @errors = nil

  validate!
end

Instance Attribute Details

#dataHash (readonly)

Returns:

  • (Hash)


10
11
12
# File 'lib/mihari/services/proxies.rb', line 10

def data
  @data
end

#errorsArray? (readonly)

Returns:

  • (Array, nil)


13
14
15
# File 'lib/mihari/services/proxies.rb', line 13

def errors
  @errors
end

Instance Method Details

#[](key) ⇒ Object



48
49
50
# File 'lib/mihari/services/proxies.rb', line 48

def [](key)
  data key.to_sym
end

#artifactsArray<Mihari::Models::Artifact>

Returns:



62
63
64
65
66
67
68
69
# File 'lib/mihari/services/proxies.rb', line 62

def artifacts
  @artifacts ||= data[:artifacts].map do |data|
    artifact = Models::Artifact.new(data:)
    artifact.rule_id = rule_id
    artifact.source = source
    artifact
  end.uniq(&:data).select(&:valid?)
end

#errors?Boolean

Returns:

  • (Boolean)


32
33
34
35
36
# File 'lib/mihari/services/proxies.rb', line 32

def errors?
  return false if errors.nil?

  !errors.empty?
end

#ruleMihari::Rule

Returns:



81
82
83
84
85
86
# File 'lib/mihari/services/proxies.rb', line 81

def rule
  @rule ||= lambda do
    data = Mihari::Models::Rule.find(rule_id).data
    Rule.new(**data)
  end.call
end

#rule_idString

Returns:

  • (String)


55
56
57
# File 'lib/mihari/services/proxies.rb', line 55

def rule_id
  @rule_id ||= data[:rule_id]
end

#sourceString?

Returns:

  • (String, nil)


74
75
76
# File 'lib/mihari/services/proxies.rb', line 74

def source
  @source ||= data[:source]
end

#validate!Object

Raises:



38
39
40
41
42
43
44
45
46
# File 'lib/mihari/services/proxies.rb', line 38

def validate!
  contract = Schemas::AlertContract.new
  result = contract.call(data)

  @data = result.to_h
  @errors = result.errors

  raise ValidationError.new("Validation failed", errors) if errors?
end