Class: GoodData::Bricks::MaskLoggerDecorator

Inherits:
Object
  • Object
show all
Defined in:
lib/gooddata/bricks/middleware/mask_logger_decorator.rb

Overview

Logger decorator with ability to mask sensitive values

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger, params = []) ⇒ MaskLoggerDecorator

entry-point

Parameters:

  • logger (Logger)

    logger to decorated

  • values_to_mask (Array)

    sensitive values to be masked out from logs



12
13
14
15
# File 'lib/gooddata/bricks/middleware/mask_logger_decorator.rb', line 12

def initialize(logger, params = [])
  @logger = logger
  @values_to_mask = GoodData::Bricks::MaskLoggerDecorator.extract_values(params)
end

Class Method Details

.extract_values(values) ⇒ [String]

Extract values to mask from structured data

Parameters:

  • values (String)

    or [Hash] or [Array] structured data to be extracted

Returns:

  • ([String])

    array of all String in values



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/gooddata/bricks/middleware/mask_logger_decorator.rb', line 21

def extract_values(values)
  if values.is_a?(String)
    if values.nil? || values.empty? || values.gsub(/[*|\s]/, '') == ''
      []
    else
      [values]
    end
  elsif values.is_a?(Hash) || values.is_a?(Array)
    (values.is_a?(Hash) ? values.values : values).reduce([]) do |strings, item|
      strings.concat extract_values(item)
      strings
    end
  else
    []
  end
end

Instance Method Details

#add(severity, message = nil, progname = nil) ⇒ Object



60
61
62
63
64
# File 'lib/gooddata/bricks/middleware/mask_logger_decorator.rb', line 60

def add(severity, message = nil, progname = nil)
  mask message
  mask progname
  @logger.add(severity, message, progname)
end

#classObject

Decorator pretends being inner logger itselfs.

Returns:

  • inner logger class



56
57
58
# File 'lib/gooddata/bricks/middleware/mask_logger_decorator.rb', line 56

def class
  @logger.class
end

#debug?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/gooddata/bricks/middleware/mask_logger_decorator.rb', line 46

def debug?
  true
end

#mask(message) ⇒ Object

Masks given message

Parameters:

  • message (String)

    or [Hash] or [Array] message to mask



69
70
71
72
73
74
75
76
77
# File 'lib/gooddata/bricks/middleware/mask_logger_decorator.rb', line 69

def mask(message)
  unless message.nil?
    string = message.to_s

    @values_to_mask.reduce(string) do |masked_message, value_to_mask|
      masked_message.gsub(value_to_mask, "******")
    end
  end
end