contrast-agent 6.5.0 → 6.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdb8bbd08206dafbb18eee844e1487701c419d27c1df8e4b58c4c226b1995d5c
4
- data.tar.gz: 57bbfe5e3dca05729f95f2994246e74d59f7eecc2f7fe434e265fa5c60cc3734
3
+ metadata.gz: 958ef5b303e23294af4b85759012ab4c80cb0000d97088b4c8f495560701b91e
4
+ data.tar.gz: 714c35c53e89cc2f6335fda57827c5eba620e2ee42ede41d586f072f074defb8
5
5
  SHA512:
6
- metadata.gz: 5f6d80b48529b52719fb7aa4608e0cd42f8ec613e61138d7f7a977652054f9a24f05a78c0d79821749bc4cc1d86b0878009e93f65be47155e47c9e1ec084780d
7
- data.tar.gz: ad3d855319ebf15f1af37cac9507c2774af76a6151d7e9a4559c9de23891bcc41f0642729087165b19d20ee4891e327895f9e0d9c9c5d4e402e3a4b901b44484
6
+ metadata.gz: a3e1c9a23238e9c3a6727fcd19e1ddf177ac699fcb2200eb1ae190f6a9022a3c5b8e0ee109c90793634cbeb54245f07e3b043e244664782f4a83d34896270baa
7
+ data.tar.gz: 79b54ad82d5df30ff7c95499d0862947703a6f6dadab29d3f946072d6c91cd84e3a4207dad71e2be9584b720471325d8eb8fb7d124c4bf4136c4b01a225560bf
@@ -38,7 +38,7 @@ module Contrast
38
38
  attr_reader :mode
39
39
 
40
40
  def initialize
41
- ::Contrast::PROTECT.rules[rule_name] = self
41
+ ::Contrast::PROTECT.defend_rules[rule_name] = self
42
42
  @mode = mode_from_settings
43
43
  end
44
44
 
@@ -26,12 +26,12 @@ module Contrast
26
26
  # event field of Contrast::Agent::Reporting::ReportingEvent
27
27
  # @param response_data [Net::HTTP::Response]
28
28
  def audit_event event, response_data = nil
29
- return unless ::Contrast::API.request_audit_requests? || ::Contrast::API.request_audit_responses?
29
+ return unless ::Contrast::API.request_audit_requests || ::Contrast::API.request_audit_responses
30
30
 
31
31
  file_name = event.cs__respond_to?(:file_name) ? event.file_name : event.cs__class.cs__name.to_s.downcase
32
32
  data = event.to_controlled_hash.to_json
33
33
  log_data(:request, file_name, data) if data
34
- return unless ::Contrast::API.request_audit_responses?
34
+ return unless ::Contrast::API.request_audit_responses
35
35
 
36
36
  data = response_data&.body || 'There is no available response'
37
37
  log_data(:response, file_name, data)
@@ -94,7 +94,7 @@ module Contrast
94
94
  # Retrieves the configuration value if the request audit is enabled
95
95
  # @return [Boolean]
96
96
  def enabled?
97
- ::Contrast::API.request_audit_enable?
97
+ ::Contrast::API.request_audit_enable
98
98
  end
99
99
 
100
100
  # The boolean values for the requests and the responses should be taken under
@@ -107,13 +107,13 @@ module Contrast
107
107
  # Retrieve the configuration value if the audit for requests is enabled
108
108
  # @return [Boolean]
109
109
  def enabled_for_requests?
110
- ::Contrast::API.request_audit_requests?
110
+ ::Contrast::API.request_audit_requests
111
111
  end
112
112
 
113
113
  # Retrieve the configuration value if the audit for responses is enabled
114
114
  # @return [Boolean]
115
115
  def enabled_for_responses?
116
- ::Contrast::API.request_audit_requests?
116
+ ::Contrast::API.request_audit_requests
117
117
  end
118
118
 
119
119
  # Retrieve the configuration value for the path of the audits
@@ -24,7 +24,7 @@ module Contrast
24
24
  @app_language = RUBY
25
25
  @app_path = Base64.strict_encode64(Contrast::APP_CONTEXT.path)
26
26
  @app_version = Contrast::APP_CONTEXT.app_version
27
- @authorization = Base64.strict_encode64("#{ Contrast::API.username }:#{ Contrast::API.service_key }")
27
+ @authorization = Base64.strict_encode64("#{ Contrast::API.user_name }:#{ Contrast::API.service_key }")
28
28
  @server_name = Base64.strict_encode64(Contrast::APP_CONTEXT.server_name)
29
29
  @server_path = Base64.strict_encode64(Contrast::APP_CONTEXT.server_path)
30
30
  @server_type = Base64.strict_encode64(Contrast::APP_CONTEXT.server_type)
@@ -59,7 +59,7 @@ module Contrast
59
59
 
60
60
  request = build_request(event)
61
61
  response = connection.request(request)
62
- audit&.audit_event(event, response) if ::Contrast::API.request_audit_enable?
62
+ audit&.audit_event(event, response) if ::Contrast::API.request_audit_enable
63
63
  process_settings_response(response)
64
64
  process_preflight_response(event, response, connection)
65
65
  response
@@ -185,7 +185,7 @@ module Contrast
185
185
  ::Contrast::SETTINGS.build_protect_rules if ::Contrast::PROTECT.enabled?
186
186
  ::Contrast::AGENT.reset_ruleset
187
187
  logger.info('Current rule settings:')
188
- ::Contrast::PROTECT.rules.each { |k, v| logger.info('Protect Rule mode set', rule: k, mode: v.mode) }
188
+ ::Contrast::PROTECT.defend_rules.each { |k, v| logger.info('Protect Rule mode set', rule: k, mode: v.mode) }
189
189
  logger.info('Disabled Assess Rules', rules: ::Contrast::ASSESS.disabled_rules)
190
190
  end
191
191
  end
@@ -3,6 +3,6 @@
3
3
 
4
4
  module Contrast
5
5
  module Agent
6
- VERSION = '6.5.0'
6
+ VERSION = '6.5.1'
7
7
  end
8
8
  end
@@ -80,7 +80,7 @@ module Contrast
80
80
 
81
81
  logger.info('Current rule settings:')
82
82
 
83
- ::Contrast::PROTECT.rules.each { |k, v| logger.info('Protect Rule mode set', rule: k, mode: v.mode) }
83
+ ::Contrast::PROTECT.defend_rules.each { |k, v| logger.info('Protect Rule mode set', rule: k, mode: v.mode) }
84
84
  logger.info('Disabled Assess Rules', rules: ::Contrast::ASSESS.disabled_rules)
85
85
  end
86
86
  end
@@ -125,7 +125,7 @@ module Contrast
125
125
  def retrieve_protect_ruleset
126
126
  return {} unless enabled? && ::Contrast::PROTECT.enabled?
127
127
 
128
- ::Contrast::PROTECT.rules
128
+ ::Contrast::PROTECT.defend_rules
129
129
  end
130
130
  end
131
131
  end
@@ -3,6 +3,9 @@
3
3
 
4
4
  require 'contrast/components/base'
5
5
  require 'contrast/components/config'
6
+ require 'contrast/config/api_proxy_configuration'
7
+ require 'contrast/config/request_audit_configuration'
8
+ require 'contrast/config/certification_configuration'
6
9
 
7
10
  module Contrast
8
11
  module Components
@@ -12,50 +15,86 @@ module Contrast
12
15
  # parent_configuration_spec.yaml.
13
16
  class Interface
14
17
  include Contrast::Components::ComponentBase
18
+ include Contrast::Config::BaseConfiguration
19
+
20
+ # @return [String]
21
+ attr_accessor :api_key
22
+ # @return [String]
23
+ attr_accessor :user_name
24
+ # @return [String]
25
+ attr_accessor :service_key
26
+ attr_writer :url
27
+
28
+ DEFAULT_URL = 'https://app.contrastsecurity.com/Contrast'
29
+
30
+ def initialize hsh = {}
31
+ return unless hsh
32
+
33
+ @api_key = hsh[:api_key]
34
+ @url = hsh[:url]
35
+ @user_name = hsh[:user_name]
36
+ @service_key = hsh[:service_key]
37
+ @_proxy = Contrast::Config::ApiProxyConfiguration.new(hsh[:proxy])
38
+ @_request_audit = Contrast::Config::RequestAuditConfiguration.new(hsh[:request_audit])
39
+ @_certificate = Contrast::Config::CertificationConfiguration.new(hsh[:certificate])
40
+ end
15
41
 
16
- def api_url
17
- @_api_url ||= begin
18
- tmp = ::Contrast::CONFIG.root.api.url
19
- tmp += '/Contrast' unless tmp.end_with?('/Contrast')
20
- tmp
21
- end
42
+ def url
43
+ @url.nil? ? DEFAULT_URL : @url
22
44
  end
23
45
 
24
- def api_key
25
- @_api_key ||= ::Contrast::CONFIG.root.api.api_key
46
+ # @return [Contrast::Config::ApiProxyConfiguration]
47
+ def proxy
48
+ return @_proxy unless @_proxy.nil?
49
+
50
+ @_proxy = Contrast::Config::ApiProxyConfiguration.new
26
51
  end
27
52
 
28
- def service_key
29
- @_service_key ||= ::Contrast::CONFIG.root.api.service_key
53
+ # @return [Contrast::Config::RequestAuditConfiguration]
54
+ def request_audit
55
+ return @_request_audit unless @_request_audit.nil?
56
+
57
+ @_request_audit = Contrast::Config::RequestAuditConfiguration.new
30
58
  end
31
59
 
32
- def username
33
- @_username ||= ::Contrast::CONFIG.root.api.user_name
60
+ # @return [Contrast::Config::CertificationConfiguration]
61
+ def certificate
62
+ return @_certificate unless @_certificate.nil?
63
+
64
+ @_certificate = Contrast::Config::CertificationConfiguration.new
34
65
  end
35
66
 
36
- def proxy_enabled?
37
- return @_proxy_enabled unless @_proxy_enabled.nil?
67
+ def api_url
68
+ @_api_url ||= begin
69
+ tmp = Contrast::CONFIG.root.api.url
70
+ tmp += '/Contrast' unless tmp.end_with?('/Contrast')
71
+ tmp
72
+ end
73
+ end
38
74
 
39
- @_proxy_enabled = true?(::Contrast::CONFIG.root.api.proxy.enable)
75
+ def proxy_enable
76
+ return @_proxy_enable unless @_proxy_enable.nil?
77
+
78
+ @_proxy_enable = true?(::Contrast::CONFIG.root.api.proxy.enable)
40
79
  end
41
80
 
42
81
  def proxy_url
43
- @_proxy_url ||= ::Contrast::CONFIG.root.api.proxy.url
82
+ proxy.url
44
83
  end
45
84
 
46
- def request_audit_enable?
85
+ def request_audit_enable
47
86
  return @_request_audit_enable unless @_request_audit_enable.nil?
48
87
 
49
88
  @_request_audit_enable = true?(::Contrast::CONFIG.root.api.request_audit.enable)
50
89
  end
51
90
 
52
- def request_audit_requests?
91
+ def request_audit_requests
53
92
  return @_request_audit_requests unless @_request_audit_requests.nil?
54
93
 
55
94
  @_request_audit_requests = true?(::Contrast::CONFIG.root.api.request_audit.requests)
56
95
  end
57
96
 
58
- def request_audit_responses?
97
+ def request_audit_responses
59
98
  return @_request_audit_responses unless @_request_audit_responses.nil?
60
99
 
61
100
  @_request_audit_responses = true?(::Contrast::CONFIG.root.api.request_audit.responses)
@@ -65,10 +104,8 @@ module Contrast
65
104
  @_request_audit_path ||= ::Contrast::CONFIG.root.api.request_audit.path.to_s
66
105
  end
67
106
 
68
- def certification_enabled?
69
- return @_certification_enabled unless @_certification_enabled.nil?
70
-
71
- @_certification_enabled = certification_truly_enabled?(::Contrast::CONFIG.root.api.certificate)
107
+ def certification_enable
108
+ @_certification_enable ||= certification_truly_enabled?(::Contrast::CONFIG.root.api.certificate)
72
109
  end
73
110
 
74
111
  def certification_ca_file
@@ -2,6 +2,8 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'contrast/components/base'
5
+ require 'contrast/config/exception_configuration'
6
+ require 'contrast/config/protect_rule_configuration'
5
7
 
6
8
  module Contrast
7
9
  module Components
@@ -10,6 +12,39 @@ module Contrast
10
12
  # its parent_configuration_spec.yaml. Specifically, this allows for querying the state of the Protect product.
11
13
  class Interface
12
14
  include Contrast::Components::ComponentBase
15
+ include Contrast::Config::BaseConfiguration
16
+
17
+ # @return [Boolean, nil]
18
+ attr_accessor :enable
19
+
20
+ def initialize hsh = {}
21
+ return unless hsh
22
+
23
+ @_exceptions = Contrast::Config::ExceptionConfiguration.new(hsh[:exceptions])
24
+ @_rules = Contrast::Config::ProtectRulesConfiguration.new(hsh[:rules])
25
+ @enable = hsh[:enable]
26
+ end
27
+
28
+ # @return [Contrast::Config::ExceptionConfiguration]
29
+ def exceptions
30
+ @_exceptions ||= Contrast::Config::ExceptionConfiguration.new
31
+ end
32
+
33
+ # Name is kept the same - rules to correspond to config,
34
+ # mapping. - root.protect.rules
35
+ #
36
+ # @return [Contrast::Config::ProtectRulesConfiguration]
37
+ def rules
38
+ @_rules ||= Contrast::Config::ProtectRulesConfiguration.new
39
+ end
40
+
41
+ def rules= new_rules
42
+ @_rules = new_rules
43
+ end
44
+
45
+ def exceptions= new_exceptions
46
+ @_exceptions = new_exceptions
47
+ end
13
48
 
14
49
  def enabled?
15
50
  # config overrides if forcibly set
@@ -23,7 +58,12 @@ module Contrast
23
58
  ::Contrast::CONFIG.root.protect.rules
24
59
  end
25
60
 
26
- def rules
61
+ # Returns Protect array of all initialized
62
+ # protect rules.
63
+ #
64
+ # @return defend_rules[Hash<Contrast::SETTINGS.protect_state.rules>]
65
+ #
66
+ def defend_rules
27
67
  ::Contrast::SETTINGS.protect_state.rules
28
68
  end
29
69
 
@@ -91,6 +91,35 @@ module Contrast
91
91
  include Constants
92
92
  include ClassMethods
93
93
  end
94
+
95
+ class Interface # :nodoc:
96
+ include InstanceMethods
97
+ include Contrast::Config::BaseConfiguration
98
+
99
+ # @return [Integer, nil]
100
+ attr_reader :baseline
101
+ # @return [Integer, nil]
102
+ attr_reader :request_frequency
103
+ # @return [Integer, nil]
104
+ attr_reader :response_frequency
105
+ # @return [Integer, nil]
106
+ attr_reader :window_ms
107
+
108
+ def initialize hsh = {}
109
+ return unless hsh
110
+
111
+ @enable = hsh[:enable]
112
+ @baseline = hsh[:baseline]
113
+ @request_frequency = hsh[:request_frequency]
114
+ @response_frequency = hsh[:response_frequency]
115
+ @window_ms = hsh[:window_ms]
116
+ end
117
+
118
+ # @return [Boolean, false]
119
+ def enable
120
+ !!@enable
121
+ end
122
+ end
94
123
  end
95
124
  end
96
125
  end
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2022 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
2
2
  # frozen_string_literal: true
3
3
 
4
+ require 'contrast/components/sampling'
5
+
4
6
  module Contrast
5
7
  module Config
6
8
  # Common Configuration settings. Those in this section pertain to the
@@ -28,7 +30,7 @@ module Contrast
28
30
  @enable_scan_response = hsh[:enable_scan_response]
29
31
  @enable_dynamic_sources = hsh[:enable_dynamic_sources]
30
32
  @enable_original_object = hsh[:enable_original_object]
31
- @sampling = Contrast::Config::SamplingConfiguration.new(hsh[:sampling])
33
+ @sampling = Contrast::Components::Sampling::Interface.new(hsh[:sampling])
32
34
  @rules = Contrast::Config::AssessRulesConfiguration.new(hsh[:rules])
33
35
  @stacktraces = hsh[:stacktraces]
34
36
  @max_context_source_events = hsh[:max_context_source_events]
@@ -52,9 +54,9 @@ module Contrast
52
54
  @enable_original_object.nil? ? true : @enable_original_object
53
55
  end
54
56
 
55
- # @return [Contrast::Config::SamplingConfiguration]
57
+ # @return [Contrast::Components::Sampling::Interface]
56
58
  def sampling
57
- @sampling ||= Contrast::Config::SamplingConfiguration.new
59
+ @sampling ||= Contrast::Components::Sampling::Interface.new
58
60
  end
59
61
 
60
62
  # @return [Contrast::Config::AssessRulesConfiguration]
@@ -3,14 +3,14 @@
3
3
 
4
4
  require 'contrast/components/agent'
5
5
  require 'contrast/components/inventory'
6
-
6
+ require 'contrast/components/protect'
7
7
  module Contrast
8
8
  module Config
9
9
  # The base of the Common Configuration settings.
10
10
  class RootConfiguration
11
11
  include Contrast::Config::BaseConfiguration
12
12
 
13
- # @return [Contrast::Config::ApiConfiguration]
13
+ # @return [Contrast::Components::Api::Interface]
14
14
  attr_writer :api
15
15
  # @return [Contrast::Components::Agent::Interface]
16
16
  attr_writer :agent
@@ -22,7 +22,7 @@ module Contrast
22
22
  attr_writer :assess
23
23
  # @return [Contrast::Components::Inventory::Interface]
24
24
  attr_writer :inventory
25
- # @return [Contrast::Config::ProtectConfiguration]
25
+ # @return [Contrast::Components::Protect::Interface]
26
26
  attr_writer :protect
27
27
  # @return [Contrast::Config::ServiceConfiguration]
28
28
  attr_writer :service
@@ -33,20 +33,20 @@ module Contrast
33
33
  def initialize hsh = {}
34
34
  raise(ArgumentError, 'Expected a hash') unless hsh.is_a?(Hash)
35
35
 
36
- @api = Contrast::Config::ApiConfiguration.new(hsh[:api])
36
+ @api = Contrast::Components::Api::Interface.new(hsh[:api])
37
37
  @enable = hsh[:enable]
38
38
  @agent = Contrast::Components::Agent::Interface.new(hsh[:agent])
39
39
  @application = Contrast::Config::ApplicationConfiguration.new(hsh[:application])
40
40
  @server = Contrast::Config::ServerConfiguration.new(hsh[:server])
41
41
  @assess = Contrast::Config::AssessConfiguration.new(hsh[:assess])
42
42
  @inventory = Contrast::Components::Inventory::Interface.new(hsh[:inventory])
43
- @protect = Contrast::Config::ProtectConfiguration.new(hsh[:protect])
43
+ @protect = Contrast::Components::Protect::Interface.new(hsh[:protect])
44
44
  @service = Contrast::Config::ServiceConfiguration.new(hsh[:service])
45
45
  end
46
46
 
47
- # @return [Contrast::Config::ApiConfiguration]
47
+ # @return [Contrast::Components::Api::Interface]
48
48
  def api
49
- @api ||= Contrast::Config::ApiConfiguration.new
49
+ @api ||= Contrast::Components::Api::Interface.new
50
50
  end
51
51
 
52
52
  # @return [Contrast::Components::Agent::Interface]
@@ -74,9 +74,9 @@ module Contrast
74
74
  @inventory ||= Contrast::Components::Inventory::Interface.new
75
75
  end
76
76
 
77
- # @return [Contrast::Config::ProtectConfiguration]
77
+ # @return [Contrast::Components::Protect::Interface]
78
78
  def protect
79
- @protect ||= Contrast::Config::ProtectConfiguration.new
79
+ @protect ||= Contrast::Components::Protect::Interface.new
80
80
  end
81
81
 
82
82
  # @return [Contrast::Config::ServiceConfiguration]
@@ -16,12 +16,9 @@ require 'contrast/config/exception_configuration'
16
16
  require 'contrast/config/assess_rules_configuration'
17
17
  require 'contrast/config/protect_rule_configuration'
18
18
  require 'contrast/config/protect_rules_configuration'
19
- require 'contrast/config/sampling_configuration'
20
19
 
21
20
  require 'contrast/config/ruby_configuration'
22
- require 'contrast/config/api_configuration'
23
21
  require 'contrast/config/application_configuration'
24
22
  require 'contrast/config/server_configuration'
25
23
  require 'contrast/config/assess_configuration'
26
- require 'contrast/config/protect_configuration'
27
24
  require 'contrast/config/root_configuration'
@@ -131,7 +131,7 @@ module Contrast
131
131
  end
132
132
  return initialize_client if addr.host.to_s.include?('localhost') # TODO: RUBY-99999 allow http w/ localhost
133
133
 
134
- assign_cert(initialize_client) if use_custom_cert && Contrast::API.certification_enabled?
134
+ assign_cert(initialize_client) if use_custom_cert && Contrast::API.certification_enable
135
135
  initialize_client.use_ssl = true
136
136
  initialize_client.verify_mode = OpenSSL::SSL::VERIFY_PEER
137
137
  initialize_client.verify_depth = 5
@@ -150,7 +150,7 @@ module Contrast
150
150
  def proxy_enabled?
151
151
  return @_proxy_enabled unless @_proxy_enabled.nil?
152
152
 
153
- @_proxy_enabled = Contrast::API.proxy_enabled? && !Contrast::API.proxy_url.nil?
153
+ @_proxy_enabled = Contrast::API.proxy_enable && !Contrast::API.proxy_url.nil?
154
154
  end
155
155
 
156
156
  # Retrieve the IP address from the client.
data/lib/contrast.rb CHANGED
@@ -71,9 +71,9 @@ require 'contrast/agent/telemetry/events/exceptions/telemetry_exception_event'
71
71
  require 'protobuf' # TODO: RUBY-1438
72
72
 
73
73
  module Contrast
74
- API = Contrast::Components::Api::Interface.new
75
- SCOPE = Contrast::Components::Scope::Interface.new
76
74
  CONFIG = Contrast::Components::Config::Interface.new
75
+ SCOPE = Contrast::Components::Scope::Interface.new
76
+ API = CONFIG.root.api
77
77
  SETTINGS = Contrast::Components::Settings::Interface.new
78
78
  ASSESS = Contrast::Components::Assess::Interface.new
79
79
  PROTECT = Contrast::Components::Protect::Interface.new
@@ -1096,6 +1096,17 @@
1096
1096
  "tags":["SQL_ENCODED"],
1097
1097
  "untags":["SQL_DECODED"]
1098
1098
  },
1099
+ {
1100
+ "class_name":"ActiveRecord::ConnectionAdapters::Quoting",
1101
+ "instance_method": true,
1102
+ "method_visibility": "public",
1103
+ "method_name":"quote",
1104
+ "source": "P0",
1105
+ "target": "R",
1106
+ "action": "SPLAT",
1107
+ "tags":["SQL_ENCODED"],
1108
+ "untags":["SQL_DECODED"]
1109
+ },
1099
1110
  {
1100
1111
  "class_name":"IO",
1101
1112
  "method_name":"initialize",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "deadzones":[
3
3
  {
4
- "class_name":"Rspec::Core::Example",
4
+ "class_name":"RSpec::Core::Example",
5
5
  "instance_method":true,
6
6
  "method_visibility": "private",
7
7
  "method_name":"finish"
@@ -49,19 +49,20 @@
49
49
  "class_name":"Rack::Session::Cookie",
50
50
  "instance_method":true,
51
51
  "method_visibility": "public",
52
- "method_name":"commit_session"
52
+ "method_name":"set_session"
53
53
  }, {
54
54
  "class_name":"Rack::Session::Abstract::Persisted",
55
55
  "instance_method":true,
56
56
  "method_visibility": "private",
57
57
  "method_name":"session_exists?",
58
- "code": "https://github.com/rack/rack/blob/master/lib/rack/session/abstract/id.rb#L334"
58
+ "code": "https://github.com/rack/rack-session/blob/main/lib/rack/session/abstract/id.rb#L339"
59
59
  }, {
60
60
  "class_name":"ActionDispatch::FileHandler",
61
61
  "instance_method":true,
62
62
  "method_visibility": "public",
63
63
  "method_name":"match?",
64
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/static.rb#L30"
64
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/static.rb#L30",
65
+ "note": "Removable once Rails 6.0 is no longer supported"
65
66
  }, {
66
67
  "class_name":"ActionDispatch::Http::MimeNegotiation",
67
68
  "instance_method":true,
@@ -109,91 +110,203 @@
109
110
  "instance_method":true,
110
111
  "method_visibility": "public",
111
112
  "method_name":"cookie_jar",
112
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L11"
113
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L11",
114
+ "note": "Removable once Rails 6.1 is no longer supported"
115
+ }, {
116
+ "class_name":"ActionDispatch::RequestCookieMethods",
117
+ "instance_method":true,
118
+ "method_visibility": "public",
119
+ "method_name":"cookie_jar",
120
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L11"
113
121
  }, {
114
122
  "class_name":"ActionDispatch::Request",
115
123
  "instance_method":true,
116
124
  "method_visibility": "public",
117
125
  "method_name":"have_cookie_jar?",
118
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L24"
126
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L24",
127
+ "note": "Removable once Rails 6.1 is no longer supported"
128
+ }, {
129
+ "class_name":"ActionDispatch::RequestCookieMethods",
130
+ "instance_method":true,
131
+ "method_visibility": "public",
132
+ "method_name":"have_cookie_jar?",
133
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L24"
119
134
  }, {
120
135
  "class_name":"ActionDispatch::Request",
121
136
  "instance_method":true,
122
137
  "method_visibility": "public",
123
138
  "method_name":"key_generator",
124
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L32"
139
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L32",
140
+ "note": "Removable once Rails 6.1 is no longer supported"
141
+ }, {
142
+ "class_name":"ActionDispatch::RequestCookieMethods",
143
+ "instance_method":true,
144
+ "method_visibility": "public",
145
+ "method_name":"key_generator",
146
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L32"
125
147
  }, {
126
148
  "class_name":"ActionDispatch::Request",
127
149
  "instance_method":true,
128
150
  "method_visibility": "public",
129
151
  "method_name":"signed_cookie_salt",
130
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L36"
152
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L36",
153
+ "note": "Removable once Rails 6.1 is no longer supported"
154
+ }, {
155
+ "class_name":"ActionDispatch::RequestCookieMethods",
156
+ "instance_method":true,
157
+ "method_visibility": "public",
158
+ "method_name":"signed_cookie_salt",
159
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L36"
131
160
  }, {
132
161
  "class_name":"ActionDispatch::Request",
133
162
  "instance_method":true,
134
163
  "method_visibility": "public",
135
164
  "method_name":"encrypted_cookie_salt",
136
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L40"
165
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L40",
166
+ "note": "Removable once Rails 6.1 is no longer supported"
167
+ }, {
168
+ "class_name":"ActionDispatch::RequestCookieMethods",
169
+ "instance_method":true,
170
+ "method_visibility": "public",
171
+ "method_name":"encrypted_cookie_salt",
172
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L40"
137
173
  }, {
138
174
  "class_name":"ActionDispatch::Request",
139
175
  "instance_method":true,
140
176
  "method_visibility": "public",
141
177
  "method_name":"encrypted_signed_cookie_salt",
142
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L44"
178
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L44",
179
+ "note": "Removable once Rails 6.1 is no longer supported"
180
+ }, {
181
+ "class_name":"ActionDispatch::RequestCookieMethods",
182
+ "instance_method":true,
183
+ "method_visibility": "public",
184
+ "method_name":"encrypted_signed_cookie_salt",
185
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L44"
143
186
  }, {
144
187
  "class_name":"ActionDispatch::Request",
145
188
  "instance_method":true,
146
189
  "method_visibility": "public",
147
190
  "method_name":"authenticated_encrypted_cookie_salt",
148
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L48"
191
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L48",
192
+ "note": "Removable once Rails 6.1 is no longer supported"
193
+ }, {
194
+ "class_name":"ActionDispatch::RequestCookieMethods",
195
+ "instance_method":true,
196
+ "method_visibility": "public",
197
+ "method_name":"authenticated_encrypted_cookie_salt",
198
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L48"
149
199
  }, {
150
200
  "class_name":"ActionDispatch::Request",
151
201
  "instance_method":true,
152
202
  "method_visibility": "public",
153
203
  "method_name":"use_authenticated_cookie_encryption",
154
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L52"
204
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L52",
205
+ "note": "Removable once Rails 6.1 is no longer supported"
206
+ }, {
207
+ "new": true,
208
+ "class_name":"ActionDispatch::RequestCookieMethods",
209
+ "instance_method": true,
210
+ "method_visibility": "public",
211
+ "method_name": "use_authenticated_cookie_encryption",
212
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L52"
155
213
  }, {
156
214
  "class_name":"ActionDispatch::Request",
157
215
  "instance_method":true,
158
216
  "method_visibility": "public",
159
217
  "method_name":"encrypted_cookie_cipher",
160
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L56"
218
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L56",
219
+ "note": "Removable once Rails 6.1 is no longer supported"
220
+ }, {
221
+ "class_name":"ActionDispatch::RequestCookieMethods",
222
+ "instance_method":true,
223
+ "method_visibility": "public",
224
+ "method_name":"encrypted_cookie_cipher",
225
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L56"
161
226
  }, {
162
227
  "class_name":"ActionDispatch::Request",
163
228
  "instance_method":true,
164
229
  "method_visibility": "public",
165
230
  "method_name":"signed_cookie_digest",
166
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L60"
231
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L60",
232
+ "note": "Removable once Rails 6.1 is no longer supported"
233
+ }, {
234
+ "class_name":"ActionDispatch::RequestCookieMethods",
235
+ "instance_method":true,
236
+ "method_visibility": "public",
237
+ "method_name":"signed_cookie_digest",
238
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L60"
167
239
  }, {
168
240
  "class_name":"ActionDispatch::Request",
169
241
  "instance_method":true,
170
242
  "method_visibility": "public",
171
243
  "method_name":"secret_key_base",
172
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L64"
244
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L64",
245
+ "note": "Removable once Rails 6.1 is no longer supported"
246
+ }, {
247
+ "class_name":"ActionDispatch::RequestCookieMethods",
248
+ "instance_method":true,
249
+ "method_visibility": "public",
250
+ "method_name":"secret_key_base",
251
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L64"
173
252
  }, {
174
253
  "class_name":"ActionDispatch::Request",
175
254
  "instance_method":true,
176
255
  "method_visibility": "public",
177
256
  "method_name":"cookies_serializer",
178
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L68"
257
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L68",
258
+ "note": "Removable once Rails 6.1 is no longer supported"
259
+ }, {
260
+ "class_name":"ActionDispatch::RequestCookieMethods",
261
+ "instance_method":true,
262
+ "method_visibility": "public",
263
+ "method_name":"cookies_serializer",
264
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L68"
179
265
  }, {
180
266
  "class_name":"ActionDispatch::Request",
181
267
  "instance_method":true,
182
268
  "method_visibility": "public",
183
269
  "method_name":"cookies_digest",
184
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L72"
270
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L72",
271
+ "note": "Removable once Rails 6.1 is no longer supported"
272
+ }, {
273
+ "class_name":"ActionDispatch::RequestCookieMethods",
274
+ "instance_method":true,
275
+ "method_visibility": "public",
276
+ "method_name":"cookies_digest",
277
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L76"
278
+ }, {
279
+ "class_name":"ActionDispatch::RequestCookieMethods",
280
+ "instance_method":true,
281
+ "method_visibility": "public",
282
+ "method_name":"cookies_same_site_protection",
283
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L72"
185
284
  }, {
186
285
  "class_name":"ActionDispatch::Request",
187
286
  "instance_method":true,
188
287
  "method_visibility": "public",
189
288
  "method_name":"cookies_rotations",
190
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L76"
289
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L76",
290
+ "note": "Removable once Rails 6.1 is no longer supported"
291
+ }, {
292
+ "class_name":"ActionDispatch::RequestCookieMethods",
293
+ "instance_method":true,
294
+ "method_visibility": "public",
295
+ "method_name":"cookies_rotations",
296
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L80"
191
297
  }, {
192
298
  "class_name":"ActionDispatch::Request",
193
299
  "instance_method":true,
194
300
  "method_visibility": "public",
195
301
  "method_name":"use_cookies_with_metadata",
196
- "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L80"
302
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/middleware/cookies.rb#L80",
303
+ "note": "Removable once Rails 6.1 is no longer supported"
304
+ }, {
305
+ "class_name":"ActionDispatch::RequestCookieMethods",
306
+ "instance_method":true,
307
+ "method_visibility": "public",
308
+ "method_name":"use_cookies_with_metadata",
309
+ "code": "https://github.com/rails/rails/blob/v7.0.3/actionpack/lib/action_dispatch/middleware/cookies.rb#L84"
197
310
  }, {
198
311
  "class_name":"ActionDispatch::Request::Session",
199
312
  "instance_method":true,
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.5.0
4
+ version: 6.5.1
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-06-29 00:00:00.000000000 Z
16
+ date: 2022-07-01 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: bundler
@@ -1192,7 +1192,6 @@ files:
1192
1192
  - lib/contrast/components/scope.rb
1193
1193
  - lib/contrast/components/settings.rb
1194
1194
  - lib/contrast/config.rb
1195
- - lib/contrast/config/api_configuration.rb
1196
1195
  - lib/contrast/config/api_proxy_configuration.rb
1197
1196
  - lib/contrast/config/application_configuration.rb
1198
1197
  - lib/contrast/config/assess_configuration.rb
@@ -1201,13 +1200,11 @@ files:
1201
1200
  - lib/contrast/config/certification_configuration.rb
1202
1201
  - lib/contrast/config/env_variables.rb
1203
1202
  - lib/contrast/config/exception_configuration.rb
1204
- - lib/contrast/config/protect_configuration.rb
1205
1203
  - lib/contrast/config/protect_rule_configuration.rb
1206
1204
  - lib/contrast/config/protect_rules_configuration.rb
1207
1205
  - lib/contrast/config/request_audit_configuration.rb
1208
1206
  - lib/contrast/config/root_configuration.rb
1209
1207
  - lib/contrast/config/ruby_configuration.rb
1210
- - lib/contrast/config/sampling_configuration.rb
1211
1208
  - lib/contrast/config/server_configuration.rb
1212
1209
  - lib/contrast/config/service_configuration.rb
1213
1210
  - lib/contrast/configuration.rb
@@ -1,56 +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/config/api_proxy_configuration'
5
- require 'contrast/config/certification_configuration'
6
- require 'contrast/config/request_audit_configuration'
7
-
8
- module Contrast
9
- module Config
10
- # Api keys configuration
11
- class ApiConfiguration
12
- include Contrast::Config::BaseConfiguration
13
-
14
- # @return [String]
15
- attr_accessor :api_key
16
- # @return [String]
17
- attr_accessor :user_name
18
- # @return [String]
19
- attr_accessor :service_key
20
- attr_writer :url, :proxy, :request_audit, :certificate
21
-
22
- DEFAULT_URL = 'https://app.contrastsecurity.com/Contrast'
23
-
24
- def initialize hsh = {}
25
- return unless hsh
26
-
27
- @api_key = hsh[:api_key]
28
- @url = hsh[:url]
29
- @user_name = hsh[:user_name]
30
- @service_key = hsh[:service_key]
31
- @proxy = Contrast::Config::ApiProxyConfiguration.new(hsh[:proxy])
32
- @request_audit = Contrast::Config::RequestAuditConfiguration.new(hsh[:request_audit])
33
- @certificate = Contrast::Config::CertificationConfiguration.new(hsh[:certificate])
34
- end
35
-
36
- def url
37
- @url.nil? ? DEFAULT_URL : @url
38
- end
39
-
40
- # @return [Contrast::Config::ApiProxyConfiguration]
41
- def proxy
42
- @proxy ||= Contrast::Config::ApiProxyConfiguration.new
43
- end
44
-
45
- # @return [Contrast::Config::RequestAuditConfiguration]
46
- def request_audit
47
- @request_audit ||= Contrast::Config::RequestAuditConfiguration.new
48
- end
49
-
50
- # @return [Contrast::Config::CertificationConfiguration]
51
- def certificate
52
- @certificate ||= Contrast::Config::CertificationConfiguration.new
53
- end
54
- end
55
- end
56
- end
@@ -1,33 +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
- module Contrast
5
- module Config
6
- # Common Configuration settings. Those in this section pertain to the protect functionality of the Agent.
7
- class ProtectConfiguration
8
- include Contrast::Config::BaseConfiguration
9
-
10
- # @return [Boolean, nil]
11
- attr_accessor :enable
12
- attr_writer :exceptions, :rules
13
-
14
- def initialize hsh = {}
15
- return unless hsh
16
-
17
- @exceptions = Contrast::Config::ExceptionConfiguration.new(hsh[:exceptions])
18
- @rules = Contrast::Config::ProtectRulesConfiguration.new(hsh[:rules])
19
- @enable = hsh[:enable]
20
- end
21
-
22
- # @return [Contrast::Config::ExceptionConfiguration]
23
- def exceptions
24
- @exceptions ||= Contrast::Config::ExceptionConfiguration.new
25
- end
26
-
27
- # @return [Contrast::Config::ProtectRulesConfiguration]
28
- def rules
29
- @rules ||= Contrast::Config::ProtectRulesConfiguration.new
30
- end
31
- end
32
- end
33
- end
@@ -1,35 +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
- module Contrast
5
- module Config
6
- # Common Configuration settings. Those in this section pertain to the sampling functionality of the Agent.
7
- class SamplingConfiguration
8
- include Contrast::Config::BaseConfiguration
9
-
10
- # @return [Integer, nil]
11
- attr_reader :baseline
12
- # @return [Integer, nil]
13
- attr_reader :request_frequency
14
- # @return [Integer, nil]
15
- attr_reader :response_frequency
16
- # @return [Integer, nil]
17
- attr_reader :window_ms
18
-
19
- def initialize hsh = {}
20
- return unless hsh
21
-
22
- @enable = hsh[:enable]
23
- @baseline = hsh[:baseline]
24
- @request_frequency = hsh[:request_frequency]
25
- @response_frequency = hsh[:response_frequency]
26
- @window_ms = hsh[:window_ms]
27
- end
28
-
29
- # @return [Boolean, false]
30
- def enable
31
- !!@enable
32
- end
33
- end
34
- end
35
- end