Sha256: 69130c255d6e178cecd4ea9a7f0c3ae185eace848066c9f38f5c600352152fee

Contents?: true

Size: 1.95 KB

Versions: 7

Compression:

Stored size: 1.95 KB

Contents

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

cs__scoped_require 'contrast/agent/disable_reaction'
cs__scoped_require 'contrast/components/interface'

module Contrast
  module Agent
    # Because communication between the Agent/Service and TeamServer can only
    # be initiated by outbound connections from the Agent/Service, we must
    # provide a mechanism for the TeamServer to direct the Agent to take a
    # specific action. This action is referred to as a Reaction. This class is
    # how we handle those Reaction messages.
    class ReactionProcessor
      include Contrast::Components::Interface
      access_component :logging

      # Process the given Reactions from the application settings based on what
      # TeamServer has indicated. Each Reaction will result in a log message
      # and, optionally, an action.
      #
      # @param application_settings [Contrast::Api::Settings::ApplicationSettings]
      #   those settings which the Service has relayed from TeamServer.
      def self.process application_settings
        return nil unless application_settings&.reactions&.any?

        application_settings.reactions.each do |reaction|
          logger.debug(nil, "Received the following reaction: #{ reaction.operation }")

          # the enums are all uppercase, we need to downcase them before attempting to log
          level = reaction.log_level.nil? ? :error : reaction.log_level.downcase

          logger.with_level(nil, reaction.message, level) if reaction.message

          case reaction.operation
          when :DISABLE
            Contrast::Agent::DisableReaction.run reaction, level
          when :NOOP # rubocop:disable Lint/EmptyWhen
            # NOOP
          else
            logger.warn(nil, "ReactionProcessor received a reaction with an unknown operation: #{ reaction.operation }")
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
contrast-agent-3.10.2 lib/contrast/agent/reaction_processor.rb
contrast-agent-3.10.1 lib/contrast/agent/reaction_processor.rb
contrast-agent-3.10.0 lib/contrast/agent/reaction_processor.rb
contrast-agent-3.9.1 lib/contrast/agent/reaction_processor.rb
contrast-agent-3.9.0 lib/contrast/agent/reaction_processor.rb
contrast-agent-3.8.5 lib/contrast/agent/reaction_processor.rb
contrast-agent-3.8.4 lib/contrast/agent/reaction_processor.rb