Sha256: 6c2409d58a17238e5ff13b50b584b176877f4bbaa243a63e1338ead3c4bd07af

Contents?: true

Size: 1.71 KB

Versions: 5

Compression:

Stored size: 1.71 KB

Contents

module Opbeat
  class Filter
    MASK = '[FILTERED]'
    DEFAULT_FILTER = [/(authorization|password|passwd|secret)/i]

    def initialize(filters=nil)
      if defined?(::Rails)
        rails_filters = ::Rails.application.config.filter_parameters
        rails_filters = nil if rails_filters.count == 0
      end
      @filters = filters || rails_filters || DEFAULT_FILTER
    end

    def apply(value, key=nil, &block)
      if value.is_a?(Hash)
        value.each.inject({}) do |memo, (k, v)|
          memo[k] = apply(v, k, &block)
          memo
        end
      elsif value.is_a?(Array)
        value.map do |value|
          apply(value, key, &block)
        end
      else
        block.call(key, value)
      end
    end

    def sanitize(key, value)
      if !value.is_a?(String) || value.empty?
        value
      elsif @filters.any? { |filter| filter.is_a?(Regexp) ? filter.match(key) : filter.to_s == key.to_s }
        MASK
      else
        value
      end
    end

    def process_event_hash(data)
      return data unless data.has_key? 'http'
      if data['http'].has_key? 'data'
        data['http']['data'] = process_hash(data['http']['data'])
      end
      if data['http'].has_key? 'query_string'
        data['http']['query_string'] = process_string(data['http']['query_string'], '&')
      end
      if data['http'].has_key? 'cookies'
        data['http']['cookies'] = process_string(data['http']['cookies'], ';')
      end
      data
    end

    def process_hash(data)
      apply(data) do |key, value|
        sanitize(key, value)
      end
    end

    def process_string(str, separator='&')
      str.split(separator).map { |s| s.split('=') }.map { |a| a[0]+'='+sanitize(a[0], a[1]) }.join(separator)
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
kuende-opbeat-2.0.4 lib/opbeat/filter.rb
kuende-opbeat-2.0.3 lib/opbeat/filter.rb
kuende-opbeat-2.0.2 lib/opbeat/filter.rb
kuende-opbeat-2.0.1 lib/opbeat/filter.rb
opbeat-2.0.0 lib/opbeat/filter.rb