Class: Lennarb::ParameterFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/lennarb/parameter_filter.rb

Overview

Filters sensitive parameters from logs and exceptions. Useful for preventing the leakage of confidential information.

By default, the following parameter keys are filtered:

  • passw
  • email
  • secret
  • token
  • _key
  • crypt
  • salt
  • certificate
  • otp
  • ssn
  • cvv
  • cvc
  • signature
  • auth
  • credit
  • card_number
  • cvn
  • iban
  • api
  • pin
  • session_id

Matching is case-insensitive, so Password and API_KEY are filtered too.

Examples:

filter = Lennarb::ParameterFilter.new
filter.filter({ password: "secret", user: { email: "[email protected]" } })
# => { password: "[filtered]", user: { email: "[filtered]" } }

Constant Summary collapse

DEFAULT_MASK =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"[FILTERED]"
DEFAULT_FILTERS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

%w[
  passw email secret token _key crypt salt certificate otp ssn cvv cvc
  signature auth credit card_number cvn iban api pin session_id
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(filters = DEFAULT_FILTERS) ⇒ ParameterFilter

Initialize a new parameter filter

Regexp filters are used as given. Anything else is matched as a literal substring of the key, case-insensitively.

Parameters:

  • filters (Array<String, Symbol, Regexp>) (defaults to: DEFAULT_FILTERS)

    List of patterns to filter



52
53
54
55
# File 'lib/lennarb/parameter_filter.rb', line 52

def initialize(filters = DEFAULT_FILTERS)
  union = Regexp.union(filters.map { |pattern| pattern.is_a?(Regexp) ? pattern : pattern.to_s })
  @filter = Regexp.new(union.source, Regexp::IGNORECASE)
end

Instance Method Details

#filter(params, mask: DEFAULT_MASK) ⇒ Hash, Array

Filter parameters according to the configured filter

Parameters:

  • params (Hash, Array)

    Parameters to be filtered

  • mask (String) (defaults to: DEFAULT_MASK)

    Value that will replace filtered parameters

Returns:

  • (Hash, Array)

    Filtered parameters



62
63
64
# File 'lib/lennarb/parameter_filter.rb', line 62

def filter(params, mask: DEFAULT_MASK)
  filter_object(params, mask)
end