# Copyright (c) 2020 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details. # frozen_string_literal: true cs__scoped_require 'English' # This must precede other Contrast C extensions cs__scoped_require 'cs__common/cs__common' # This must precede any patching we do as we log patches and we shouldn't cause # requires to happen during that process. cs__scoped_require 'contrast/components/logger' # defining instrumentation, this must precede core extensions # because they need to register their patches cs__scoped_require 'contrast/agent/patching/policy/patcher' cs__scoped_require 'contrast/agent/patching/policy/patch' # core extensions cs__scoped_require 'contrast/extension/assess' cs__scoped_require 'contrast/extension/delegator' cs__scoped_require 'contrast/extension/inventory' cs__scoped_require 'contrast/extension/module' cs__scoped_require 'contrast/extension/protect' cs__scoped_require 'contrast/extension/protect/kernel' cs__scoped_require 'contrast/utils/object_share' cs__scoped_require 'contrast/utils/boolean_util' cs__scoped_require 'contrast/utils/string_utils' cs__scoped_require 'contrast/utils/io_util' cs__scoped_require 'contrast/utils/os' cs__scoped_require 'contrast/common_agent_configuration' cs__scoped_require 'contrast/utils/hash_digest' cs__scoped_require 'contrast/utils/invalid_configuration_util' # scoping cs__scoped_require 'contrast/agent/scope' cs__scoped_require 'contrast/utils/thread_tracker' # Framework support cs__scoped_require 'contrast/framework/manager' # Communication to SR cs__scoped_require 'contrast/api/communication' cs__scoped_require 'contrast/agent/thread_watcher' module Contrast # Top namespace of the Agent section. Holds tracking contexts that will be # accessed throughout the Agent. module Agent # build a map for tracking the context of the current request REQUEST_TRACKER = Contrast::Utils::ThreadTracker.new def self.framework_manager @_framework_manager ||= Contrast::Framework::Manager.new end def self.messaging_queue @_messaging_queue ||= Contrast::Api::Communication::MessagingQueue.new end def self.thread_watcher @_thread_watcher ||= Contrast::Agent::ThreadWatcher.new end end end cs__scoped_require 'contrast/api' cs__scoped_require 'contrast/utils/resource_loader' cs__scoped_require 'contrast/utils/duck_utils' cs__scoped_require 'contrast/agent/tracepoint_hook' cs__scoped_require 'contrast/agent/at_exit_hook' # communication with contrast service cs__scoped_require 'contrast/agent/exclusion_matcher' # threads that handle contrast scope cs__scoped_require 'contrast/agent/thread' # keep track of attacks cs__scoped_require 'contrast/agent/request_context' cs__scoped_require 'contrast/agent/assess' # protect rules cs__scoped_require 'contrast/agent/protect/rule' # application libraries cs__scoped_require 'contrast/utils/gemfile_reader' # rack event monitoring cs__scoped_require 'contrast/agent/middleware' # TODO: RUBY-919 # Refactor to use Contrast::Framework::Manager # Contrast::Framework::Manager.before_load_patches! if defined?(::Rails) cs__scoped_require 'contrast/framework/rails/patch/support' cs__scoped_require 'contrast/framework/rails/patch/rails_application_configuration' Contrast::Framework::Rails::Patch::RailsApplicationConfiguration.instrument cs__scoped_require 'contrast/agent/railtie' if ::Rails::VERSION::MAJOR.to_i >= 3 end