Sha256: e49c70be8576cbcbc1d39778a511af2111f3052ba1cce579ab2a9199292a24e6

Contents?: true

Size: 1.55 KB

Versions: 4

Compression:

Stored size: 1.55 KB

Contents

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

module Contrast
  module Framework
    module Rails
      module Patch
        # This class acts as our patch into the ActionController::Live::Buffer
        # class, allowing us to track the close event on streamed responses.
        class ActionControllerLiveBuffer
          class << self
            def send_messages
              return unless (context = Contrast::Agent::REQUEST_TRACKER.current)

              [context.server_activity, context.activity, context.observed_route].each do |msg|
                Contrast::Agent.messaging_queue.send_event_immediately(msg)
              end
            end

            def instrument
              @_instrument ||= begin
                ::ActionController::Live::Buffer.class_eval do
                  # normally pre->in->post filters are applied however, in a streamed response
                  # we can run into a case where it's pre -> in -> post -> more infilters
                  # in order to submit anything found during the infilters after the response has
                  # been written we need to explicitly send them
                  alias_method :cs__close, :close
                  def close
                    Contrast::Framework::Rails::Patch::ActionControllerLiveBuffer.send_messages
                    cs__close
                  end
                end
                true
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
contrast-agent-4.2.0 lib/contrast/framework/rails/patch/action_controller_live_buffer.rb
contrast-agent-4.1.0 lib/contrast/framework/rails/patch/action_controller_live_buffer.rb
contrast-agent-4.0.0 lib/contrast/framework/rails/patch/action_controller_live_buffer.rb
contrast-agent-3.16.0 lib/contrast/framework/rails/patch/action_controller_live_buffer.rb