Class: RosettAi::Retrofit::SecretDetector
- Inherits:
-
Object
- Object
- RosettAi::Retrofit::SecretDetector
- Defined in:
- lib/rosett_ai/retrofit/secret_detector.rb
Overview
Detects sensitive values in parsed configuration data and replaces them with $secret:env:NAME references.
Recognises API keys, tokens, passwords, and other secrets by key name patterns and value heuristics (length, entropy, prefixes).
Constant Summary collapse
- SENSITIVE_KEY_PATTERNS =
[ /api[_-]?key/i, /secret/i, /token/i, /password/i, /credential/i, /auth/i, /private[_-]?key/i ].freeze
- SECRET_VALUE_PREFIXES =
['sk-', 'pk-', 'ghp_', 'gho_', 'ghs_', 'github_pat_', 'xoxb-', 'xoxp-'].freeze
- MIN_SECRET_LENGTH =
20
Instance Method Summary collapse
-
#initialize(warnings: []) ⇒ SecretDetector
constructor
A new instance of SecretDetector.
-
#redact(data, prefix: '') ⇒ Hash
Scans a hash and replaces sensitive values with secret references.
Constructor Details
#initialize(warnings: []) ⇒ SecretDetector
Returns a new instance of SecretDetector.
32 33 34 |
# File 'lib/rosett_ai/retrofit/secret_detector.rb', line 32 def initialize(warnings: []) @warnings = warnings end |
Instance Method Details
#redact(data, prefix: '') ⇒ Hash
Scans a hash and replaces sensitive values with secret references.
41 42 43 44 45 46 |
# File 'lib/rosett_ai/retrofit/secret_detector.rb', line 41 def redact(data, prefix: '') data.each_with_object({}) do |(key, value), result| full_key = prefix.empty? ? key.to_s : "#{prefix}_#{key}" result[key] = redact_value(key.to_s, value, full_key) end end |