Sha256: f742a2ba0da799f22b6bd1e107382c43b8792c31168ac9ec6d0767f6c9f9aa46

Contents?: true

Size: 1.61 KB

Versions: 11

Compression:

Stored size: 1.61 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.

module NewRelic
  module Agent
    module ParameterFiltering
      extend self

      ACTION_DISPATCH_PARAMETER_FILTER = "action_dispatch.parameter_filter".freeze

      RAILS_FILTER_CLASS = if defined?(ActiveSupport::ParameterFilter)
         ActiveSupport::ParameterFilter
      elsif defined?(ActionDispatch::Http::ParameterFilter)
        ActionDispatch::Http::ParameterFilter
      else
        nil
      end

      def apply_filters(env, params)
        if filters = env[ACTION_DISPATCH_PARAMETER_FILTER]
          params = filter_using_rails(params, filters) 
        end
        params = filter_rack_file_data(env, params)
        params
      end

      def filter_using_rails(params, filters)
        return params if RAILS_FILTER_CLASS.nil?

        pre_filtered_params = filter_rails_request_parameters(params)
        RAILS_FILTER_CLASS.new(filters).filter(pre_filtered_params)
      end

      def filter_rack_file_data(env, params)
        content_type = env["CONTENT_TYPE"]
        multipart = content_type && content_type.start_with?("multipart")

        params.inject({}) do |memo, (k,v)|
          if multipart && v.is_a?(Hash) && v[:tempfile]
            memo[k] = "[FILE]"
          else
            memo[k] = v
          end
          memo
        end
      end

      def filter_rails_request_parameters(params)
        result = params.dup
        result.delete("controller")
        result.delete("action")
        result
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
newrelic_rpm-8.2.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-8.1.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-8.0.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-7.2.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-7.1.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-7.0.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-6.15.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-6.14.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-6.13.1 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-6.13.0 lib/new_relic/agent/parameter_filtering.rb
newrelic_rpm-6.12.0.367 lib/new_relic/agent/parameter_filtering.rb