module Honeybadger::Util::RequestHash
def self.extract_cgi_data(request)
def self.extract_cgi_data(request) request.env.each_with_object({}) do |(k,v), env| next unless k.is_a?(String) next unless k.start_with?(HTTP_HEADER_PREFIX) || CGI_WHITELIST.include?(k) env[k] = v end end
def self.extract_params(request)
def self.extract_params(request) (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {} rescue => e { error: "Failed to access params -- #{e}" } end
def self.extract_session(request)
def self.extract_session(request) request.session.to_hash rescue => e # Rails raises ArgumentError when `config.secret_token` is missing, and # ActionDispatch::Session::SessionRestoreError when the session can't be # restored. { error: "Failed to access session data -- #{e}" } end
def self.extract_url(request)
def self.extract_url(request) request.env['honeybadger.request.url'] || request.url rescue => e "Failed to access URL -- #{e}" end
def self.from_env(env)
def self.from_env(env) return {} unless defined?(::Rack::Request) return {} unless env hash, request = {}, ::Rack::Request.new(env.dup) hash[:url] = extract_url(request) hash[:params] = extract_params(request) hash[:component] = hash[:params]['controller'] hash[:action] = hash[:params]['action'] hash[:session] = extract_session(request) hash[:cgi_data] = extract_cgi_data(request) hash end