lib/raven/processor/sanitizedata.rb in sentry-raven-0.12.3 vs lib/raven/processor/sanitizedata.rb in sentry-raven-0.13.0
- old
+ new
@@ -1,12 +1,20 @@
+require 'json'
module Raven
class Processor::SanitizeData < Processor
STRING_MASK = '********'
INT_MASK = 0
DEFAULT_FIELDS = %w(authorization password passwd secret ssn social(.*)?sec)
CREDIT_CARD_RE = /^(?:\d[ -]*?){13,16}$/
+ attr_accessor :sanitize_fields
+
+ def initialize(client)
+ super
+ self.sanitize_fields = client.configuration.sanitize_fields
+ end
+
def process(value)
value.inject(value) { |memo,(k,v)| memo[k] = sanitize(k,v); memo }
end
def sanitize(k,v)
@@ -14,17 +22,21 @@
process(v)
elsif v.is_a?(Array)
v.map{|a| sanitize(k, a)}
elsif k == 'query_string'
sanitize_query_string(v)
- elsif v.is_a?(String) && (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 v.is_a?(Integer) && (CREDIT_CARD_RE.match(v.to_s) || fields_re.match(k.to_s))
+ elsif v.is_a?(Integer) && matches_regexes?(k,v)
INT_MASK
- elsif v.is_a?(String) && (CREDIT_CARD_RE.match(v.to_s) || fields_re.match(k.to_s))
- STRING_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
@@ -34,11 +46,23 @@
query_hash = CGI::parse(query_string)
processed_query_hash = process(query_hash)
URI.encode_www_form(processed_query_hash)
end
+ def matches_regexes?(k, v)
+ CREDIT_CARD_RE.match(v.to_s) || fields_re.match(k.to_s)
+ end
+
def fields_re
- @fields_re ||= /(#{(DEFAULT_FIELDS + @sanitize_fields).join("|")})/i
+ @fields_re ||= /(#{(DEFAULT_FIELDS | sanitize_fields).join("|")})/i
+ end
+
+ def parse_json_or_nil(string)
+ begin
+ OkJson.decode(string)
+ rescue Raven::OkJson::Error, NoMethodError
+ nil
+ end
end
end
end