Class: Jekyll::AgentAudit::Finding

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll/agent_audit/finding.rb

Constant Summary collapse

SEVERITY_ORDER =
{"error" => 0, "warning" => 1, "info" => 2, "experimental" => 3}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(draft = nil, registry: Registry, **attributes) ⇒ Finding

Returns a new instance of Finding.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/jekyll/agent_audit/finding.rb', line 12

def initialize(draft = nil, registry: Registry, **attributes)
  draft ||= attributes
  draft = draft.transform_keys(&:to_sym)
  rule = registry[draft.fetch(:rule_id)] || {}
  observation = draft.fetch(:observation, {}).transform_keys(&:to_s)
  @data = {
    "rule_id" => draft.fetch(:rule_id).to_s, "rule_version" => rule.fetch(:version, "1"),
    "category" => draft.fetch(:category, rule.fetch(:category, "unknown")).to_s,
    "severity" => draft.fetch(:severity, rule.fetch(:default_severity, "info")).to_s,
    "evidence_level" => draft.fetch(:evidence_level, rule.fetch(:evidence_level, "D")).to_s,
    "confidence" => draft.fetch(:confidence, rule.fetch(:default_confidence, rule.fetch(:evidence_level, "A") == "A" ? "direct" : "heuristic")).to_s, "message" => draft.fetch(:message, "").to_s,
    "extraction_basis" => draft[:extraction_basis],
    "document_url" => draft[:document_url], "source_path" => draft[:source_path], "source_line" => draft[:source_line],
    "rendered_location" => draft[:rendered_location] || {"path" => nil, "line" => draft[:line]}, "observation" => observation,
    "remediation" => draft[:remediation] || rule[:remediation] || "", "evidence_urls" => Array(draft[:evidence_urls] || rule[:source_urls]),
    "related_locations" => Array(draft[:related_locations]), "fingerprint" => draft[:fingerprint] || fingerprint(observation, draft),
    "suppression" => draft[:suppression]
  }
end

Instance Attribute Details

#data ⇒ Object (readonly)

Returns the value of attribute data.



10
11
12
# File 'lib/jekyll/agent_audit/finding.rb', line 10

def data
  @data
end

Instance Method Details

#[](key) ⇒ Object



32
# File 'lib/jekyll/agent_audit/finding.rb', line 32

def [](key) = @data[key.to_s]

#severity_rank ⇒ Object



34
# File 'lib/jekyll/agent_audit/finding.rb', line 34

def severity_rank = SEVERITY_ORDER.fetch(self["severity"], 99)

#suppressed? ⇒ Boolean

Returns:

  • (Boolean)


35
# File 'lib/jekyll/agent_audit/finding.rb', line 35

def suppressed? = !self["suppression"].nil?

#to_h ⇒ Object



33
# File 'lib/jekyll/agent_audit/finding.rb', line 33

def to_h = @data.dup