# Copyright (c) 2022 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details. # frozen_string_literal: true require 'contrast/components/sampling' module Contrast module Config # Common Configuration settings. Those in this section pertain to the # assess functionality of the Agent. class AssessConfiguration include Contrast::Config::BaseConfiguration # @return [String, nil] attr_accessor :tags # @return [Boolean, nil] attr_accessor :enable attr_writer :enable_scan_response, :enable_dynamic_sources, :sampling, :rules, :stacktraces DEFAULT_STACKTRACES = 'ALL' DEFAULT_MAX_SOURCE_EVENTS = 50_000 DEFAULT_MAX_PROPAGATION_EVENTS = 50_000 DEFAULT_MAX_RULE_REPORTED = 50_000 DEFAULT_MAX_RULE_TIME_THRESHOLD = 300_000 def initialize hsh = {} return unless hsh @enable = hsh[:enable] @tags = hsh[:tags] @enable_scan_response = hsh[:enable_scan_response] @enable_dynamic_sources = hsh[:enable_dynamic_sources] @enable_original_object = hsh[:enable_original_object] @sampling = Contrast::Components::Sampling::Interface.new(hsh[:sampling]) @rules = Contrast::Config::AssessRulesConfiguration.new(hsh[:rules]) @stacktraces = hsh[:stacktraces] @max_context_source_events = hsh[:max_context_source_events] @max_propagation_events = hsh[:max_propagation_events] @max_rule_reported = hsh[:max_rule_reported] @time_limit_threshold = hsh[:time_limit_threshold] end # @return [Boolean, true] def enable_scan_response @enable_scan_response.nil? ? true : @enable_scan_response end # @return [Boolean, true] def enable_dynamic_sources @enable_dynamic_sources.nil? ? true : @enable_dynamic_sources end # @return [Boolean, true] def enable_original_object @enable_original_object.nil? ? true : @enable_original_object end # @return [Contrast::Components::Sampling::Interface] def sampling @sampling ||= Contrast::Components::Sampling::Interface.new end # @return [Contrast::Config::AssessRulesConfiguration] def rules @rules ||= Contrast::Config::AssessRulesConfiguration.new end # @return [String] stacktrace level def stacktraces @stacktraces ||= DEFAULT_STACKTRACES end # @return [int] max number of context source events in single request def max_context_source_events @max_context_source_events ||= DEFAULT_MAX_SOURCE_EVENTS end # @return [int] max number of propagation events in single request def max_propagation_events @max_propagation_events ||= DEFAULT_MAX_PROPAGATION_EVENTS end # @return [int] max number of rules reported within time_limit_threshold def max_rule_reported @max_rule_reported ||= DEFAULT_MAX_RULE_REPORTED end # @return [int] max ms threshold for reporting rules def time_limit_threshold @time_limit_threshold ||= DEFAULT_MAX_RULE_TIME_THRESHOLD end end end end