Class: Olyx::Guardrails::SecretScanner
- Inherits:
-
Object
- Object
- Olyx::Guardrails::SecretScanner
- Defined in:
- lib/olyx/guardrails/secret_scanner.rb
Overview
Detects, redacts, or rejects documented credential and internal-endpoint formats.
Public findings contain a masked value, fingerprint, category, and source offsets. They never contain the complete matched credential.
Constant Summary collapse
- Blocked =
Raised by scan! when one or more safe secret findings exist. Instances expose
findingsand the inheriteddecisionsummary. Secrets::Blocked
Class Method Summary collapse
-
.redact(text, custom_patterns: []) ⇒ Object
:call-seq: SecretScanner.redact(text, custom_patterns: []) -> Hash.
-
.scan(text, custom_patterns: []) ⇒ Object
:call-seq: SecretScanner.scan(text, custom_patterns: []) -> Hash.
-
.scan!(text, custom_patterns: []) ⇒ Object
:call-seq: SecretScanner.scan!(text, custom_patterns: []) -> Hash.
Class Method Details
.redact(text, custom_patterns: []) ⇒ Object
:call-seq:
SecretScanner.redact(text, custom_patterns: []) -> Hash
Converts text with to_s and returns transformed :text, a :leaked
Boolean, and safe :findings. A confidentiality marker redacts the
complete input because the marker does not identify one safe span.
37 38 39 40 41 42 43 44 45 |
# File 'lib/olyx/guardrails/secret_scanner.rb', line 37 def self.redact(text, custom_patterns: []) source = text.to_s findings = collect(source, custom_patterns) { text: findings.empty? ? source : Secrets::Redactor.call(source, findings), leaked: findings.any?, findings: Secrets::FindingPresenter.call(findings) } end |
.scan(text, custom_patterns: []) ⇒ Object
:call-seq:
SecretScanner.scan(text, custom_patterns: []) -> Hash
Converts text with to_s and returns a :leaked Boolean with safe
:findings. custom_patterns must be an Array of regular-expression
source Strings. Invalid patterns raise ArgumentError.
26 27 28 29 |
# File 'lib/olyx/guardrails/secret_scanner.rb', line 26 def self.scan(text, custom_patterns: []) findings = collect(text, custom_patterns) { leaked: findings.any?, findings: Secrets::FindingPresenter.call(findings) } end |
.scan!(text, custom_patterns: []) ⇒ Object
:call-seq:
SecretScanner.scan!(text, custom_patterns: []) -> Hash
Returns the same result as scan when no finding exists. Raises SecretScanner::Blocked with safe findings when a secret is detected.
52 53 54 55 56 57 |
# File 'lib/olyx/guardrails/secret_scanner.rb', line 52 def self.scan!(text, custom_patterns: []) result = scan(text, custom_patterns: custom_patterns) raise Blocked, result[:findings] if result[:leaked] result end |