class Hawkei::Plugins::Rack::Middleware
Hawkei
Plugins Rack Middleware
Middleware
for Rack
Public Class Methods
new(app)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 14 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 18 def call(env) request = ::Rack::Request.new(env) store_tracker(request) store_request_data(request, env) store_and_send_track_request(request) Hawkei::Plugins::Rails::MiddlewareData.store_data(request) if defined?(::Rails) status, headers, body = @app.call(env) write_cookie_session_tracker_id!(headers) send_track_response(request, status) [status, headers, body] ensure Hawkei::Store.clear! unless env['hawkei_test'] end
Private Instance Methods
https_request?(env)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 138 def https_request?(env) env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_SSL'] == 'on' || env['HTTP_X_FORWARDED_PROTO'].to_s.split(',').first == 'https' || env['rack.url_scheme'] == 'https' end
obfuscate_headers(env)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 145 def obfuscate_headers(env) skip_headers = %w[HTTP_COOKIE] headers = env.keys.grep(/^HTTP_|^CONTENT_/).each_with_object({}) do |key, hash| next if skip_headers.include?(key) name = key.gsub(/^HTTP_/, '').split('_').map(&:capitalize).join('-') hash[name] = env[key] end Util.deep_obfuscate_value( headers, Hawkei.configurations.obfuscated_fields ) rescue StandardError => _e {} end
obfuscate_uri(url)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 110 def obfuscate_uri(url) uri = URI.parse(url) params = Util.deep_obfuscate_value( ::Rack::Utils.parse_query(uri.query), Hawkei.configurations.obfuscated_fields, 'HIDDEN' ) return url if params.empty? uri.merge( "?#{::Rack::Utils.build_query(params)}" ).to_s rescue StandardError => _e '' end
obfuscation_get_params(request, type)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 129 def obfuscation_get_params(request, type) Util.deep_obfuscate_value( request.send(type), Hawkei.configurations.obfuscated_fields ) rescue StandardError => _e {} end
send_track_response(request, status)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 52 def send_track_response(request, status) auto_id = request.cookies[Hawkei::Const::FOLLOW] return unless auto_id Hawkei.track( nil, sub_type: 'response', url_path: request.path, properties: { status: status, }, ) end
store_and_send_track_request(request)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 39 def store_and_send_track_request(request) auto_id = request.cookies[Hawkei::Const::FOLLOW] return unless auto_id Hawkei::Store.set(:auto_id, auto_id) Hawkei.track( nil, sub_type: 'request', url_path: request.path, ) end
store_request_data(request, env)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 73 def store_request_data(request, env) Hawkei::Store.set( :request, url: obfuscate_uri(request.url), ssl: request.ssl?, host: request.host, port: request.port, path: request.path, referrer: obfuscate_uri(request.referrer), method: request.request_method, xhr: request.xhr?, user_agent: request.user_agent, ip: request.ip, get_params: obfuscation_get_params(request, 'GET'), post_params: obfuscation_get_params(request, 'POST'), headers: obfuscate_headers(env) ) Hawkei::Store.bulk_set( server_software: request.env['SERVER_SOFTWARE'] ) end
store_tracker(request)
click to toggle source
# File lib/hawkei/plugins/rack/middleware.rb, line 66 def store_tracker(request) Hawkei::Store.set( :session_tracker_id, request.cookies[Hawkei::Const::SESSION_TRACKER_ID] || SecureRandom.uuid ) end