Module: Kward::RPC::Redactor
- Defined in:
- lib/kward/rpc/redactor.rb
Constant Summary collapse
- SECRET_KEYS =
/(?:token|secret|api[_-]?key|authorization|password|credential)/i
Class Method Summary collapse
- .redact(value) ⇒ Object
- .redact_string(value) ⇒ Object
- .secret_key?(key) ⇒ Boolean
- .token_count_key?(key) ⇒ Boolean
Class Method Details
.redact(value) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/kward/rpc/redactor.rb', line 8 def redact(value) case value when Hash value.each_with_object({}) do |(key, item), result| if token_count_key?(key.to_s) && item.is_a?(Numeric) result[key] = item elsif secret_key?(key) result[key] = "[REDACTED]" else result[key] = redact(item) end end when Array value.map { |item| redact(item) } when String redact_string(value) else value end end |
.redact_string(value) ⇒ Object
29 30 31 32 33 |
# File 'lib/kward/rpc/redactor.rb', line 29 def redact_string(value) value .gsub(/Bearer\s+[^\s"']+/i, "Bearer [REDACTED]") .gsub(/(sk-[A-Za-z0-9_-]{8,})/, "[REDACTED]") end |
.secret_key?(key) ⇒ Boolean
35 36 37 38 39 40 |
# File 'lib/kward/rpc/redactor.rb', line 35 def secret_key?(key) text = key.to_s return false if text == "apiKeyProviders" text.match?(SECRET_KEYS) end |
.token_count_key?(key) ⇒ Boolean
42 43 44 |
# File 'lib/kward/rpc/redactor.rb', line 42 def token_count_key?(key) key.match?(/\A(?:input|output|cache_read|cache_write|total)_tokens\z/) || key == "estimated" end |