Module: Philiprehberger::Mask::DeepScrubber

Defined in:
lib/philiprehberger/mask/deep_scrubber.rb

Overview

Recursively scrub sensitive data in hashes and arrays

Constant Summary collapse

FILTERED =
'[FILTERED]'

Class Method Summary collapse

Class Method Details

.call(data, patterns:, sensitive_keys:, mode: :full, reveal: 4, placeholder: FILTERED) ⇒ Object

Deep-walk and scrub a data structure

Hashes and Arrays are recursed, Strings are pattern-scrubbed, and +Struct+/+Data+/+to_h+-able objects are converted to a scrubbed Hash.

Parameters:

  • data (Hash, Array, Object)

    the input

  • patterns (Array<Hash>)

    pattern definitions

  • sensitive_keys (Array<Symbol, String>)

    key names to fully redact

  • mode (Symbol) (defaults to: :full)

    masking mode (:full, :partial, :format_preserving)

  • reveal (Integer) (defaults to: 4)

    trailing characters to keep in :partial mode

  • placeholder (String) (defaults to: FILTERED)

    replacement for sensitive-key values

Returns:

  • (Object)

    the scrubbed data (Struct/Data become a Hash)



21
22
23
# File 'lib/philiprehberger/mask/deep_scrubber.rb', line 21

def self.call(data, patterns:, sensitive_keys:, mode: :full, reveal: 4, placeholder: FILTERED)
  walk(data, patterns, normalize_keys(sensitive_keys), mode, reveal, placeholder)
end

.call_with_audit(data, patterns:, sensitive_keys:, placeholder: FILTERED) ⇒ Hash

Deep-walk and scrub with audit trail

Parameters:

  • data (Hash, Array, Object)

    the input

  • patterns (Array<Hash>)

    pattern definitions

  • sensitive_keys (Array<Symbol, String>)

    key names to fully redact

  • placeholder (String) (defaults to: FILTERED)

    replacement for sensitive-key values

Returns:

  • (Hash)

    { result:, audit: [...] }



32
33
34
35
36
# File 'lib/philiprehberger/mask/deep_scrubber.rb', line 32

def self.call_with_audit(data, patterns:, sensitive_keys:, placeholder: FILTERED)
  audit = []
  result = walk_with_audit(data, patterns, normalize_keys(sensitive_keys), audit, placeholder)
  { result: result, audit: audit }
end