contrast-agent 6.1.2 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/contrast/agent/at_exit_hook.rb +2 -1
- data/lib/contrast/agent/inventory/dependency_usage_analysis.rb +9 -5
- data/lib/contrast/agent/protect/rule/xss.rb +4 -0
- data/lib/contrast/agent/reporting/reporter.rb +2 -11
- data/lib/contrast/agent/reporting/reporting_events/application_inventory.rb +3 -18
- data/lib/contrast/agent/reporting/reporting_events/discovered_route.rb +75 -15
- data/lib/contrast/agent/reporting/reporting_events/finding.rb +2 -2
- data/lib/contrast/agent/reporting/reporting_events/library_usage_observation.rb +5 -19
- data/lib/contrast/agent/reporting/reporting_events/observed_library_usage.rb +6 -22
- data/lib/contrast/agent/reporting/reporting_events/observed_route.rb +1 -1
- data/lib/contrast/agent/reporting/reporting_events/preflight_message.rb +2 -3
- data/lib/contrast/agent/reporting/reporting_events/reporting_event.rb +1 -3
- data/lib/contrast/agent/reporting/reporting_events/route_coverage.rb +9 -0
- data/lib/contrast/agent/reporting/reporting_utilities/audit.rb +1 -2
- data/lib/contrast/agent/reporting/reporting_utilities/dtm_message.rb +0 -10
- data/lib/contrast/agent/reporting/reporting_utilities/reporter_client.rb +0 -1
- data/lib/contrast/agent/reporting/reporting_utilities/response.rb +60 -2
- data/lib/contrast/agent/reporting/reporting_utilities/response_extractor.rb +32 -10
- data/lib/contrast/agent/reporting/reporting_utilities/response_handler.rb +1 -1
- data/lib/contrast/agent/reporting/reporting_utilities/response_handler_utils.rb +58 -26
- data/lib/contrast/agent/reporting/settings/application_settings.rb +8 -23
- data/lib/contrast/agent/reporting/settings/assess_server_feature.rb +27 -33
- data/lib/contrast/agent/reporting/settings/bot_blocker.rb +68 -0
- data/lib/contrast/agent/reporting/settings/code_exclusion.rb +27 -0
- data/lib/contrast/agent/reporting/settings/exclusion_base.rb +33 -0
- data/lib/contrast/agent/reporting/settings/exclusions.rb +39 -57
- data/lib/contrast/agent/reporting/settings/helpers.rb +56 -0
- data/lib/contrast/agent/reporting/settings/input_exclusion.rb +37 -0
- data/lib/contrast/agent/reporting/settings/ip_filter.rb +35 -0
- data/lib/contrast/agent/reporting/settings/keyword.rb +74 -0
- data/lib/contrast/agent/reporting/settings/log_enhancer.rb +65 -0
- data/lib/contrast/agent/reporting/settings/protect.rb +4 -2
- data/lib/contrast/agent/reporting/settings/protect_server_feature.rb +62 -115
- data/lib/contrast/agent/reporting/settings/reaction.rb +11 -2
- data/lib/contrast/agent/reporting/settings/rule_definition.rb +63 -0
- data/lib/contrast/agent/reporting/settings/sampling.rb +10 -0
- data/lib/contrast/agent/reporting/settings/sanitizer.rb +38 -0
- data/lib/contrast/agent/reporting/settings/sensitive_data_masking.rb +9 -1
- data/lib/contrast/agent/reporting/settings/sensitive_data_masking_rule.rb +7 -0
- data/lib/contrast/agent/reporting/settings/server_features.rb +8 -0
- data/lib/contrast/agent/reporting/settings/syslog.rb +176 -0
- data/lib/contrast/agent/reporting/settings/url_exclusion.rb +42 -0
- data/lib/contrast/agent/reporting/settings/validator.rb +17 -0
- data/lib/contrast/agent/request_context.rb +4 -0
- data/lib/contrast/agent/request_handler.rb +8 -4
- data/lib/contrast/agent/static_analysis.rb +4 -8
- data/lib/contrast/agent/telemetry/events/exceptions/telemetry_exceptions_report.rb +1 -1
- data/lib/contrast/agent/thread_watcher.rb +4 -5
- data/lib/contrast/agent/version.rb +1 -1
- data/lib/contrast/agent.rb +1 -3
- data/lib/contrast/api/decorators/application_update.rb +0 -8
- data/lib/contrast/api/decorators.rb +0 -1
- data/lib/contrast/framework/base_support.rb +5 -4
- data/lib/contrast/framework/grape/support.rb +6 -6
- data/lib/contrast/framework/manager.rb +2 -4
- data/lib/contrast/framework/manager_extend.rb +1 -0
- data/lib/contrast/framework/rails/patch/action_controller_live_buffer.rb +2 -1
- data/lib/contrast/framework/rails/support.rb +9 -2
- data/lib/contrast/framework/sinatra/support.rb +3 -2
- data/lib/contrast/logger/aliased_logging.rb +31 -26
- data/lib/contrast/utils/response_utils.rb +14 -1
- data/lib/contrast/utils/telemetry.rb +9 -0
- data/lib/contrast/utils/telemetry_hash.rb +36 -12
- data/lib/contrast/utils/telemetry_identifier.rb +8 -0
- data/lib/contrast/utils/thread_tracker.rb +26 -9
- data/lib/contrast/utils/timer.rb +6 -1
- data/lib/contrast.rb +1 -3
- metadata +26 -14
- data/lib/contrast/api/decorators/library_usage_update.rb +0 -31
@@ -17,7 +17,7 @@ module Contrast
|
|
17
17
|
# @param data [Object] Any structured data
|
18
18
|
def warn message = nil, exception = nil, data = nil, &block
|
19
19
|
# build Telemetry Exclusion
|
20
|
-
|
20
|
+
build_exception(ALIASED_WARN, message, exception, data)
|
21
21
|
super(message, exception, data, &block)
|
22
22
|
end
|
23
23
|
|
@@ -26,7 +26,7 @@ module Contrast
|
|
26
26
|
# @param data [Object] Any structured data
|
27
27
|
def error message = nil, exception = nil, data = nil, &block
|
28
28
|
# build Telemetry Exclusion
|
29
|
-
|
29
|
+
build_exception(ALIASED_ERROR, message, exception, data)
|
30
30
|
super(message, exception, data, &block)
|
31
31
|
end
|
32
32
|
|
@@ -35,35 +35,35 @@ module Contrast
|
|
35
35
|
# @param data [Object] Any structured data
|
36
36
|
def fatal message = nil, exception = nil, data = nil, &block
|
37
37
|
# build Telemetry Exclusion
|
38
|
-
|
38
|
+
build_exception(ALIASED_FATAL, message, exception, data)
|
39
39
|
super(message, exception, data, &block)
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
44
|
+
def build_exception type, message = nil, exception = nil, data = nil
|
45
|
+
stack_trace = get_stack_trace(type)
|
46
|
+
stack_frame_type = Contrast::Agent::Telemetry::TelemetryException::Obfuscate.obfuscate_type(
|
47
|
+
stack_trace[1].path.delete_prefix(Dir.pwd))
|
48
|
+
stack_frame_function = stack_trace[1].label
|
49
|
+
key = "#{ stack_frame_type }|#{ stack_frame_function }|#{ message }"
|
50
|
+
if TELEMETRY_EXCEPTIONS[key]
|
51
|
+
TELEMETRY_EXCEPTIONS.increment(key)
|
52
|
+
return
|
53
|
+
end
|
54
|
+
|
55
|
+
return if TELEMETRY_EXCEPTIONS.exception_limit?
|
56
|
+
|
57
|
+
message_exception_type = Contrast::Agent::Telemetry::TelemetryException::Obfuscate.obfuscate_exception_type(
|
58
|
+
exception ? exception.cs__class.to_s : stack_frame_type.split('/').last)
|
59
|
+
|
60
|
+
event_message = create_message(stack_frame_function,
|
61
|
+
stack_frame_type, message_exception_type,
|
62
|
+
data, exception,
|
63
|
+
message)
|
64
|
+
TELEMETRY_EXCEPTIONS[key] = event_message
|
65
|
+
rescue StandardError => e
|
66
|
+
debug('Unable to report exception to telemetry', e)
|
67
67
|
end
|
68
68
|
|
69
69
|
def create_message stack_frame_function, stack_frame_type, message_exception_type, data, exception, message
|
@@ -89,6 +89,11 @@ module Contrast
|
|
89
89
|
message = Contrast::Agent::Telemetry::TelemetryException::Message.build(tags, [message_exception])
|
90
90
|
Contrast::Agent::Telemetry::TelemetryException::Event.new(message)
|
91
91
|
end
|
92
|
+
|
93
|
+
def get_stack_trace type
|
94
|
+
start = caller_locations&.find_index { |stack| stack.to_s.include?(type) }
|
95
|
+
start ? caller_locations(start + 1, 20) : caller_locations(20, 20)
|
96
|
+
end
|
92
97
|
end
|
93
98
|
end
|
94
99
|
end
|
@@ -34,7 +34,7 @@ module Contrast
|
|
34
34
|
# @return [nil, String] the content of the body
|
35
35
|
def extract_body body
|
36
36
|
return unless body
|
37
|
-
return if
|
37
|
+
return if body_is_file?(body)
|
38
38
|
|
39
39
|
return handle_rack_body_proxy(body) if body.is_a?(Rack::BodyProxy)
|
40
40
|
return extract_body(body.body) if sub_extractable?(body)
|
@@ -77,6 +77,19 @@ module Contrast
|
|
77
77
|
obj.to_s
|
78
78
|
end
|
79
79
|
end
|
80
|
+
|
81
|
+
# After Rack 3.1 gets live - line 88 (Rack::File) will be removed.
|
82
|
+
# In 3.1 version, they drop the support for File class and will only support Files class
|
83
|
+
#
|
84
|
+
# @param body [String, Rack::File, Rack::BodyProxy,
|
85
|
+
# ActionDispatch::Response::RackBody, Rack::Response] Something that
|
86
|
+
# holds, wraps, or is the body of the Response
|
87
|
+
def body_is_file? body
|
88
|
+
return true if defined?(Rack::File) && (body.is_a?(Rack::File) || body.is_a?(Rack::File::Iterator))
|
89
|
+
return true if defined?(Rack::Files) && (body.is_a?(Rack::Files) || body.is_a?(Rack::Files::Iterator))
|
90
|
+
|
91
|
+
false
|
92
|
+
end
|
80
93
|
end
|
81
94
|
end
|
82
95
|
end
|
@@ -34,10 +34,16 @@ module Contrast
|
|
34
34
|
write_mark_file(DIR, FILE, CONFIG_DIR)
|
35
35
|
end
|
36
36
|
|
37
|
+
# The telemetry disclaimer message, set if needed.
|
38
|
+
#
|
39
|
+
# @return [String]
|
37
40
|
def self.disclaimer
|
38
41
|
@_disclaimer = MESSAGE[:disclaimer]
|
39
42
|
end
|
40
43
|
|
44
|
+
# Determine if telemetry has been explicitly disabled by opt out or has been left running.
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
41
47
|
def self.exceptions_enabled?
|
42
48
|
@_exceptions_enabled = telemetry_exceptions_enabled? if @_exceptions_enabled.nil?
|
43
49
|
@_exceptions_enabled
|
@@ -82,6 +88,9 @@ module Contrast
|
|
82
88
|
false
|
83
89
|
end
|
84
90
|
|
91
|
+
# Determine if telemetry has been explicitly disabled by opt out or has been left running.
|
92
|
+
#
|
93
|
+
# @return [Boolean]
|
85
94
|
def telemetry_exceptions_enabled?
|
86
95
|
opts_out_telemetry = return_value(:telemetry_opt_outs).to_s
|
87
96
|
return false if opts_out_telemetry.casecmp?('true') || opts_out_telemetry == '1'
|
@@ -2,34 +2,58 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'contrast/components/logger'
|
5
|
+
require 'contrast/agent/telemetry/events/exceptions/telemetry_exception_event'
|
5
6
|
|
6
7
|
module Contrast
|
7
8
|
module Utils
|
8
|
-
# This is the TelemetryHash, which will
|
9
|
-
# validating the event before that
|
9
|
+
# This is the TelemetryHash, which will store Contrast::Agent::Telemetry::TelemetryException::Event, so we can push
|
10
|
+
# freely, without worrying about validating the event before that. TelemetryHash has a max size of events,
|
11
|
+
# default is 10 events
|
10
12
|
class TelemetryHash < Hash
|
11
13
|
include Contrast::Components::Logger::InstanceMethods
|
14
|
+
HASH_SIZE_LIMIT = 10
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
# Wrapper to set a value in this TelemetryHash only if the provided value is of the data_type for this
|
17
|
+
# TelemetryHash or the hash has not reached its limit of for unique keys
|
18
|
+
#
|
19
|
+
# @param key [Object] the key to which to associate the value
|
20
|
+
# @param value [Object] the value to store
|
21
|
+
# @return [Object, nil] echo back out the value as the Hash#[]= method does, or nil if not of the expected
|
22
|
+
# data_type
|
20
23
|
def []= key, value
|
24
|
+
return if exception_limit?
|
21
25
|
return unless valid_value?(value)
|
22
26
|
|
23
27
|
super(key, value)
|
24
28
|
end
|
25
29
|
|
30
|
+
# Increment the occurrences for the exception object contained in this TelemetryHash
|
31
|
+
#
|
32
|
+
# @param key [Object] the key to check for the exception stored in this TelemetryHash
|
26
33
|
def increment key
|
27
|
-
self[key]
|
28
|
-
|
34
|
+
value = self[key]
|
35
|
+
return unless value&.exceptions&.any?
|
36
|
+
|
37
|
+
value.exceptions[0].increment_occurrences
|
29
38
|
end
|
30
39
|
|
40
|
+
# Determine if hash has reached exception event limit
|
41
|
+
# @return [Boolean]
|
42
|
+
def exception_limit?
|
43
|
+
unless size < HASH_SIZE_LIMIT
|
44
|
+
logger.debug("Number of TelemetryExceptions exceeds limit of #{ HASH_SIZE_LIMIT }")
|
45
|
+
return true
|
46
|
+
end
|
47
|
+
false
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
# Determine if the given value is valid based on the datatype which this TelemetryHash contains
|
53
|
+
# @param value [Object]
|
54
|
+
# @return boolean
|
31
55
|
def valid_value? value
|
32
|
-
unless value.cs__is_a?(
|
56
|
+
unless value.cs__is_a?(Contrast::Agent::Telemetry::TelemetryException::Event)
|
33
57
|
logger.debug('The following key will be omitted', value: value)
|
34
58
|
return false
|
35
59
|
end
|
@@ -38,6 +38,10 @@ module Contrast
|
|
38
38
|
@_mac = find_mac(primary) || find_mac
|
39
39
|
end
|
40
40
|
|
41
|
+
# Set and return a Sha256 hash representing this application, based on the mac identifier of this machine and
|
42
|
+
# the application name or a Secure UUID if one of them cannot be determined.
|
43
|
+
#
|
44
|
+
# @return [String]
|
41
45
|
def self.application_id
|
42
46
|
@_application_id ||= begin
|
43
47
|
id = nil
|
@@ -48,6 +52,10 @@ module Contrast
|
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
55
|
+
# Set and return a Sha256 hash representing this agent run, based on the mac identifier of this machine or a
|
56
|
+
# Secure UUID if one cannot be determined.
|
57
|
+
#
|
58
|
+
# @return [String]
|
51
59
|
def self.instance_id
|
52
60
|
@_instance_id ||= Digest::SHA2.new(256).hexdigest(Contrast::Utils::Telemetry::Identifier.mac ||
|
53
61
|
"_#{ SecureRandom.uuid }")
|
@@ -3,36 +3,53 @@
|
|
3
3
|
|
4
4
|
module Contrast
|
5
5
|
module Utils
|
6
|
-
# ThreadTracker allows tracking of singleton objects across threads
|
6
|
+
# ThreadTracker allows tracking of singleton objects across threads. It acts on Thread#[] as that call is
|
7
|
+
# fiber-local where as Thread#thread_variables is not.
|
7
8
|
class ThreadTracker
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
9
|
+
# Get the given key to given value in Thread#[] or return default.
|
10
|
+
#
|
11
|
+
# @param key [Object] key used to reference the value
|
12
|
+
# @param default [Object] value to return if not present in Thread#[]
|
13
|
+
# @return [Object]
|
13
14
|
def get key, default = nil
|
14
15
|
Thread.current[key] || default
|
15
16
|
end
|
16
17
|
|
18
|
+
# Set the given key to given value in Thread#[].
|
19
|
+
#
|
20
|
+
# @param key [Object] key used to reference the value
|
21
|
+
# @param value [Object] value to store
|
17
22
|
def set key, value
|
18
23
|
Thread.current[key] = value
|
19
24
|
end
|
20
25
|
|
26
|
+
# Remove the given key from the current Thread#[] by setting it to nil.
|
27
|
+
#
|
28
|
+
# @param key [Object] key of the value to delete
|
21
29
|
def delete key
|
22
30
|
Thread.current[key] = nil
|
23
31
|
end
|
24
32
|
|
25
|
-
|
26
|
-
|
27
|
-
|
33
|
+
# Wrap the block given with a RequestContext by setting it beforehand and deleting it after.
|
34
|
+
#
|
35
|
+
# @param context [Contrast::Agent::RequestContext]
|
36
|
+
def lifespan context
|
37
|
+
set(:current_context, context)
|
38
|
+
response = yield(context)
|
28
39
|
delete(:current_context)
|
29
40
|
response
|
30
41
|
end
|
31
42
|
|
43
|
+
# Retrieve the Thread#[] RequestContext
|
44
|
+
#
|
45
|
+
# @return [Contrast::Agent::RequestContext]
|
32
46
|
def current
|
33
47
|
get(:current_context)
|
34
48
|
end
|
35
49
|
|
50
|
+
# Set the Thread#[] context to the one provided.
|
51
|
+
#
|
52
|
+
# @param context [Contrast::Agent::RequestContext]
|
36
53
|
def update_current_context context
|
37
54
|
set(:current_context, context)
|
38
55
|
end
|
data/lib/contrast/utils/timer.rb
CHANGED
@@ -6,14 +6,19 @@ module Contrast
|
|
6
6
|
# Timer is class that can track state about when an event starts and how long it takes
|
7
7
|
# Also contains utility methods to get time values in milliseconds
|
8
8
|
class Timer
|
9
|
-
|
9
|
+
# @return [Integer] the ms of the Time that this instance represents
|
10
|
+
attr_reader :start_ms
|
10
11
|
|
12
|
+
# Create a wrapper for the current time
|
13
|
+
#
|
14
|
+
# @param time [Time]
|
11
15
|
def initialize time = Time.now
|
12
16
|
@start_at = time
|
13
17
|
@start_ms = (@start_at.to_f * 1000).to_i
|
14
18
|
@events = {}
|
15
19
|
end
|
16
20
|
|
21
|
+
# @return [Integer] time, in ms
|
17
22
|
def self.now_ms
|
18
23
|
(Time.now.to_f * 1000).to_i
|
19
24
|
end
|
data/lib/contrast.rb
CHANGED
@@ -66,9 +66,7 @@ module Contrast
|
|
66
66
|
end
|
67
67
|
|
68
68
|
module Contrast
|
69
|
-
TELEMETRY_EXCEPTIONS = if Contrast::Utils::Telemetry.exceptions_enabled?
|
70
|
-
Contrast::Utils::TelemetryHash.new(Contrast::Agent::Telemetry::TelemetryException::Event)
|
71
|
-
end
|
69
|
+
TELEMETRY_EXCEPTIONS = (Contrast::Utils::TelemetryHash.new if Contrast::Utils::Telemetry.exceptions_enabled?)
|
72
70
|
end
|
73
71
|
|
74
72
|
# This needs to be required very early, after component interfaces, and before instrumentation attempts
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contrast-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- galen.palmer@contrastsecurity.com
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: exe
|
15
15
|
cert_chain: []
|
16
|
-
date: 2022-05-
|
16
|
+
date: 2022-05-27 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: bundler
|
@@ -631,22 +631,22 @@ executables:
|
|
631
631
|
- contrast_service
|
632
632
|
extensions:
|
633
633
|
- ext/cs__common/extconf.rb
|
634
|
-
- ext/cs__assess_marshal_module/extconf.rb
|
635
|
-
- ext/cs__assess_kernel/extconf.rb
|
636
|
-
- ext/cs__assess_string/extconf.rb
|
637
|
-
- ext/cs__assess_test/extconf.rb
|
638
634
|
- ext/cs__assess_string_interpolation26/extconf.rb
|
639
|
-
- ext/cs__assess_basic_object/extconf.rb
|
640
635
|
- ext/cs__assess_array/extconf.rb
|
641
|
-
- ext/
|
642
|
-
- ext/cs__contrast_patch/extconf.rb
|
643
|
-
- ext/cs__assess_hash/extconf.rb
|
644
|
-
- ext/cs__scope/extconf.rb
|
636
|
+
- ext/cs__assess_basic_object/extconf.rb
|
645
637
|
- ext/cs__assess_fiber_track/extconf.rb
|
646
|
-
- ext/
|
638
|
+
- ext/cs__assess_hash/extconf.rb
|
639
|
+
- ext/cs__assess_marshal_module/extconf.rb
|
640
|
+
- ext/cs__assess_yield_track/extconf.rb
|
641
|
+
- ext/cs__assess_string/extconf.rb
|
642
|
+
- ext/cs__assess_regexp/extconf.rb
|
647
643
|
- ext/cs__os_information/extconf.rb
|
644
|
+
- ext/cs__scope/extconf.rb
|
645
|
+
- ext/cs__assess_test/extconf.rb
|
648
646
|
- ext/cs__tests/extconf.rb
|
649
|
-
- ext/
|
647
|
+
- ext/cs__assess_kernel/extconf.rb
|
648
|
+
- ext/cs__assess_module/extconf.rb
|
649
|
+
- ext/cs__contrast_patch/extconf.rb
|
650
650
|
extra_rdoc_files: []
|
651
651
|
files:
|
652
652
|
- ".clang-format"
|
@@ -1057,14 +1057,27 @@ files:
|
|
1057
1057
|
- lib/contrast/agent/reporting/settings/application_settings.rb
|
1058
1058
|
- lib/contrast/agent/reporting/settings/assess.rb
|
1059
1059
|
- lib/contrast/agent/reporting/settings/assess_server_feature.rb
|
1060
|
+
- lib/contrast/agent/reporting/settings/bot_blocker.rb
|
1061
|
+
- lib/contrast/agent/reporting/settings/code_exclusion.rb
|
1062
|
+
- lib/contrast/agent/reporting/settings/exclusion_base.rb
|
1060
1063
|
- lib/contrast/agent/reporting/settings/exclusions.rb
|
1064
|
+
- lib/contrast/agent/reporting/settings/helpers.rb
|
1065
|
+
- lib/contrast/agent/reporting/settings/input_exclusion.rb
|
1066
|
+
- lib/contrast/agent/reporting/settings/ip_filter.rb
|
1067
|
+
- lib/contrast/agent/reporting/settings/keyword.rb
|
1068
|
+
- lib/contrast/agent/reporting/settings/log_enhancer.rb
|
1061
1069
|
- lib/contrast/agent/reporting/settings/protect.rb
|
1062
1070
|
- lib/contrast/agent/reporting/settings/protect_server_feature.rb
|
1063
1071
|
- lib/contrast/agent/reporting/settings/reaction.rb
|
1072
|
+
- lib/contrast/agent/reporting/settings/rule_definition.rb
|
1064
1073
|
- lib/contrast/agent/reporting/settings/sampling.rb
|
1074
|
+
- lib/contrast/agent/reporting/settings/sanitizer.rb
|
1065
1075
|
- lib/contrast/agent/reporting/settings/sensitive_data_masking.rb
|
1066
1076
|
- lib/contrast/agent/reporting/settings/sensitive_data_masking_rule.rb
|
1067
1077
|
- lib/contrast/agent/reporting/settings/server_features.rb
|
1078
|
+
- lib/contrast/agent/reporting/settings/syslog.rb
|
1079
|
+
- lib/contrast/agent/reporting/settings/url_exclusion.rb
|
1080
|
+
- lib/contrast/agent/reporting/settings/validator.rb
|
1068
1081
|
- lib/contrast/agent/request.rb
|
1069
1082
|
- lib/contrast/agent/request_context.rb
|
1070
1083
|
- lib/contrast/agent/request_context_extend.rb
|
@@ -1118,7 +1131,6 @@ files:
|
|
1118
1131
|
- lib/contrast/api/decorators/instrumentation_mode.rb
|
1119
1132
|
- lib/contrast/api/decorators/ip_denylist.rb
|
1120
1133
|
- lib/contrast/api/decorators/library.rb
|
1121
|
-
- lib/contrast/api/decorators/library_usage_update.rb
|
1122
1134
|
- lib/contrast/api/decorators/message.rb
|
1123
1135
|
- lib/contrast/api/decorators/rasp_rule_sample.rb
|
1124
1136
|
- lib/contrast/api/decorators/response_type.rb
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# Copyright (c) 2022 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'contrast/utils/string_utils'
|
5
|
-
|
6
|
-
module Contrast
|
7
|
-
module Api
|
8
|
-
module Decorators
|
9
|
-
# Used to decorate the LibraryUsageUpdate protobuf
|
10
|
-
module LibraryUsageUpdate
|
11
|
-
def self.included klass
|
12
|
-
klass.extend(ClassMethods)
|
13
|
-
end
|
14
|
-
|
15
|
-
# Used to add class methods to the LibraryUsageUpdate class on inclusion of the decorator
|
16
|
-
module ClassMethods
|
17
|
-
def build digest, files
|
18
|
-
msg = new
|
19
|
-
msg.hash_code = Contrast::Utils::StringUtils.force_utf8(digest)
|
20
|
-
files.each do |required_file|
|
21
|
-
msg.class_names[required_file] = true
|
22
|
-
end
|
23
|
-
msg
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
Contrast::Api::Dtm::LibraryUsageUpdate.include(Contrast::Api::Decorators::LibraryUsageUpdate)
|