Module: Tinymon::Scrub
- Defined in:
- lib/tinymon/scrub.rb
Constant Summary collapse
- SENSITIVE_TAG_KEY =
/password|token|secret|auth|card|cvv|ssn/i.freeze
- DEFAULT_PATTERNS =
[ /\b[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}\b/, # email /\b(?:\d[ \-]?){12,15}\d\b/, # card-like /\b[Bb]earer\s+[A-Za-z0-9._\-]+/, # bearer /\bAuthorization\s*:\s*\S+/ # auth header ].freeze
Class Method Summary collapse
-
.scrub_event(event, scrub_url_query: true, scrub_patterns: nil) ⇒ Object
Mutate the event hash in place.
- .scrub_string(s, patterns) ⇒ Object
- .strip_url_query(url) ⇒ Object
Class Method Details
.scrub_event(event, scrub_url_query: true, scrub_patterns: nil) ⇒ Object
Mutate the event hash in place. Returns it for chaining.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/tinymon/scrub.rb', line 31 def scrub_event(event, scrub_url_query: true, scrub_patterns: nil) patterns = DEFAULT_PATTERNS + Array(scrub_patterns) if scrub_url_query && (req = event[:request] || event["request"]) url_key = req.key?(:url) ? :url : "url" req[url_key] = strip_url_query(req[url_key]) if req[url_key] end if (exc = event[:exception] || event["exception"]) val_key = exc.key?(:value) ? :value : "value" exc[val_key] = scrub_string(exc[val_key], patterns) if exc[val_key] end Array(event[:breadcrumbs] || event["breadcrumbs"]).each do |b| msg_key = b.key?(:message) ? :message : "message" b[msg_key] = scrub_string(b[msg_key], patterns) if b[msg_key] end = event[:tags] || event["tags"] if cleaned = {} .each { |k, v| cleaned[k] = SENSITIVE_TAG_KEY.match?(k.to_s) ? "[redacted]" : v } if event.key?(:tags) event[:tags] = cleaned else event["tags"] = cleaned end end event end |
.scrub_string(s, patterns) ⇒ Object
18 19 20 21 22 |
# File 'lib/tinymon/scrub.rb', line 18 def scrub_string(s, patterns) out = s.to_s.dup patterns.each { |re| out.gsub!(re, "[redacted]") } out end |
.strip_url_query(url) ⇒ Object
24 25 26 27 28 |
# File 'lib/tinymon/scrub.rb', line 24 def strip_url_query(url) return url if url.nil? || url.empty? i = url.index(/[?#]/) i.nil? ? url : url[0...i] end |