Module: Apirelio::Metadata

Defined in:
lib/apirelio/metadata.rb

Constant Summary collapse

MAX_ITEMS =
20
MAX_BYTES =
4096
SENSITIVE =
%w[authorization cookie password token secret email ip].freeze

Class Method Summary collapse

Class Method Details

.sanitize(values, allowed_keys: []) ⇒ Object



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

def sanitize(values, allowed_keys: [])
  safe = {}
  values.to_h.each do |raw_key, raw_value|
    key = raw_key.to_s
    next unless scalar?(raw_value)
    next if sensitive?(key)
    next unless key.start_with?("header.") || key == "exception" || allowed_keys.map(&:to_s).include?(key)

    key = key[0, 120]
    value = raw_value.is_a?(String) ? raw_value[0, 1000] : raw_value
    candidate = safe.merge(key => value)
    next if JSON.generate(candidate).bytesize > MAX_BYTES

    safe[key] = value
    break if safe.length >= MAX_ITEMS
  end
  safe
end