module Bugno::RequestDataExtractor
Constants
- ALLOWED_BODY_PARSEABLE_METHODS
- ALLOWED_HEADERS_REGEX
Public Instance Methods
extract_request_data_from_rack(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 12 def extract_request_data_from_rack(env) rack_req = ::Rack::Request.new(env) sensitive_params = sensitive_params_list(env) post_params = scrub_params(post_params(rack_req), sensitive_params) get_params = scrub_params(get_params(rack_req), sensitive_params) route_params = scrub_params(route_params(env), sensitive_params) session = scrub_params(request_session(env), sensitive_params) cookies = scrub_params(request_cookies(rack_req), sensitive_params) person_data = scrub_params(person_data(env), sensitive_params) data = { url: request_url(env), ip_address: ip_address(env), headers: headers(env), http_method: request_method(env), params: get_params, route_params: route_params, session: session, cookies: cookies, person_data: person_data } data[:params] = post_params if data[:params].empty? data end
get_params(rack_req)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 121 def get_params(rack_req) rack_req.GET rescue StandardError {} end
headers(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 78 def headers(env) env.keys.grep(ALLOWED_HEADERS_REGEX).map do |header| name = header.gsub(/^HTTP_/, '').split('_').map(&:capitalize).join('-') if name == 'Cookie' {} elsif sensitive_headers_list.include?(name) { name => Bugno::Filter::Params.scrub_value } else { name => env[header] } end end.inject(:merge) end
ip_address(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 117 def ip_address(env) ip_address_string = (env['action_dispatch.remote_ip'] || env['HTTP_X_REAL_IP'] || env['REMOTE_ADDR']).to_s end
person_data(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 49 def person_data(env) current_user = Bugno.configuration.current_user_method controller = env['action_controller.instance'] person_data = begin controller.send(current_user).attributes rescue StandardError {} end person_data end
post_params(rack_req)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 127 def post_params(rack_req) rack_req.POST rescue StandardError {} end
request_method(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 91 def request_method(env) env['REQUEST_METHOD'] || env[:method] end
request_session(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 64 def request_session(env) session = env.fetch('rack.session', {}) session.to_hash rescue StandardError {} end
request_url(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 95 def request_url(env) forwarded_proto = env['HTTP_X_FORWARDED_PROTO'] || env['rack.url_scheme'] || '' scheme = forwarded_proto.split(',').first host = env['HTTP_X_FORWARDED_HOST'] || env['HTTP_HOST'] || env['SERVER_NAME'] || '' host = host.split(',').first.strip unless host.empty? path = env['ORIGINAL_FULLPATH'] || env['REQUEST_URI'] unless path.nil? || path.empty? path = '/' + path.to_s if path.to_s.slice(0, 1) != '/' end port = env['HTTP_X_FORWARDED_PORT'] if port && !(!scheme.nil? && scheme.casecmp('http').zero? && port.to_i == 80) && \ !(!scheme.nil? && scheme.casecmp('https').zero? && port.to_i == 443) && \ !(host.include? ':') host = host + ':' + port end [scheme, '://', host, path].join end
route_params(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 133 def route_params(env) return {} unless defined?(Rails) begin environment = { method: request_method(env) } ::Rails.application.routes.recognize_path(env['PATH_INFO'], environment) rescue StandardError {} end end
scrub_params(params, sensitive_params)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 39 def scrub_params(params, sensitive_params) options = { params: params, config: Bugno.configuration.scrub_fields, extra_fields: sensitive_params, whitelist: Bugno.configuration.scrub_whitelist } Bugno::Filter::Params.call(options) end
sensitive_headers_list()
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 146 def sensitive_headers_list Bugno.configuration.scrub_headers || [] end
sensitive_params_list(env)
click to toggle source
# File lib/bugno/request_data_extractor.rb, line 60 def sensitive_params_list(env) Array(env['action_dispatch.parameter_filter']) end