Sha256: dbc929189a55ff60bdebd2983658e27df122c92299771524af2c2ab43f78e0c1

Contents?: true

Size: 1.67 KB

Versions: 2

Compression:

Stored size: 1.67 KB

Contents

# Copyright (c) 2023 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
# frozen_string_literal: true

require 'contrast/components/logger'
require 'contrast/components/scope'
require 'contrast/agent/reporting/reporter'
require 'contrast/agent/reporting/masker/masker'

module Contrast
  module Agent
    # This class is instantiated when we receive a request and the agent is enabled to process that request. It holds
    # the ruleset that we perform filtering operations on (currently prefilter and postfilter).
    class RequestHandler
      include Contrast::Components::Logger::InstanceMethods

      attr_reader :ruleset, :context

      # @param context [Contrast::Agent::RequestContext] the context of the request for which this handler applies
      def initialize context
        @context = context
        @ruleset = ::Contrast::AGENT.ruleset
      end

      # reports events[Contrast::Agent::Reporting::ObservedRoute] to TS
      # Other ReportingEvents are handled through batching in the middleware
      #
      def report_observed_route
        return unless (reporter = Contrast::Agent.reporter)
        return if Contrast::Agent::REQUEST_TRACKER.current&.response&.response_code == 404

        reporter.send_event(context.observed_route) if Contrast::ROUTES_SENT.sendable?(context.observed_route)
      end

      # If the response is streaming, we should only perform filtering on our stream safe rules
      def stream_safe_postfilter
        stream_safe_ruleset = ruleset.select(&:stream_safe?)
        postfilter_ruleset = Contrast::Agent::RuleSet.new(stream_safe_ruleset)
        postfilter_ruleset.postfilter
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
contrast-agent-7.6.1 lib/contrast/agent/request/request_handler.rb
contrast-agent-7.6.0 lib/contrast/agent/request/request_handler.rb