class Coach::RequestSerializer
Constants
- RACK_UNPREFIXED_HEADERS
Rack specs dictate that CONTENT_TYPE and CONTENT_LENGTH are not prefixed with HTTP_. See rubydoc.info/github/rack/rack/master/file/SPEC
Public Class Methods
apply_header_rule(header, value)
click to toggle source
Applies sanitizing rules. Expects `header` to be in 'http_header_name' form.
# File lib/coach/request_serializer.rb, line 22 def self.apply_header_rule(header, value) return value if header_rules[header].nil? header_rules[header].call(value) end
clear_header_rules!()
click to toggle source
Resets all header sanitizing
# File lib/coach/request_serializer.rb, line 29 def self.clear_header_rules! @header_rules = {} end
header_rules()
click to toggle source
# File lib/coach/request_serializer.rb, line 10 def self.header_rules @header_rules ||= {} end
new(request)
click to toggle source
# File lib/coach/request_serializer.rb, line 33 def initialize(request) @request = request end
sanitize_header(header, &rule)
click to toggle source
Sets global rules on how to sanitize headers. An optional block can be supplied that will determine how to transform the original header value, otherwise a default string is used.
# File lib/coach/request_serializer.rb, line 17 def self.sanitize_header(header, &rule) header_rules[header] = rule || ->(_value) { "[FILTERED]" } end
Public Instance Methods
serialize()
click to toggle source
# File lib/coach/request_serializer.rb, line 37 def serialize { # Identification request_id: @request.uuid, # Request details method: @request.method, path: request_path, format: @request.format.try(:ref), params: @request.filtered_parameters, # uses config.filter_parameters # Extra request info headers: filtered_headers, session_id: @request.remote_ip, # TODO: remove in a future release session_ip: @request.remote_ip, } end
Private Instance Methods
filtered_headers()
click to toggle source
# File lib/coach/request_serializer.rb, line 63 def filtered_headers header_value_pairs = @request.filtered_env.map do |key, value| key = if RACK_UNPREFIXED_HEADERS.include?(key) "http_#{key.downcase}" elsif key.start_with?("HTTP_") key.downcase end [key, self.class.apply_header_rule(key, value)] if key end.compact Hash[header_value_pairs] end
request_path()
click to toggle source
# File lib/coach/request_serializer.rb, line 57 def request_path @request.fullpath rescue StandardError "unknown" end