@@ -14,31 +14,27 @@ def initialize(client)
14
14
self . sanitize_credit_cards = client . configuration . sanitize_credit_cards
15
15
end
16
16
17
- def process ( value )
18
- return value if value . frozen?
19
- value . each_with_object ( value ) { |( k , v ) , memo | memo [ k ] = sanitize ( k , v ) }
20
- end
21
-
22
- def sanitize ( k , v )
23
- if v . is_a? ( Hash )
24
- process ( v )
25
- elsif v . is_a? ( Array )
26
- v . map { |a | sanitize ( k , a ) }
27
- elsif k . to_s == 'query_string'
28
- sanitize_query_string ( v )
29
- elsif v . is_a? ( Integer ) && matches_regexes? ( k , v )
30
- INT_MASK
31
- elsif v . is_a? ( String )
32
- if fields_re . match ( v . to_s ) && ( json = parse_json_or_nil ( v ) )
17
+ def process ( value , key = nil )
18
+ case value
19
+ when Hash
20
+ !value . frozen? ? value . merge! ( value ) { |k , v | process v , k } : value . merge ( value ) { |k , v | process v , k }
21
+ when Array
22
+ !value . frozen? ? value . map! { |v | process v , key } : value . map { |v | process v , key }
23
+ when Integer
24
+ matches_regexes? ( key , value . to_s ) ? INT_MASK : value
25
+ when String
26
+ if value =~ fields_re && ( json = parse_json_or_nil ( value ) )
33
27
# if this string is actually a json obj, convert and sanitize
34
- json . is_a? ( Hash ) ? process ( json ) . to_json : v
35
- elsif matches_regexes? ( k , v )
28
+ process ( json ) . to_json
29
+ elsif matches_regexes? ( key , value )
36
30
STRING_MASK
31
+ elsif key == 'query_string' || key == :query_string
32
+ sanitize_query_string ( value )
37
33
else
38
- v
34
+ value
39
35
end
40
36
else
41
- v
37
+ value
42
38
end
43
39
end
44
40
@@ -51,8 +47,8 @@ def sanitize_query_string(query_string)
51
47
end
52
48
53
49
def matches_regexes? ( k , v )
54
- ( sanitize_credit_cards && CREDIT_CARD_RE . match ( v . to_s ) ) ||
55
- fields_re . match ( k . to_s )
50
+ ( sanitize_credit_cards && v =~ CREDIT_CARD_RE ) ||
51
+ k =~ fields_re
56
52
end
57
53
58
54
def fields_re
@@ -70,6 +66,7 @@ def special_characters?(string)
70
66
end
71
67
72
68
def parse_json_or_nil ( string )
69
+ return unless string . start_with? ( "[" , "{" )
73
70
JSON . parse ( string )
74
71
rescue JSON ::ParserError , NoMethodError
75
72
nil
0 commit comments