class OpenTracing::Instrumentation::Mongo::QuerySanitazer

QuerySanitazer clean private data from requests.

Constants

DEFAULT_EXCLUDE_KEYS
DEFAULT_SAFE_CLASSES
OBJECT_ID_PLACEHOLDER
PLACEHOLDER
STRING_PLACEHOLDER

Attributes

exclude_keys[R]
max_array_size[R]
safe_classes[R]
safety_argument_checker[R]

Public Class Methods

new( safety_argument_checker: SampleSafetyArgumentChecker.new, safe_classes: DEFAULT_SAFE_CLASSES, max_array_size: 4, exclude_keys: DEFAULT_EXCLUDE_KEYS ) click to toggle source
Calls superclass method
# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 21
def initialize(
  safety_argument_checker: SampleSafetyArgumentChecker.new,
  safe_classes: DEFAULT_SAFE_CLASSES,
  max_array_size: 4,
  exclude_keys: DEFAULT_EXCLUDE_KEYS
)
  super()
  @safety_argument_checker = safety_argument_checker
  @safe_classes = safe_classes
  @max_array_size = max_array_size
  @exclude_keys = exclude_keys
end

Public Instance Methods

sanitaze(command, command_name) click to toggle source
# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 34
def sanitaze(command, command_name)
  command_without_command_name = super(command, command_name)
  exclude_keys.each do |key|
    command_without_command_name.delete(key)
  end
  sanitaze_value(command_without_command_name)
end

Private Instance Methods

array_with_placeholder(array) click to toggle source
# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 117
def array_with_placeholder(array)
  prefix_size = (max_array_size / 2).ceil
  suffix_size = max_array_size - prefix_size
  array[0...prefix_size] \
    + [ArrayItemPlaceholder.new(array.size - max_array_size)] \
    + array[-suffix_size..-1]
end
sanitaze_array(array) click to toggle source
# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 107
def sanitaze_array(array)
  if max_array_size&.positive? && array.size > max_array_size
    array_with_placeholder(array)
  else
    array
  end.map do |value|
    sanitaze_value(value)
  end
end
sanitaze_hash(hash) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 81
def sanitaze_hash(hash)
  hash.map do |(key, value)|
    # TODO: pass command name.
    # TODO: recursive build path to key
    safe_value =
      if safety_argument_checker.argument_safe?(nil, key, value)
        value
      else
        sanitaze_value(value)
      end

    [key, safe_value]
  end.to_h
end
sanitaze_simple(value) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 65
def sanitaze_simple(value)
  case value
  when BSON::ObjectId
    OBJECT_ID_PLACEHOLDER
  when String
    STRING_PLACEHOLDER
  when ArrayItemPlaceholder
    value.to_s
  when *safe_classes
    value
  else
    PLACEHOLDER
  end
end
sanitaze_value(value) click to toggle source
# File lib/opentracing/instrumentation/mongo/query_sanitazer.rb, line 53
def sanitaze_value(value)
  case value
  when Hash
    sanitaze_hash(value)
  when Enumerable
    sanitaze_array(value)
  else
    sanitaze_simple(value)
  end
end