module Honeybadger::Util::RequestHash

Constructs a request hash from a Rack::Request matching the /v1/notices API specification.

Constants

CGI_WHITELIST
HTTP_HEADER_PREFIX

Public Class Methods

extract_cgi_data(request) click to toggle source
# File lib/honeybadger/util/request_hash.rb, line 64
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
extract_params(request) click to toggle source
# File lib/honeybadger/util/request_hash.rb, line 49
def self.extract_params(request)
  (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {}
rescue => e
  { error: "Failed to access params -- #{e}" }
end
extract_session(request) click to toggle source
# File lib/honeybadger/util/request_hash.rb, line 55
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
extract_url(request) click to toggle source
# File lib/honeybadger/util/request_hash.rb, line 43
def self.extract_url(request)
  request.env['honeybadger.request.url'] || request.url
rescue => e
  "Failed to access URL -- #{e}"
end
from_env(env) click to toggle source
# File lib/honeybadger/util/request_hash.rb, line 27
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