Module: RailVerdict::Intelligence::Redactor

Defined in:
lib/rail_verdict/intelligence/redactor.rb

Defined Under Namespace

Classes: Result

Class Method Summary collapse

Class Method Details

.redact(manifest, trust: "redacted") ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/rail_verdict/intelligence/redactor.rb', line 8

def self.redact(manifest, trust: "redacted")
  snippets = manifest.snippets || []
  redacted = 0
  secret_detected = false
  filtered = []

  snippets.each do |snippet|
    path = snippet["path"] || snippet[:path]
    content = snippet["content"] || snippet[:content] || ""

    if SecretDetector.filename_secret?(path)
      redacted += 1
      secret_detected = true
      next
    end

    if SecretDetector.content_secret?(content)
      secret_detected = true
      if trust == "full"
        return Result.new(manifest: nil, redacted_count: redacted, secret_detected: true)
      else
        redacted += 1
        content = "[REDACTED: probable secret detected]"
      end
    end

    filtered << snippet.merge("content" => content)
  end

  new_manifest = Manifest.new(
    finding_id: manifest.finding_id,
    fingerprint: manifest.fingerprint,
    finding: manifest.finding,
    snippets: filtered,
    rails_facts: manifest.rails_facts,
    git_slice: manifest.git_slice,
    comparison_slice: manifest.comparison_slice,
    policy_reason: manifest.policy_reason
  )
  Result.new(manifest: new_manifest, redacted_count: redacted, secret_detected: secret_detected)
end