class GoodData::Bricks::MaskLoggerDecorator

Logger decorator with ability to mask sensitive values

Public Class Methods

extract_values(values) click to toggle source

Extract values to mask from structured data @param values [String] or [Hash] or [Array] structured data to be extracted @return [[String]] array of all String in values

# 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
new(logger, params = []) click to toggle source

entry-point @param [Logger] logger logger to decorated @param [Array] values_to_mask sensitive values to be masked out from logs

# 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

Public Instance Methods

add(severity, message = nil, progname = nil) click to toggle source
# 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
class() click to toggle source

Decorator pretends being inner logger itselfs. @return inner logger class

# File lib/gooddata/bricks/middleware/mask_logger_decorator.rb, line 56
def class
  @logger.class
end
debug?() click to toggle source
# File lib/gooddata/bricks/middleware/mask_logger_decorator.rb, line 46
def debug?
  true
end
mask(message) click to toggle source

Masks given message @param message [String] or [Hash] or [Array] message to mask @return masked_message [String] or [Hash] or [Array] masked message

# 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