Module: ActionDispatch::Http::FilterParameters
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Included In:
| |
| Defined in: | actionpack/lib/action_dispatch/http/filter_parameters.rb |
Overview
Action Dispatch HTTP Filter Parameters
Allows you to specify sensitive query string and POST parameters to filter from the request log.
# Replaces values with "[FILTERED]" for keys that match /foo|bar/i.
env["action_dispatch.parameter_filter"] = [:foo, "bar"]
For more information about filter behavior, see
::ActiveSupport::ParameterFilter.
Constant Summary
-
ENV_MATCH =
Internal use only
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 21[/RAW_POST_DATA/, "rack.request.form_vars"].freeze
-
NULL_ENV_FILTER =
Internal use only
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 23ActiveSupport::ParameterFilter.new ENV_MATCH
-
NULL_PARAM_FILTER =
Internal use only
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 22ActiveSupport::ParameterFilter.new
Class Method Summary
- .filter_query_string(query_string, parameter_filter) Internal use only
- .parameter_filter_for(filters) Internal use only
- .decoded_query_key(key) private Internal use only
- .filter_query_value(key, value, parameter_filter) private Internal use only
Instance Method Summary
-
#filtered_env
Returns a hash of request.env with all sensitive data replaced.
-
#filtered_parameters
Returns a hash of parameters with all sensitive data replaced.
-
#filtered_path
Reconstructs a path with all sensitive GET parameters replaced.
- #initialize
-
#parameter_filter
Returns the
::ActiveSupport::ParameterFilterobject used to filter in this request. - #env_filter private
- #filtered_query_string private
- #parameter_filter_for(filters) private
Class Method Details
.decoded_query_key(key) (private)
This method is for internal use only.
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 59
def decoded_query_key(key) decoded_key = URI.decode_www_form_component(key) decoded_key if decoded_key.valid_encoding? rescue ArgumentError nil end
.filter_query_string(query_string, parameter_filter)
This method is for internal use only.
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 39
def filter_query_string(query_string, parameter_filter) # :nodoc: query_string.split(/([&;])/).map do |part| if part.include?("=") key, value = part.split("=", 2) "#{key}=#{filter_query_value(key, value, parameter_filter)}" else part end end.join("") end
.filter_query_value(key, value, parameter_filter) (private)
This method is for internal use only.
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 51
def filter_query_value(key, value, parameter_filter) if (decoded_key = decoded_query_key(key)) parameter_filter.filter_param(decoded_key, value) else ActiveSupport::ParameterFilter::FILTERED end end
.parameter_filter_for(filters)
This method is for internal use only.
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 29
def parameter_filter_for(filters) # :nodoc: if ActiveSupport::Ractors.main? # Guard against unbounded growth if an application generates ever-changing filter lists @parameter_filters_cache.clear if @parameter_filters_cache.size > 100 @parameter_filters_cache.compute_if_absent(filters) { ActiveSupport::ParameterFilter.new(filters) } else ActiveSupport::ParameterFilter.new(filters) end end
Instance Method Details
#env_filter (private)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 104
def env_filter # :doc: user_key = fetch_header("action_dispatch.parameter_filter") { return NULL_ENV_FILTER } parameter_filter_for(Array(user_key) + ENV_MATCH) end
#filtered_env
Returns a hash of request.env with all sensitive data replaced.
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 84
def filtered_env @filtered_env ||= env_filter.filter(@env) end
#filtered_parameters
Returns a hash of parameters with all sensitive data replaced.
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 77
def filtered_parameters @filtered_parameters ||= parameter_filter.filter(parameters) rescue ActionDispatch::Http::Parameters::ParseError @filtered_parameters = {} end
#filtered_path
Reconstructs a path with all sensitive GET parameters replaced.
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 89
def filtered_path @filtered_path ||= query_string.empty? ? path : "#{path}?#{filtered_query_string}" end
#filtered_query_string (private)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 115
def filtered_query_string # :doc: FilterParameters.filter_query_string(query_string, parameter_filter) end
#initialize
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 68
def initialize super @filtered_parameters = nil @filtered_env = nil @filtered_path = nil @parameter_filter = nil end
#parameter_filter
Returns the ::ActiveSupport::ParameterFilter object used to filter in this
request.
# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 95
def parameter_filter @parameter_filter ||= if has_header?("action_dispatch.parameter_filter") parameter_filter_for get_header("action_dispatch.parameter_filter") else NULL_PARAM_FILTER end end
#parameter_filter_for(filters) (private)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/filter_parameters.rb', line 111
def parameter_filter_for(filters) # :doc: FilterParameters.parameter_filter_for(filters) end