contrast-agent 4.13.1 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (399) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +2 -2
  3. data/Gemfile +1 -1
  4. data/LICENSE.txt +1 -1
  5. data/Rakefile +1 -1
  6. data/exe/contrast_service +1 -1
  7. data/ext/build_funchook.rb +1 -1
  8. data/ext/cs__assess_array/cs__assess_array.c +1 -1
  9. data/ext/cs__assess_array/extconf.rb +1 -1
  10. data/ext/cs__assess_basic_object/cs__assess_basic_object.c +1 -1
  11. data/ext/cs__assess_basic_object/extconf.rb +1 -1
  12. data/ext/cs__assess_fiber_track/cs__assess_fiber_track.c +1 -1
  13. data/ext/cs__assess_fiber_track/extconf.rb +1 -1
  14. data/ext/cs__assess_hash/cs__assess_hash.c +1 -1
  15. data/ext/cs__assess_hash/extconf.rb +1 -1
  16. data/ext/cs__assess_kernel/cs__assess_kernel.c +1 -1
  17. data/ext/cs__assess_kernel/extconf.rb +1 -1
  18. data/ext/cs__assess_marshal_module/cs__assess_marshal_module.c +1 -1
  19. data/ext/cs__assess_marshal_module/extconf.rb +1 -1
  20. data/ext/cs__assess_module/cs__assess_module.c +42 -32
  21. data/ext/cs__assess_module/extconf.rb +1 -1
  22. data/ext/cs__assess_regexp/cs__assess_regexp.c +1 -1
  23. data/ext/cs__assess_regexp/extconf.rb +1 -1
  24. data/ext/cs__assess_string/cs__assess_string.c +1 -1
  25. data/ext/cs__assess_string/extconf.rb +1 -1
  26. data/ext/cs__assess_string_interpolation26/cs__assess_string_interpolation26.c +1 -1
  27. data/ext/cs__assess_string_interpolation26/extconf.rb +1 -1
  28. data/ext/cs__assess_yield_track/cs__assess_yield_track.c +1 -1
  29. data/ext/cs__assess_yield_track/extconf.rb +1 -1
  30. data/ext/cs__common/cs__common.c +1 -1
  31. data/ext/cs__common/extconf.rb +1 -1
  32. data/ext/cs__contrast_patch/cs__contrast_patch.c +1 -1
  33. data/ext/cs__contrast_patch/extconf.rb +1 -1
  34. data/ext/cs__os_information/cs__os_information.c +1 -1
  35. data/ext/cs__os_information/extconf.rb +1 -1
  36. data/ext/extconf_common.rb +1 -1
  37. data/lib/contrast/agent/assess/contrast_event.rb +7 -11
  38. data/lib/contrast/agent/assess/contrast_object.rb +1 -1
  39. data/lib/contrast/agent/assess/events/event_data.rb +30 -0
  40. data/lib/contrast/agent/assess/events/event_factory.rb +14 -6
  41. data/lib/contrast/agent/assess/events/source_event.rb +22 -3
  42. data/lib/contrast/agent/assess/finalizers/freeze.rb +1 -1
  43. data/lib/contrast/agent/assess/finalizers/hash.rb +1 -1
  44. data/lib/contrast/agent/assess/policy/dynamic_source_factory.rb +7 -7
  45. data/lib/contrast/agent/assess/policy/patcher.rb +1 -35
  46. data/lib/contrast/agent/assess/policy/policy.rb +1 -1
  47. data/lib/contrast/agent/assess/policy/policy_node.rb +7 -7
  48. data/lib/contrast/agent/assess/policy/policy_scanner.rb +6 -1
  49. data/lib/contrast/agent/assess/policy/preshift.rb +1 -1
  50. data/lib/contrast/agent/assess/policy/propagation_method.rb +55 -28
  51. data/lib/contrast/agent/assess/policy/propagation_node.rb +1 -1
  52. data/lib/contrast/agent/assess/policy/propagator/append.rb +1 -1
  53. data/lib/contrast/agent/assess/policy/propagator/base.rb +1 -1
  54. data/lib/contrast/agent/assess/policy/propagator/center.rb +2 -2
  55. data/lib/contrast/agent/assess/policy/propagator/custom.rb +1 -1
  56. data/lib/contrast/agent/assess/policy/propagator/database_write.rb +6 -2
  57. data/lib/contrast/agent/assess/policy/propagator/insert.rb +5 -2
  58. data/lib/contrast/agent/assess/policy/propagator/keep.rb +1 -1
  59. data/lib/contrast/agent/assess/policy/propagator/match_data.rb +11 -3
  60. data/lib/contrast/agent/assess/policy/propagator/next.rb +1 -1
  61. data/lib/contrast/agent/assess/policy/propagator/prepend.rb +1 -1
  62. data/lib/contrast/agent/assess/policy/propagator/rack_protection.rb +1 -1
  63. data/lib/contrast/agent/assess/policy/propagator/remove.rb +1 -1
  64. data/lib/contrast/agent/assess/policy/propagator/replace.rb +1 -1
  65. data/lib/contrast/agent/assess/policy/propagator/reverse.rb +1 -1
  66. data/lib/contrast/agent/assess/policy/propagator/select.rb +3 -2
  67. data/lib/contrast/agent/assess/policy/propagator/splat.rb +1 -1
  68. data/lib/contrast/agent/assess/policy/propagator/split.rb +27 -25
  69. data/lib/contrast/agent/assess/policy/propagator/substitution.rb +3 -157
  70. data/lib/contrast/agent/assess/policy/propagator/substitution_utils.rb +190 -0
  71. data/lib/contrast/agent/assess/policy/propagator/trim.rb +9 -4
  72. data/lib/contrast/agent/assess/policy/propagator.rb +1 -1
  73. data/lib/contrast/agent/assess/policy/source_method.rb +39 -26
  74. data/lib/contrast/agent/assess/policy/source_node.rb +1 -1
  75. data/lib/contrast/agent/assess/policy/source_validation/cross_site_validator.rb +1 -1
  76. data/lib/contrast/agent/assess/policy/source_validation/source_validation.rb +1 -1
  77. data/lib/contrast/agent/assess/policy/trigger/reflected_xss.rb +7 -2
  78. data/lib/contrast/agent/assess/policy/trigger/xpath.rb +1 -1
  79. data/lib/contrast/agent/assess/policy/trigger_method.rb +68 -18
  80. data/lib/contrast/agent/assess/policy/trigger_node.rb +15 -7
  81. data/lib/contrast/agent/assess/policy/trigger_validation/redos_validator.rb +1 -1
  82. data/lib/contrast/agent/assess/policy/trigger_validation/ssrf_validator.rb +1 -1
  83. data/lib/contrast/agent/assess/policy/trigger_validation/trigger_validation.rb +1 -1
  84. data/lib/contrast/agent/assess/policy/trigger_validation/xss_validator.rb +2 -2
  85. data/lib/contrast/agent/assess/properties.rb +1 -1
  86. data/lib/contrast/agent/assess/property/evented.rb +25 -12
  87. data/lib/contrast/agent/assess/property/tagged.rb +52 -58
  88. data/lib/contrast/agent/assess/property/updated.rb +1 -1
  89. data/lib/contrast/agent/assess/rule/provider/hardcoded_key.rb +1 -19
  90. data/lib/contrast/agent/assess/rule/provider/hardcoded_password.rb +1 -13
  91. data/lib/contrast/agent/assess/rule/provider/hardcoded_value_rule.rb +42 -60
  92. data/lib/contrast/agent/assess/rule/provider.rb +1 -1
  93. data/lib/contrast/agent/assess/rule/response/autocomplete_rule.rb +68 -0
  94. data/lib/contrast/agent/assess/rule/response/base_rule.rb +197 -0
  95. data/lib/contrast/agent/assess/rule/response/cachecontrol_rule.rb +184 -0
  96. data/lib/contrast/agent/assess/rule/response/clickjacking_rule.rb +66 -0
  97. data/lib/contrast/agent/assess/rule/response/csp_header_insecure_rule.rb +101 -0
  98. data/lib/contrast/agent/assess/rule/response/csp_header_missing_rule.rb +46 -0
  99. data/lib/contrast/agent/assess/rule/response/hsts_header_rule.rb +60 -0
  100. data/lib/contrast/agent/assess/rule/response/parameters_pollution_rule.rb +60 -0
  101. data/lib/contrast/agent/assess/rule/response/x_content_type_rule.rb +52 -0
  102. data/lib/contrast/agent/assess/rule/response/x_xss_protection_rule.rb +53 -0
  103. data/lib/contrast/agent/assess/tag.rb +1 -1
  104. data/lib/contrast/agent/assess/tracker.rb +1 -1
  105. data/lib/contrast/agent/assess.rb +1 -2
  106. data/lib/contrast/agent/at_exit_hook.rb +1 -1
  107. data/lib/contrast/agent/deadzone/policy/deadzone_node.rb +13 -8
  108. data/lib/contrast/agent/deadzone/policy/policy.rb +1 -1
  109. data/lib/contrast/agent/disable_reaction.rb +1 -1
  110. data/lib/contrast/agent/exclusion_matcher.rb +1 -1
  111. data/lib/contrast/agent/inventory/database_config.rb +115 -77
  112. data/lib/contrast/agent/inventory/dependencies.rb +1 -1
  113. data/lib/contrast/agent/inventory/dependency_analysis.rb +1 -1
  114. data/lib/contrast/agent/inventory/dependency_usage_analysis.rb +3 -3
  115. data/lib/contrast/agent/inventory/policy/datastores.rb +1 -1
  116. data/lib/contrast/agent/inventory/policy/policy.rb +1 -1
  117. data/lib/contrast/agent/inventory/policy/trigger_node.rb +1 -1
  118. data/lib/contrast/agent/inventory.rb +1 -1
  119. data/lib/contrast/agent/metric_telemetry_event.rb +3 -3
  120. data/lib/contrast/agent/middleware.rb +8 -77
  121. data/lib/contrast/agent/module_data.rb +1 -1
  122. data/lib/contrast/agent/patching/policy/after_load_patch.rb +1 -1
  123. data/lib/contrast/agent/patching/policy/after_load_patcher.rb +1 -1
  124. data/lib/contrast/agent/patching/policy/method_policy.rb +31 -104
  125. data/lib/contrast/agent/patching/policy/method_policy_extend.rb +113 -0
  126. data/lib/contrast/agent/patching/policy/module_policy.rb +1 -1
  127. data/lib/contrast/agent/patching/policy/patch.rb +1 -1
  128. data/lib/contrast/agent/patching/policy/patch_status.rb +2 -26
  129. data/lib/contrast/agent/patching/policy/patcher.rb +13 -13
  130. data/lib/contrast/agent/patching/policy/policy.rb +1 -1
  131. data/lib/contrast/agent/patching/policy/policy_node.rb +1 -1
  132. data/lib/contrast/agent/patching/policy/trigger_node.rb +1 -1
  133. data/lib/contrast/agent/protect/policy/applies_command_injection_rule.rb +1 -1
  134. data/lib/contrast/agent/protect/policy/applies_deserialization_rule.rb +1 -1
  135. data/lib/contrast/agent/protect/policy/applies_no_sqli_rule.rb +1 -1
  136. data/lib/contrast/agent/protect/policy/applies_path_traversal_rule.rb +1 -1
  137. data/lib/contrast/agent/protect/policy/applies_sqli_rule.rb +1 -1
  138. data/lib/contrast/agent/protect/policy/applies_xxe_rule.rb +1 -1
  139. data/lib/contrast/agent/protect/policy/policy.rb +1 -1
  140. data/lib/contrast/agent/protect/policy/rule_applicator.rb +1 -1
  141. data/lib/contrast/agent/protect/policy/trigger_node.rb +1 -1
  142. data/lib/contrast/agent/protect/rule/base.rb +1 -1
  143. data/lib/contrast/agent/protect/rule/base_service.rb +1 -1
  144. data/lib/contrast/agent/protect/rule/cmd_injection.rb +1 -1
  145. data/lib/contrast/agent/protect/rule/default_scanner.rb +1 -1
  146. data/lib/contrast/agent/protect/rule/deserialization.rb +1 -1
  147. data/lib/contrast/agent/protect/rule/http_method_tampering.rb +1 -1
  148. data/lib/contrast/agent/protect/rule/no_sqli/mongo_no_sql_scanner.rb +1 -1
  149. data/lib/contrast/agent/protect/rule/no_sqli.rb +1 -1
  150. data/lib/contrast/agent/protect/rule/path_traversal.rb +1 -1
  151. data/lib/contrast/agent/protect/rule/sql_sample_builder.rb +1 -1
  152. data/lib/contrast/agent/protect/rule/sqli/default_sql_scanner.rb +1 -1
  153. data/lib/contrast/agent/protect/rule/sqli/mysql_sql_scanner.rb +1 -1
  154. data/lib/contrast/agent/protect/rule/sqli/postgres_sql_scanner.rb +2 -2
  155. data/lib/contrast/agent/protect/rule/sqli/sqlite_sql_scanner.rb +1 -1
  156. data/lib/contrast/agent/protect/rule/sqli.rb +1 -1
  157. data/lib/contrast/agent/protect/rule/unsafe_file_upload.rb +1 -1
  158. data/lib/contrast/agent/protect/rule/xss.rb +1 -1
  159. data/lib/contrast/agent/protect/rule/xxe/entity_wrapper.rb +1 -1
  160. data/lib/contrast/agent/protect/rule/xxe.rb +1 -1
  161. data/lib/contrast/agent/protect/rule.rb +1 -1
  162. data/lib/contrast/agent/reaction_processor.rb +1 -1
  163. data/lib/contrast/agent/reporting/report.rb +27 -0
  164. data/lib/contrast/agent/reporting/reporter.rb +115 -0
  165. data/lib/contrast/agent/reporting/reporting_events/application_inventory.rb +49 -0
  166. data/lib/contrast/agent/reporting/reporting_events/application_update.rb +82 -0
  167. data/lib/contrast/agent/reporting/reporting_events/architecture_component.rb +80 -0
  168. data/lib/contrast/agent/reporting/reporting_events/discovered_route.rb +59 -0
  169. data/lib/contrast/agent/reporting/reporting_events/finding.rb +195 -0
  170. data/lib/contrast/agent/reporting/reporting_events/finding_event.rb +264 -0
  171. data/lib/contrast/agent/reporting/reporting_events/finding_event_source.rb +57 -0
  172. data/lib/contrast/agent/reporting/reporting_events/finding_object.rb +90 -0
  173. data/lib/contrast/agent/reporting/reporting_events/finding_request.rb +121 -0
  174. data/lib/contrast/agent/reporting/reporting_events/finding_signature.rb +105 -0
  175. data/lib/contrast/agent/reporting/reporting_events/finding_stack.rb +67 -0
  176. data/lib/contrast/agent/reporting/reporting_events/finding_taint_range.rb +58 -0
  177. data/lib/contrast/agent/reporting/reporting_events/library_discovery.rb +93 -0
  178. data/lib/contrast/agent/reporting/reporting_events/library_usage_observation.rb +50 -0
  179. data/lib/contrast/agent/reporting/reporting_events/observed_library_usage.rb +54 -0
  180. data/lib/contrast/agent/reporting/reporting_events/observed_route.rb +66 -0
  181. data/lib/contrast/agent/reporting/reporting_events/preflight.rb +39 -0
  182. data/lib/contrast/agent/reporting/reporting_events/preflight_message.rb +75 -0
  183. data/lib/contrast/agent/reporting/reporting_events/reporting_event.rb +47 -0
  184. data/lib/contrast/agent/reporting/reporting_events/route_coverage.rb +76 -0
  185. data/lib/contrast/agent/reporting/reporting_events/route_discovery.rb +66 -0
  186. data/lib/contrast/agent/reporting/reporting_events/route_discovery_observation.rb +65 -0
  187. data/lib/contrast/agent/reporting/reporting_events/server_activity.rb +52 -0
  188. data/lib/contrast/agent/reporting/reporting_events/trace_event_source.rb +30 -0
  189. data/lib/contrast/agent/reporting/reporting_utilities/audit.rb +137 -0
  190. data/lib/contrast/agent/reporting/reporting_utilities/dtm_message.rb +67 -0
  191. data/lib/contrast/agent/reporting/reporting_utilities/endpoints.rb +165 -0
  192. data/lib/contrast/agent/reporting/reporting_utilities/headers.rb +55 -0
  193. data/lib/contrast/agent/reporting/reporting_utilities/reporter_client.rb +86 -0
  194. data/lib/contrast/agent/reporting/reporting_utilities/reporter_client_utils.rb +154 -0
  195. data/lib/contrast/agent/reporting/reporting_utilities/reporting_storage.rb +66 -0
  196. data/lib/contrast/agent/reporting/reporting_utilities/response.rb +30 -0
  197. data/lib/contrast/agent/reporting/reporting_utilities/response_handler.rb +57 -0
  198. data/lib/contrast/agent/reporting/reporting_utilities/response_handler_utils.rb +196 -0
  199. data/lib/contrast/agent/reporting/settings/application_settings.rb +67 -0
  200. data/lib/contrast/agent/reporting/settings/assess.rb +45 -0
  201. data/lib/contrast/agent/reporting/settings/assess_server_feature.rb +136 -0
  202. data/lib/contrast/agent/reporting/settings/exclusions.rb +123 -0
  203. data/lib/contrast/agent/reporting/settings/protect.rb +89 -0
  204. data/lib/contrast/agent/reporting/settings/protect_server_feature.rb +243 -0
  205. data/lib/contrast/agent/reporting/settings/reaction.rb +30 -0
  206. data/lib/contrast/agent/reporting/settings/server_features.rb +78 -0
  207. data/lib/contrast/agent/request.rb +46 -84
  208. data/lib/contrast/agent/request_context.rb +20 -131
  209. data/lib/contrast/agent/request_context_extend.rb +176 -0
  210. data/lib/contrast/agent/request_handler.rb +41 -5
  211. data/lib/contrast/agent/response.rb +25 -88
  212. data/lib/contrast/agent/rule_set.rb +1 -1
  213. data/lib/contrast/agent/scope.rb +1 -1
  214. data/lib/contrast/agent/service_heartbeat.rb +1 -1
  215. data/lib/contrast/agent/startup_metrics_telemetry_event.rb +73 -23
  216. data/lib/contrast/agent/static_analysis.rb +14 -4
  217. data/lib/contrast/agent/telemetry.rb +16 -8
  218. data/lib/contrast/agent/telemetry_event.rb +9 -10
  219. data/lib/contrast/agent/thread.rb +1 -1
  220. data/lib/contrast/agent/thread_watcher.rb +32 -6
  221. data/lib/contrast/agent/tracepoint_hook.rb +1 -4
  222. data/lib/contrast/agent/version.rb +2 -2
  223. data/lib/contrast/agent/worker_thread.rb +1 -1
  224. data/lib/contrast/agent.rb +16 -1
  225. data/lib/contrast/api/communication/connection_status.rb +11 -8
  226. data/lib/contrast/api/communication/messaging_queue.rb +38 -4
  227. data/lib/contrast/api/communication/response_processor.rb +22 -11
  228. data/lib/contrast/api/communication/service_lifecycle.rb +14 -4
  229. data/lib/contrast/api/communication/socket.rb +7 -9
  230. data/lib/contrast/api/communication/socket_client.rb +33 -13
  231. data/lib/contrast/api/communication/speedracer.rb +38 -2
  232. data/lib/contrast/api/communication/tcp_socket.rb +5 -4
  233. data/lib/contrast/api/communication/unix_socket.rb +2 -1
  234. data/lib/contrast/api/communication.rb +1 -1
  235. data/lib/contrast/api/decorators/address.rb +1 -1
  236. data/lib/contrast/api/decorators/agent_startup.rb +1 -1
  237. data/lib/contrast/api/decorators/application_settings.rb +1 -1
  238. data/lib/contrast/api/decorators/application_startup.rb +1 -1
  239. data/lib/contrast/api/decorators/application_update.rb +1 -1
  240. data/lib/contrast/api/decorators/architecture_component.rb +36 -0
  241. data/lib/contrast/api/decorators/finding.rb +29 -0
  242. data/lib/contrast/api/decorators/http_request.rb +3 -2
  243. data/lib/contrast/api/decorators/input_analysis.rb +1 -1
  244. data/lib/contrast/api/decorators/instrumentation_mode.rb +1 -1
  245. data/lib/contrast/api/decorators/library.rb +1 -1
  246. data/lib/contrast/api/decorators/library_usage_update.rb +1 -1
  247. data/lib/contrast/api/decorators/message.rb +1 -1
  248. data/lib/contrast/api/decorators/rasp_rule_sample.rb +1 -1
  249. data/lib/contrast/api/decorators/route_coverage.rb +1 -1
  250. data/lib/contrast/api/decorators/server_features.rb +1 -1
  251. data/lib/contrast/api/decorators/trace_event.rb +1 -1
  252. data/lib/contrast/api/decorators/trace_event_object.rb +1 -1
  253. data/lib/contrast/api/decorators/trace_event_signature.rb +1 -1
  254. data/lib/contrast/api/decorators/trace_taint_range.rb +1 -1
  255. data/lib/contrast/api/decorators/trace_taint_range_tags.rb +1 -1
  256. data/lib/contrast/api/decorators/user_input.rb +1 -1
  257. data/lib/contrast/api/decorators.rb +2 -1
  258. data/lib/contrast/api.rb +1 -1
  259. data/lib/contrast/components/agent.rb +5 -24
  260. data/lib/contrast/components/api.rb +67 -2
  261. data/lib/contrast/components/app_context.rb +12 -66
  262. data/lib/contrast/components/app_context_extend.rb +78 -0
  263. data/lib/contrast/components/assess.rb +12 -8
  264. data/lib/contrast/components/base.rb +24 -1
  265. data/lib/contrast/components/config.rb +38 -23
  266. data/lib/contrast/components/contrast_service.rb +6 -1
  267. data/lib/contrast/components/heap_dump.rb +1 -1
  268. data/lib/contrast/components/inventory.rb +5 -1
  269. data/lib/contrast/components/logger.rb +1 -1
  270. data/lib/contrast/components/protect.rb +6 -2
  271. data/lib/contrast/components/sampling.rb +3 -3
  272. data/lib/contrast/components/scope.rb +1 -1
  273. data/lib/contrast/components/settings.rb +25 -12
  274. data/lib/contrast/config/agent_configuration.rb +2 -2
  275. data/lib/contrast/config/api_configuration.rb +9 -4
  276. data/lib/contrast/config/api_proxy_configuration.rb +14 -0
  277. data/lib/contrast/config/application_configuration.rb +3 -4
  278. data/lib/contrast/config/assess_configuration.rb +4 -4
  279. data/lib/contrast/config/assess_rules_configuration.rb +1 -1
  280. data/lib/contrast/config/base_configuration.rb +18 -29
  281. data/lib/contrast/config/certification_configuration.rb +15 -0
  282. data/lib/contrast/config/env_variables.rb +3 -10
  283. data/lib/contrast/config/exception_configuration.rb +1 -1
  284. data/lib/contrast/config/heap_dump_configuration.rb +7 -7
  285. data/lib/contrast/config/inventory_configuration.rb +2 -6
  286. data/lib/contrast/config/logger_configuration.rb +1 -1
  287. data/lib/contrast/config/protect_configuration.rb +1 -1
  288. data/lib/contrast/config/protect_rule_configuration.rb +2 -2
  289. data/lib/contrast/config/protect_rules_configuration.rb +1 -1
  290. data/lib/contrast/config/request_audit_configuration.rb +18 -0
  291. data/lib/contrast/config/root_configuration.rb +1 -1
  292. data/lib/contrast/config/ruby_configuration.rb +10 -7
  293. data/lib/contrast/config/sampling_configuration.rb +1 -1
  294. data/lib/contrast/config/server_configuration.rb +1 -1
  295. data/lib/contrast/config/service_configuration.rb +2 -3
  296. data/lib/contrast/config.rb +1 -2
  297. data/lib/contrast/configuration.rb +2 -3
  298. data/lib/contrast/extension/assess/array.rb +9 -9
  299. data/lib/contrast/extension/assess/erb.rb +32 -5
  300. data/lib/contrast/extension/assess/eval_trigger.rb +3 -1
  301. data/lib/contrast/extension/assess/exec_trigger.rb +2 -1
  302. data/lib/contrast/extension/assess/fiber.rb +6 -3
  303. data/lib/contrast/extension/assess/hash.rb +1 -1
  304. data/lib/contrast/extension/assess/kernel.rb +8 -3
  305. data/lib/contrast/extension/assess/marshal.rb +6 -2
  306. data/lib/contrast/extension/assess/regexp.rb +8 -2
  307. data/lib/contrast/extension/assess/string.rb +8 -2
  308. data/lib/contrast/extension/assess.rb +1 -1
  309. data/lib/contrast/extension/delegator.rb +1 -1
  310. data/lib/contrast/extension/extension.rb +2 -4
  311. data/lib/contrast/extension/inventory.rb +1 -1
  312. data/lib/contrast/extension/kernel.rb +1 -1
  313. data/lib/contrast/extension/module.rb +1 -1
  314. data/lib/contrast/extension/protect/psych.rb +1 -1
  315. data/lib/contrast/extension/protect.rb +1 -1
  316. data/lib/contrast/extension/thread.rb +32 -13
  317. data/lib/contrast/framework/base_support.rb +5 -1
  318. data/lib/contrast/framework/grape/support.rb +25 -1
  319. data/lib/contrast/framework/manager.rb +33 -36
  320. data/lib/contrast/framework/manager_extend.rb +50 -0
  321. data/lib/contrast/framework/platform_version.rb +1 -1
  322. data/lib/contrast/framework/rack/patch/session_cookie.rb +1 -1
  323. data/lib/contrast/framework/rack/patch/support.rb +1 -1
  324. data/lib/contrast/framework/rack/support.rb +1 -1
  325. data/lib/contrast/framework/rails/patch/action_controller_live_buffer.rb +1 -1
  326. data/lib/contrast/framework/rails/patch/assess_configuration.rb +1 -1
  327. data/lib/contrast/framework/rails/patch/rails_application_configuration.rb +1 -1
  328. data/lib/contrast/framework/rails/patch/support.rb +1 -1
  329. data/lib/contrast/framework/rails/railtie.rb +2 -2
  330. data/lib/contrast/framework/rails/support.rb +46 -2
  331. data/lib/contrast/framework/sinatra/support.rb +26 -3
  332. data/lib/contrast/funchook/funchook.rb +21 -18
  333. data/lib/contrast/logger/application.rb +1 -1
  334. data/lib/contrast/logger/format.rb +1 -1
  335. data/lib/contrast/logger/log.rb +9 -104
  336. data/lib/contrast/logger/request.rb +1 -1
  337. data/lib/contrast/logger/time.rb +1 -1
  338. data/lib/contrast/security_exception.rb +1 -1
  339. data/lib/contrast/tasks/config.rb +1 -1
  340. data/lib/contrast/tasks/service.rb +1 -1
  341. data/lib/contrast/utils/assess/propagation_method_utils.rb +1 -1
  342. data/lib/contrast/utils/assess/property/tagged_utils.rb +24 -1
  343. data/lib/contrast/utils/assess/sampling_util.rb +4 -4
  344. data/lib/contrast/utils/assess/source_method_utils.rb +1 -1
  345. data/lib/contrast/utils/assess/split_utils.rb +23 -0
  346. data/lib/contrast/utils/assess/tracking_util.rb +21 -16
  347. data/lib/contrast/utils/assess/trigger_method_utils.rb +4 -3
  348. data/lib/contrast/utils/class_util.rb +19 -15
  349. data/lib/contrast/utils/duck_utils.rb +1 -1
  350. data/lib/contrast/utils/env_configuration_item.rb +2 -2
  351. data/lib/contrast/utils/exclude_key.rb +1 -1
  352. data/lib/contrast/utils/findings.rb +65 -0
  353. data/lib/contrast/utils/hash_digest.rb +46 -79
  354. data/lib/contrast/utils/hash_digest_extend.rb +129 -0
  355. data/lib/contrast/utils/head_dump_utils_extend.rb +74 -0
  356. data/lib/contrast/utils/heap_dump_util.rb +3 -66
  357. data/lib/contrast/utils/invalid_configuration_util.rb +32 -2
  358. data/lib/contrast/utils/io_util.rb +2 -2
  359. data/lib/contrast/utils/job_servers_running.rb +1 -1
  360. data/lib/contrast/utils/log_utils.rb +108 -0
  361. data/lib/contrast/utils/lru_cache.rb +1 -1
  362. data/lib/contrast/utils/metrics_hash.rb +2 -2
  363. data/lib/contrast/utils/middleware_utils.rb +87 -0
  364. data/lib/contrast/utils/net_http_base.rb +165 -0
  365. data/lib/contrast/utils/object_share.rb +2 -6
  366. data/lib/contrast/utils/os.rb +9 -5
  367. data/lib/contrast/utils/patching/policy/patch_utils.rb +63 -99
  368. data/lib/contrast/utils/patching/policy/patcher_utils.rb +1 -1
  369. data/lib/contrast/utils/preflight_util.rb +1 -1
  370. data/lib/contrast/utils/request_utils.rb +96 -0
  371. data/lib/contrast/utils/resource_loader.rb +1 -1
  372. data/lib/contrast/utils/response_utils.rb +97 -0
  373. data/lib/contrast/utils/sha256_builder.rb +1 -1
  374. data/lib/contrast/utils/stack_trace_utils.rb +1 -1
  375. data/lib/contrast/utils/string_utils.rb +69 -67
  376. data/lib/contrast/utils/tag_util.rb +11 -10
  377. data/lib/contrast/utils/telemetry.rb +5 -3
  378. data/lib/contrast/utils/telemetry_client.rb +90 -0
  379. data/lib/contrast/utils/telemetry_identifier.rb +18 -25
  380. data/lib/contrast/utils/thread_tracker.rb +1 -1
  381. data/lib/contrast/utils/timer.rb +1 -1
  382. data/lib/contrast-agent.rb +1 -1
  383. data/lib/contrast.rb +1 -1
  384. data/resources/assess/policy.json +10 -0
  385. data/ruby-agent.gemspec +9 -10
  386. metadata +111 -50
  387. data/ext/cs__assess_active_record_named/cs__active_record_named.c +0 -46
  388. data/ext/cs__assess_active_record_named/cs__active_record_named.h +0 -11
  389. data/ext/cs__assess_active_record_named/extconf.rb +0 -5
  390. data/lib/contrast/agent/assess/policy/rewriter_patch.rb +0 -95
  391. data/lib/contrast/agent/class_reopener.rb +0 -258
  392. data/lib/contrast/agent/rewriter.rb +0 -259
  393. data/lib/contrast/config/default_value.rb +0 -17
  394. data/lib/contrast/framework/rails/rewrite/action_controller_railties_helper_inherited.rb +0 -37
  395. data/lib/contrast/framework/rails/rewrite/active_record_attribute_methods_read.rb +0 -41
  396. data/lib/contrast/framework/rails/rewrite/active_record_named.rb +0 -75
  397. data/lib/contrast/framework/rails/rewrite/active_record_time_zone_inherited.rb +0 -35
  398. data/lib/contrast/utils/requests_client.rb +0 -150
  399. data/lib/contrast/utils/ruby_ast_rewriter.rb +0 -82
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'contrast/utils/env_configuration_item'
@@ -80,27 +80,42 @@ module Contrast
80
80
  API_KEY = "Invalid configuration. Missing a required connection value 'api_key' is not set."
81
81
  API_SERVICE_KEY = "Invalid configuration. Missing a required connection value 'service_tag' is not set."
82
82
  API_USERNAME = "Invalid configuration. Missing a required connection value 'user_name' is not set."
83
+ # The config has information about how to construct the logger. If the config is invalid, and you want to know
84
+ # about it, then you have a circular dependency if you try to log it, so we use basic proto_logger to do this
85
+ # job.
83
86
  def validate
84
- # The config has information about how to construct the logger.
85
- # If the config is invalid, and you want to know about it, then
86
- # you have a circular dependency if you try to log it,
87
- # so we use basic proto_logger to do this job.
88
- if !session_id.empty? && !session_metadata.empty?
87
+ return false unless valid_session_metadata?
88
+
89
+ valid_api?
90
+ end
91
+
92
+ # The use can set either the application's session id or session metadata or neither, but never both.
93
+ #
94
+ # @return [boolean]
95
+ def valid_session_metadata?
96
+ if !session_id&.empty? && !session_metadata&.empty?
89
97
  proto_logger.error(SESSION_VARIABLES)
90
98
  return false
91
99
  end
92
- if bypass
93
- msg = []
94
- msg << API_URL unless api_url
95
- msg << API_KEY unless api_key
96
- msg << API_SERVICE_KEY unless api_service_key
97
- msg << API_USERNAME unless api_username
98
- msg.any? { |m| proto_logger.error(m) }
99
- return false unless msg.empty?
100
- end
101
100
  true
102
101
  end
103
102
 
103
+ # If the agent is to use the bypass to communicate with TeamServer directly, than it must have the
104
+ # configuration values required for that connection.
105
+ #
106
+ # @return [boolean]
107
+ def valid_api?
108
+ return true unless bypass
109
+
110
+ msg = []
111
+ msg << API_URL unless api_url
112
+ msg << API_KEY unless api_key
113
+ msg << API_SERVICE_KEY unless api_service_key
114
+ msg << API_USERNAME unless api_username
115
+ msg.any? { |m| proto_logger.error(m) }
116
+ msg.empty?
117
+ end
118
+
104
119
  def env_overrides
105
120
  # For env variables resembling CONTRAST__WHATEVER__NESTED_VALUE
106
121
  # override raw.whatever.nested_value
@@ -120,7 +135,7 @@ module Contrast
120
135
  # @return [String,nil] the value of the session id set in the
121
136
  # configuration, or nil if unset
122
137
  def session_id
123
- @config.application.session_id
138
+ root.application.session_id
124
139
  end
125
140
 
126
141
  # Typically, this would be accessed through
@@ -131,7 +146,7 @@ module Contrast
131
146
  # @return [String,nil] the value of the session metadata set in the
132
147
  # configuration, or nil if unset
133
148
  def session_metadata
134
- @config.application.session_metadata
149
+ root.application.session_metadata
135
150
  end
136
151
 
137
152
  # Typically, the following values would be accessed through Contrast::Components::AppContext
@@ -140,7 +155,7 @@ module Contrast
140
155
  #
141
156
  # @return [String, nil]
142
157
  def api_url
143
- @config.api.url
158
+ root.api.url
144
159
  end
145
160
 
146
161
  # Typically, the following values would be accessed through Contrast::Components::AppContext
@@ -149,7 +164,7 @@ module Contrast
149
164
  #
150
165
  # @return [String, nil]
151
166
  def api_key
152
- @config.api.api_key
167
+ root.api.api_key
153
168
  end
154
169
 
155
170
  # Typically, the following values would be accessed through Contrast::Components::AppContext
@@ -158,7 +173,7 @@ module Contrast
158
173
  #
159
174
  # @return [String, nil]
160
175
  def api_service_key
161
- @config.api.service_key
176
+ root.api.service_key
162
177
  end
163
178
 
164
179
  # Typically, the following values would be accessed through Contrast::Components::AppContext
@@ -167,7 +182,7 @@ module Contrast
167
182
  #
168
183
  # @return [String, nil]
169
184
  def api_username
170
- @config.api.user_name
185
+ root.api.user_name
171
186
  end
172
187
 
173
188
  # Typically, the following values would be accessed through Contrast::Components::AppContext
@@ -176,7 +191,7 @@ module Contrast
176
191
  #
177
192
  # @return [String, nil]
178
193
  def bypass
179
- @config.root.agent.service.bypass
194
+ root.agent.service.bypass
180
195
  end
181
196
 
182
197
  # Typically, the following values would be accessed through Contrast::Components::AppContext
@@ -185,7 +200,7 @@ module Contrast
185
200
  #
186
201
  # @return [String, nil]
187
202
  def logger_path
188
- @config.root.agent.logger.path
203
+ root.agent.logger.path
189
204
  end
190
205
  end
191
206
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'monitor'
@@ -15,6 +15,7 @@ module Contrast
15
15
  include Contrast::Components::ComponentBase
16
16
 
17
17
  DEFAULT_SERVICE_LOG = 'contrast_service.log'
18
+ DEFAULT_SERVICE_LEVEL = :TRACE
18
19
  # The Rails ActionDispatch regexp for localhost IP + literal localhost
19
20
  # https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/request.rb#L32
20
21
  LOCALHOST = Regexp.union [/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, /^::1$/, /^0:0:0:0:0:0:0:1(%.*)?$/, /^localhost$/]
@@ -59,6 +60,10 @@ module Contrast
59
60
  @_logger_path ||= ::Contrast::CONFIG.root.agent.service.logger.path || DEFAULT_SERVICE_LOG
60
61
  end
61
62
 
63
+ def logger_level
64
+ @_logger_level ||= ::Contrast::CONFIG.root.agent.service.logger.level || DEFAULT_SERVICE_LEVEL
65
+ end
66
+
62
67
  private
63
68
 
64
69
  def disabled?
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'contrast/components/base'
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -21,6 +21,10 @@ module Contrast
21
21
  @_analyze_libraries = !false?(::Contrast::CONFIG.root.inventory.analyze_libraries) if @_analyze_libraries.nil?
22
22
  @_analyze_libraries
23
23
  end
24
+
25
+ def tags
26
+ ::Contrast::CONFIG.root.inventory&.tags
27
+ end
24
28
  end
25
29
  end
26
30
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'contrast/logger/log'
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'contrast/components/base'
@@ -54,12 +54,16 @@ module Contrast
54
54
  end
55
55
 
56
56
  def forcibly_disabled?
57
- @_forcibly_disabled ||= false?(::Contrast::CONFIG.root.protect.enable)
57
+ return @_forcibly_disabled unless @_forcibly_disabled.nil?
58
+
59
+ @_forcibly_disabled = false?(::Contrast::CONFIG.root.protect.enable)
58
60
  end
59
61
 
60
62
  private
61
63
 
62
64
  def forcibly_enabled?
65
+ return @_forcibly_enabled unless @_forcibly_enabled.nil?
66
+
63
67
  @_forcibly_enabled ||= true?(::Contrast::CONFIG.root.protect.enable)
64
68
  end
65
69
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'contrast/components/base'
@@ -14,7 +14,7 @@ module Contrast
14
14
  DEFAULT_SAMPLING_WINDOW_MS = 180_000
15
15
  end
16
16
 
17
- module ClassMethods #:nodoc:
17
+ module ClassMethods # :nodoc:
18
18
  include Contrast::Components::ComponentBase
19
19
  include Constants
20
20
 
@@ -90,7 +90,7 @@ module Contrast
90
90
  end
91
91
  end
92
92
 
93
- module InstanceMethods #:nodoc:
93
+ module InstanceMethods # :nodoc:
94
94
  include Contrast::Components::ComponentBase
95
95
  include Constants
96
96
  include ClassMethods
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'fiber'
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'contrast/api/settings.pb'
@@ -36,19 +36,32 @@ module Contrast
36
36
  @application_state.exclusion_matchers.select(&:code?)
37
37
  end
38
38
 
39
- # @param server_features [Contrast::Api::Settings::ServerFeatures]
40
- def update_from_server_features server_features
41
- @protect_state.enabled = server_features.protect_enabled?
42
- @assess_state.enabled = server_features.assess_enabled?
43
- @assess_state.sampling_settings = server_features.assess.sampling
39
+ # @param features [Contrast::Api::Settings::ServerFeatures, Contrast::Agent::Reporting::Response]
40
+ def update_from_server_features features
41
+ if features&.class == Contrast::Agent::Reporting::Response
42
+ @protect_state.enabled = features.server_features.protect.enabled?
43
+ @assess_state.enabled = features.server_features.assess.enabled?
44
+ @assess_state.sampling_settings = features.server_features.assess.sampling
45
+ else
46
+ @protect_state.enabled = features.protect_enabled?
47
+ @assess_state.enabled = features.assess_enabled?
48
+ @assess_state.sampling_settings = features.assess.sampling
49
+ end
44
50
  end
45
51
 
46
- # @param application_settings [Contrast::Api::Settings::ApplicationSettings]
47
- def update_from_application_settings application_settings
48
- new_vals = application_settings.application_state_translation
49
- @application_state.modes_by_id = new_vals[:modes_by_id]
50
- @application_state.exclusion_matchers = new_vals[:exclusion_matchers]
51
- @assess_state.disabled_assess_rules = new_vals[:disabled_assess_rules]
52
+ # @param features [Contrast::Api::Settings::ApplicationSettings, Contrast::Agent::Reporting::Response]
53
+ def update_from_application_settings features
54
+ if features&.class == Contrast::Agent::Reporting::Response
55
+ @application_state.modes_by_id = features.application_settings.protect.protection_rules_to_settings_hash
56
+ # TODO: RUBY-1438 this needs to be translated
57
+ # @application_state.exclusion_matchers = new_vals[:exclusion_matchers]
58
+ @assess_state.disabled_assess_rules = features.application_settings.assess.disabled_rules
59
+ else
60
+ new_vals = features.application_state_translation
61
+ @application_state.modes_by_id = new_vals[:modes_by_id]
62
+ @application_state.exclusion_matchers = new_vals[:exclusion_matchers]
63
+ @assess_state.disabled_assess_rules = new_vals[:disabled_assess_rules]
64
+ end
52
65
  end
53
66
 
54
67
  # Wipe state to zero.
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -8,7 +8,7 @@ module Contrast
8
8
  class AgentConfiguration < BaseConfiguration
9
9
  KEYS = {
10
10
  enable: EMPTY_VALUE,
11
- start_bundled_service: Contrast::Config::DefaultValue.new(true),
11
+ start_bundled_service: true,
12
12
  omit_body: EMPTY_VALUE,
13
13
  service: Contrast::Config::ServiceConfiguration,
14
14
  logger: Contrast::Config::LoggerConfiguration,
@@ -1,7 +1,9 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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/config/default_value'
4
+ require 'contrast/config/api_proxy_configuration'
5
+ require 'contrast/config/certification_configuration'
6
+ require 'contrast/config/request_audit_configuration'
5
7
 
6
8
  module Contrast
7
9
  module Config
@@ -10,9 +12,12 @@ module Contrast
10
12
  URL = 'https://app.contrastsecurity.com/Contrast'
11
13
  KEYS = {
12
14
  api_key: EMPTY_VALUE,
13
- url: Contrast::Config::DefaultValue.new(URL),
15
+ url: URL,
14
16
  user_name: EMPTY_VALUE,
15
- service_key: EMPTY_VALUE
17
+ service_key: EMPTY_VALUE,
18
+ proxy: Contrast::Config::ApiProxyConfiguration,
19
+ request_audit: Contrast::Config::RequestAuditConfiguration,
20
+ certificate: Contrast::Config::CertificationConfiguration
16
21
  }.cs__freeze
17
22
  def initialize hsh
18
23
  super(hsh, KEYS)
@@ -0,0 +1,14 @@
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
+ # Api Proxy keys configuration
7
+ class ApiProxyConfiguration < BaseConfiguration
8
+ KEYS = { enable: false, url: EMPTY_VALUE }.cs__freeze
9
+ def initialize hsh
10
+ super(hsh, KEYS)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,6 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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/config/default_value'
5
4
  require 'contrast/utils/object_share'
6
5
 
7
6
  module Contrast
@@ -18,8 +17,8 @@ module Contrast
18
17
  tags: EMPTY_VALUE,
19
18
  code: EMPTY_VALUE,
20
19
  metadata: EMPTY_VALUE,
21
- session_id: Contrast::Config::DefaultValue.new(Contrast::Utils::ObjectShare::EMPTY_STRING),
22
- session_metadata: Contrast::Config::DefaultValue.new(Contrast::Utils::ObjectShare::EMPTY_STRING)
20
+ session_id: Contrast::Utils::ObjectShare::EMPTY_STRING,
21
+ session_metadata: Contrast::Utils::ObjectShare::EMPTY_STRING
23
22
  }.cs__freeze
24
23
 
25
24
  def initialize hsh
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -9,11 +9,11 @@ module Contrast
9
9
  KEYS = {
10
10
  tags: EMPTY_VALUE,
11
11
  enable: EMPTY_VALUE,
12
- enable_scan_response: Contrast::Config::DefaultValue.new('true'),
13
- enable_dynamic_sources: Contrast::Config::DefaultValue.new('true'),
12
+ enable_scan_response: true,
13
+ enable_dynamic_sources: true,
14
14
  sampling: Contrast::Config::SamplingConfiguration,
15
15
  rules: Contrast::Config::AssessRulesConfiguration,
16
- stacktraces: Contrast::Config::DefaultValue.new('ALL')
16
+ stacktraces: 'ALL'
17
17
  }.cs__freeze
18
18
 
19
19
  def initialize hsh
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'forwardable'
@@ -12,17 +12,18 @@ module Contrast
12
12
  class BaseConfiguration
13
13
  extend Forwardable
14
14
 
15
- STRING_BOOLEANS = %w[false true].cs__freeze
15
+ attr_reader :configuration_map
16
16
 
17
- attr_reader :map
18
-
19
- alias_method :to_hash, :map
20
- def_delegators :@map, :empty?, :key?, :delete, :fetch, :[], :[]=, :each, :each_pair, :each_key, :each_value
17
+ alias_method :to_hash, :configuration_map
18
+ def_delegators :@configuration_map, :empty?, :key?, :delete, :fetch,
19
+ :[], :[]=, :each, :each_pair, :each_key, :each_value
21
20
 
22
21
  EMPTY_VALUE = :EMPTY_VALUE
23
22
 
24
23
  def initialize hsh = {}, keys = {}
25
- @map = {}
24
+ # holds configuration key value pairs
25
+ # each configuration class can contain nested BaseConfigurations
26
+ @configuration_map = {}
26
27
  traverse_config(hsh, keys)
27
28
  end
28
29
 
@@ -39,7 +40,7 @@ module Contrast
39
40
  end
40
41
 
41
42
  def nil?
42
- @map.empty?
43
+ @configuration_map.empty?
43
44
  end
44
45
 
45
46
  private
@@ -69,25 +70,13 @@ module Contrast
69
70
  end
70
71
 
71
72
  def assign_config_value str_key, spec_value, user_provided_value
72
- @map[str_key] = if spec_value.is_a?(Class) && spec_value <= Contrast::Config::BaseConfiguration
73
- spec_value.new(user_provided_value)
74
- elsif spec_value.is_a?(Contrast::Config::DefaultValue) && user_provided_value == EMPTY_VALUE
75
- spec_value.value
76
- elsif user_provided_value.cs__is_a?(String)
77
- value = user_provided_value.downcase
78
- # converts string values to 'true' => true or 'false' => false
79
- case value
80
- when STRING_BOOLEANS[1]
81
- true
82
- when STRING_BOOLEANS[0]
83
- false
84
- else
85
- # returns non boolean string values
86
- user_provided_value
87
- end
88
- else
89
- user_provided_value
90
- end
73
+ @configuration_map[str_key] = if spec_value.is_a?(Class) && spec_value <= Contrast::Config::BaseConfiguration
74
+ spec_value.new(user_provided_value)
75
+ elsif user_provided_value == EMPTY_VALUE
76
+ spec_value
77
+ else
78
+ user_provided_value
79
+ end
91
80
  end
92
81
 
93
82
  def value_from_key_config key, config_hash
@@ -99,13 +88,13 @@ module Contrast
99
88
 
100
89
  def define_getter str_key
101
90
  define_singleton_method str_key.to_sym do
102
- @map[str_key] == EMPTY_VALUE ? nil : @map[str_key]
91
+ @configuration_map[str_key] == EMPTY_VALUE ? nil : @configuration_map[str_key]
103
92
  end
104
93
  end
105
94
 
106
95
  def define_setter str_key
107
96
  define_singleton_method "#{ str_key }=".to_sym do |new_value|
108
- @map[str_key] = new_value
97
+ @configuration_map[str_key] = new_value
109
98
  end
110
99
  end
111
100
  end
@@ -0,0 +1,15 @@
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
+ # Certificate Configuration
7
+ class CertificationConfiguration < BaseConfiguration
8
+ KEYS = { enable: false, ca_file: EMPTY_VALUE, cert_file: EMPTY_VALUE, key_file: EMPTY_VALUE }.cs__freeze
9
+
10
+ def initialize hsh
11
+ super(hsh, KEYS)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,24 +1,17 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
5
5
  module Config
6
6
  # This module is holding all the Env Variables that we could use through the agent lifecycle
7
7
  module EnvVariables
8
- ENV_VARIABLES = {
9
- telemetry_opt_outs: ENV['CONTRAST_AGENT_TELEMETRY_OPTOUT'].to_s || Contrast::Config::DefaultValue.new('false')
10
- }.cs__freeze
8
+ ENV_VARIABLES = { telemetry_opt_outs: ENV['CONTRAST_AGENT_TELEMETRY_OPTOUT'].to_s || false }.cs__freeze
11
9
 
12
10
  def return_value key
13
11
  return unless ENV_VARIABLES.key?(key.to_sym)
14
12
 
15
13
  sym_key = key.downcase.to_sym
16
- return_val = ENV_VARIABLES[sym_key]
17
- if return_val.is_a?(Contrast::Config::DefaultValue)
18
- return_val.value
19
- else
20
- return_val
21
- end
14
+ ENV_VARIABLES[sym_key]
22
15
  end
23
16
  end
24
17
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -8,17 +8,17 @@ module Contrast
8
8
  class HeapDumpConfiguration < BaseConfiguration
9
9
  KEYS = {
10
10
  enable: # should dumps be taken
11
- Contrast::Config::DefaultValue.new(Contrast::Utils::ObjectShare::FALSE),
11
+ Contrast::Utils::ObjectShare::FALSE,
12
12
  path: # dir to which dumps should be
13
- Contrast::Config::DefaultValue.new('contrast_heap_dumps'), # saved
13
+ 'contrast_heap_dumps', # saved
14
14
  delay_ms: # time, in ms, after initialization
15
- Contrast::Config::DefaultValue.new(10_000), # to delay before taking dump
15
+ 10_000, # to delay before taking dump
16
16
  window_ms: # ms between each dump
17
- Contrast::Config::DefaultValue.new(10_000), #
17
+ 10_000, #
18
18
  count: # number of dumps to take
19
- Contrast::Config::DefaultValue.new(5), #
19
+ 5, #
20
20
  clean: # remove temporary objects or not
21
- Contrast::Config::DefaultValue.new(Contrast::Utils::ObjectShare::FALSE) #
21
+ Contrast::Utils::ObjectShare::FALSE #
22
22
  }.cs__freeze
23
23
 
24
24
  def initialize hsh
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -6,11 +6,7 @@ module Contrast
6
6
  # Common Configuration settings. Those in this section pertain to the
7
7
  # inventory functionality of the Agent.
8
8
  class InventoryConfiguration < BaseConfiguration
9
- KEYS = {
10
- enable: Contrast::Config::DefaultValue.new(true),
11
- analyze_libraries: Contrast::Config::DefaultValue.new(true),
12
- tags: EMPTY_VALUE
13
- }.cs__freeze
9
+ KEYS = { enable: true, analyze_libraries: true, tags: EMPTY_VALUE }.cs__freeze
14
10
 
15
11
  def initialize hsh
16
12
  super(hsh, KEYS)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  require 'set'
@@ -12,7 +12,7 @@ module Contrast
12
12
  enable: EMPTY_VALUE,
13
13
  mode: EMPTY_VALUE,
14
14
  disable_system_commands: EMPTY_VALUE,
15
- detect_custom_code_accessing_system_files: Contrast::Config::DefaultValue.new('true')
15
+ detect_custom_code_accessing_system_files: true
16
16
  }.cs__freeze
17
17
 
18
18
  def initialize hsh
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
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
4
  module Contrast
@@ -0,0 +1,18 @@
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
+ # This class holds the Common Settings for the
7
+ # hidden functionality of the TS
8
+ class RequestAuditConfiguration < BaseConfiguration
9
+ DEFAULT_PATH = './messages'
10
+
11
+ KEYS = { enable: false, requests: false, responses: false, path: DEFAULT_PATH }.cs__freeze
12
+
13
+ def initialize hsh
14
+ super(hsh, KEYS)
15
+ end
16
+ end
17
+ end
18
+ end