Sha256: ccc7b5f256579a5302837fbcd05cccbfa02a5f34fc714054f6c115c4a664e8a1

Contents?: true

Size: 1.63 KB

Versions: 20

Compression:

Stored size: 1.63 KB

Contents

module Honeybadger
  module Rack
    # Internal: Constructs a request hash from a Rack::Request matching the
    # /v1/notices API specification.
    class RequestHash < ::Hash
      # Internal
      CGI_BLACKLIST = ['QUERY_STRING', 'RAW_POST_DATA'].freeze
      CGI_KEY_REGEXP = /\A[A-Z_]+\Z/

      def initialize(request)
        self[:url] = extract_url(request)
        self[:params] = extract_params(request)
        self[:component] = self[:params]['controller']
        self[:action] = self[:params]['action']
        self[:session] = extract_session(request)
        self[:cgi_data] = extract_cgi_data(request)
      end

      private

      def extract_url(request)
        request.env['honeybadger.request.url'] || request.url
      rescue => e
        # TODO: Log these errors
        "Error: #{e.message}"
      end

      def extract_params(request)
        (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {}
      rescue => e
        { error: "Failed to access params -- #{e.message}" }
      end

      def 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.message}" }
      end

      def extract_cgi_data(request)
        request.env.reject {|k,_| cgi_blacklist?(k) }
      end

      def cgi_blacklist?(key)
        return true if CGI_BLACKLIST.include?(key)
        return true unless key.match(CGI_KEY_REGEXP)

        false
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
honeybadger-2.6.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.6.0 lib/honeybadger/rack/request_hash.rb
honeybadger-2.5.3 lib/honeybadger/rack/request_hash.rb
honeybadger-2.5.2 lib/honeybadger/rack/request_hash.rb
honeybadger-2.5.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.5.0 lib/honeybadger/rack/request_hash.rb
honeybadger-2.4.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.4.0 lib/honeybadger/rack/request_hash.rb
honeybadger-2.3.3 lib/honeybadger/rack/request_hash.rb
honeybadger-2.3.2 lib/honeybadger/rack/request_hash.rb
honeybadger-2.3.2.beta.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.3.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.3.0 lib/honeybadger/rack/request_hash.rb
honeybadger-2.2.0 lib/honeybadger/rack/request_hash.rb
honeybadger-2.2.0.beta.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.6.beta.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.5 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.4 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.3 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.1 lib/honeybadger/rack/request_hash.rb