class Raven::Processor::SanitizeData

Constants

CREDIT_CARD_RE
DEFAULT_FIELDS
INT_MASK
REGEX_SPECIAL_CHARACTERS
STRING_MASK

Attributes

sanitize_credit_cards[RW]
sanitize_fields[RW]

Public Class Methods

new(client) click to toggle source
Calls superclass method Raven::Processor.new
# File lib/raven/processor/sanitizedata.rb, line 13
def initialize(client)
  super
  self.sanitize_fields = client.configuration.sanitize_fields
  self.sanitize_credit_cards = client.configuration.sanitize_credit_cards
end

Public Instance Methods

process(value) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 19
def process(value)
  value.each_with_object(value) { |(k,v), memo| memo[k] = sanitize(k,v) }
end
sanitize(k,v) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 23
def sanitize(k,v)
  if v.is_a?(Hash)
    process(v)
  elsif v.is_a?(Array)
    v.map{|a| sanitize(k, a)}
  elsif k.to_s == 'query_string'
    sanitize_query_string(v)
  elsif v.is_a?(Integer) && matches_regexes?(k,v)
    INT_MASK
  elsif v.is_a?(String)
    if fields_re.match(v.to_s) && (json = parse_json_or_nil(v))
      #if this string is actually a json obj, convert and sanitize
      json.is_a?(Hash) ? process(json).to_json : v
    elsif matches_regexes?(k,v)
      STRING_MASK
    else
      v
    end
  else
    v
  end
end

Private Instance Methods

fields_re() click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 59
def fields_re
  @fields_re ||= /#{(DEFAULT_FIELDS | sanitize_fields).map do |f|
    use_boundary?(f) ? "\\b#{f}\\b" : f
  end.join("|")}/i
end
matches_regexes?(k, v) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 54
def matches_regexes?(k, v)
  (sanitize_credit_cards && CREDIT_CARD_RE.match(v.to_s)) ||
    fields_re.match(k.to_s)
end
parse_json_or_nil(string) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 73
def parse_json_or_nil(string)
  begin
    OkJson.decode(string)
  rescue Raven::OkJson::Error, NoMethodError
    nil
  end
end
sanitize_query_string(query_string) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 48
def sanitize_query_string(query_string)
  query_hash = CGI.parse(query_string)
  processed_query_hash = process(query_hash)
  URI.encode_www_form(processed_query_hash)
end
special_characters?(string) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 69
def special_characters?(string)
  REGEX_SPECIAL_CHARACTERS.select { |r| string.include?(r) }.any?
end
use_boundary?(string) click to toggle source
# File lib/raven/processor/sanitizedata.rb, line 65
def use_boundary?(string)
  !DEFAULT_FIELDS.include?(string) && !special_characters?(string)
end