devsecops-engine-tools 1.18.2__py3-none-any.whl → 1.19.0__py3-none-any.whl

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.

Potentially problematic release.


This version of devsecops-engine-tools might be problematic. Click here for more details.

Files changed (21) hide show
  1. devsecops_engine_tools/engine_core/src/domain/model/report.py +1 -0
  2. devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py +1 -1
  3. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py +15 -10
  4. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py +15 -8
  5. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +38 -9
  6. devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py +49 -31
  7. devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +22 -11
  8. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +3 -0
  9. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +24 -7
  10. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +8 -4
  11. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +1 -1
  12. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py +6 -13
  13. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +2 -2
  14. devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py +0 -1
  15. devsecops_engine_tools/engine_utilities/utils/utils.py +28 -1
  16. devsecops_engine_tools/version.py +1 -1
  17. {devsecops_engine_tools-1.18.2.dist-info → devsecops_engine_tools-1.19.0.dist-info}/METADATA +1 -1
  18. {devsecops_engine_tools-1.18.2.dist-info → devsecops_engine_tools-1.19.0.dist-info}/RECORD +21 -21
  19. {devsecops_engine_tools-1.18.2.dist-info → devsecops_engine_tools-1.19.0.dist-info}/WHEEL +0 -0
  20. {devsecops_engine_tools-1.18.2.dist-info → devsecops_engine_tools-1.19.0.dist-info}/entry_points.txt +0 -0
  21. {devsecops_engine_tools-1.18.2.dist-info → devsecops_engine_tools-1.19.0.dist-info}/top_level.txt +0 -0
@@ -28,6 +28,7 @@ class Report:
28
28
  self.vul_description = kwargs.get("vul_description", "")
29
29
  self.risk_accepted = kwargs.get("risk_accepted", "")
30
30
  self.false_p = kwargs.get("false_p", "")
31
+ self.out_of_scope = kwargs.get("out_of_scope", "")
31
32
  self.service = kwargs.get("service", "")
32
33
  self.reason = kwargs.get("reason", "")
33
34
  self.component_name = kwargs.get("component_name", "")
@@ -147,7 +147,7 @@ class HandleRisk:
147
147
 
148
148
  if self._should_skip_analysis(risk_config, pipeline_name, risk_exclusions):
149
149
  print("Tool skipped by DevSecOps Policy.")
150
- logger.info("Tool skipped by DevSecOps Policy.")
150
+ dict_args["send_metrics"] = "false"
151
151
  return [], input_core
152
152
 
153
153
  secret_tool = None
@@ -24,17 +24,22 @@ class S3Manager(MetricsManagerGateway):
24
24
  return ""
25
25
 
26
26
  def send_metrics(self, config_tool, tool, file_path):
27
- temp_credentials = assume_role(
28
- config_tool["METRICS_MANAGER"]["AWS"]["ROLE_ARN"]
29
- )
27
+ credentials_role = assume_role(config_tool["METRICS_MANAGER"]["AWS"]["ROLE_ARN"]) if config_tool["METRICS_MANAGER"]["AWS"]["USE_ROLE"] else None
30
28
  session = boto3.session.Session()
31
- client = session.client(
32
- service_name="s3",
33
- region_name=config_tool["METRICS_MANAGER"]["AWS"]["REGION_NAME"],
34
- aws_access_key_id=temp_credentials["AccessKeyId"],
35
- aws_secret_access_key=temp_credentials["SecretAccessKey"],
36
- aws_session_token=temp_credentials["SessionToken"],
37
- )
29
+
30
+ if credentials_role:
31
+ client = session.client(
32
+ service_name="s3",
33
+ region_name=config_tool["METRICS_MANAGER"]["AWS"]["REGION_NAME"],
34
+ aws_access_key_id=credentials_role["AccessKeyId"],
35
+ aws_secret_access_key=credentials_role["SecretAccessKey"],
36
+ aws_session_token=credentials_role["SessionToken"],
37
+ )
38
+ else:
39
+ client = session.client(
40
+ service_name="s3",
41
+ region_name=config_tool["METRICS_MANAGER"]["AWS"]["REGION_NAME"]
42
+ )
38
43
  date = datetime.datetime.now()
39
44
  path_bucket = f'engine_tools/{tool}/{date.strftime("%Y")}/{date.strftime("%m")}/{date.strftime("%d")}/{file_path.split("/")[-1]}'
40
45
 
@@ -19,15 +19,22 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
19
19
  @dataclass
20
20
  class SecretsManager(SecretsManagerGateway):
21
21
  def get_secret(self, config_tool):
22
- temp_credentials = assume_role(config_tool["SECRET_MANAGER"]["AWS"]["ROLE_ARN"])
22
+ credentials_role = assume_role(config_tool["SECRET_MANAGER"]["AWS"]["ROLE_ARN"]) if config_tool["SECRET_MANAGER"]["AWS"]["USE_ROLE"] else None
23
23
  session = boto3.session.Session()
24
- client = session.client(
25
- service_name="secretsmanager",
26
- region_name=config_tool["SECRET_MANAGER"]["AWS"]["REGION_NAME"],
27
- aws_access_key_id=temp_credentials["AccessKeyId"],
28
- aws_secret_access_key=temp_credentials["SecretAccessKey"],
29
- aws_session_token=temp_credentials["SessionToken"],
30
- )
24
+
25
+ if credentials_role:
26
+ client = session.client(
27
+ service_name="secretsmanager",
28
+ region_name=config_tool["SECRET_MANAGER"]["AWS"]["REGION_NAME"],
29
+ aws_access_key_id=credentials_role["AccessKeyId"],
30
+ aws_secret_access_key=credentials_role["SecretAccessKey"],
31
+ aws_session_token=credentials_role["SessionToken"],
32
+ )
33
+ else:
34
+ client = session.client(
35
+ service_name="secretsmanager",
36
+ region_name=config_tool["SECRET_MANAGER"]["AWS"]["REGION_NAME"],
37
+ )
31
38
 
32
39
  try:
33
40
  secret_name = config_tool["SECRET_MANAGER"]["AWS"]["SECRET_NAME"]
@@ -39,6 +39,11 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
39
39
 
40
40
  @dataclass
41
41
  class DefectDojoPlatform(VulnerabilityManagementGateway):
42
+
43
+ OUT_OF_SCOPE = "Out of Scope"
44
+ FALSE_POSITIVE = "False Positive"
45
+ TRANSFERRED_FINDING = "Transferred Finding"
46
+
42
47
  def send_vulnerability_management(
43
48
  self, vulnerability_management: VulnerabilityManagement
44
49
  ):
@@ -80,6 +85,9 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
80
85
  "VULNERABILITY_MANAGER"
81
86
  ]["BRANCH_FILTER"].split(",")
82
87
  ) or (vulnerability_management.dict_args["tool"] == "engine_secret"):
88
+ tags = vulnerability_management.dict_args["tool"]
89
+ if vulnerability_management.dict_args["tool"] == "engine_iac":
90
+ tags = f"{vulnerability_management.dict_args["tool"]}_{"_".join(vulnerability_management.dict_args["platform"])}"
83
91
  request: ImportScanRequest = Connect.cmdb(
84
92
  cmdb_mapping={
85
93
  "product_type_name": "nombreevc",
@@ -117,7 +125,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
117
125
  in enviroment_mapping
118
126
  else enviroment_mapping["default"]
119
127
  ),
120
- tags=vulnerability_management.dict_args["tool"],
128
+ tags=tags,
121
129
  )
122
130
 
123
131
  def request_func():
@@ -199,6 +207,11 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
199
207
  "tags": tool,
200
208
  "limit": dd_limits_query,
201
209
  }
210
+ out_of_scope_query_params = {
211
+ "out_of_scope": True,
212
+ "tags": tool,
213
+ "limit": dd_limits_query,
214
+ }
202
215
  false_positive_query_params = {
203
216
  "false_p": True,
204
217
  "tags": tool,
@@ -227,7 +240,17 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
227
240
  false_positive_query_params,
228
241
  tool,
229
242
  self._format_date_to_dd_format,
230
- "False Positive",
243
+ self.FALSE_POSITIVE,
244
+ )
245
+
246
+ exclusions_false_positive = self._get_findings_with_exclusions(
247
+ session_manager,
248
+ service,
249
+ dd_max_retries,
250
+ out_of_scope_query_params,
251
+ tool,
252
+ self._format_date_to_dd_format,
253
+ self.OUT_OF_SCOPE,
231
254
  )
232
255
 
233
256
  exclusions_transfer_finding = self._get_findings_with_exclusions(
@@ -237,7 +260,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
237
260
  transfer_finding_query_params,
238
261
  tool,
239
262
  self._format_date_to_dd_format,
240
- "Transferred Finding",
263
+ self.TRANSFERRED_FINDING,
241
264
  )
242
265
 
243
266
  return (
@@ -346,13 +369,19 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
346
369
  elif finding.false_p:
347
370
  exclusions.append(
348
371
  self._create_report_exclusion(
349
- finding, date_fn, "engine_risk", "False Positive", host_dd
372
+ finding, date_fn, "engine_risk", self.FALSE_POSITIVE, host_dd
373
+ )
374
+ )
375
+ elif finding.out_of_scope:
376
+ exclusions.append(
377
+ self._create_report_exclusion(
378
+ finding, date_fn, "engine_risk", self.OUT_OF_SCOPE, host_dd
350
379
  )
351
380
  )
352
381
  elif finding.risk_status == "Transfer Accepted":
353
382
  exclusions.append(
354
383
  self._create_report_exclusion(
355
- finding, date_fn, "engine_risk", "Transferred Finding", host_dd
384
+ finding, date_fn, "engine_risk", self.TRANSFERRED_FINDING, host_dd
356
385
  )
357
386
  )
358
387
  return exclusions
@@ -390,10 +419,10 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
390
419
  raise e
391
420
 
392
421
  def _date_reason_based(self, finding, date_fn, reason):
393
- if reason == "False Positive":
422
+ if reason in [self.FALSE_POSITIVE, self.OUT_OF_SCOPE]:
394
423
  create_date = date_fn(finding.last_status_update)
395
424
  expired_date = date_fn(None)
396
- elif reason == "Transferred Finding":
425
+ elif reason == self.TRANSFERRED_FINDING:
397
426
  create_date = date_fn(finding.transfer_finding.date)
398
427
  expired_date = date_fn(finding.transfer_finding.expiration_date)
399
428
  else:
@@ -461,9 +490,9 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
461
490
  vul_description=finding.description,
462
491
  risk_accepted=finding.risk_accepted,
463
492
  false_p=finding.false_p,
493
+ out_of_scope=finding.out_of_scope,
464
494
  service=finding.service,
465
- unique_id_from_tool=finding.unique_id_from_tool,
466
- out_of_scope=finding.out_of_scope
495
+ unique_id_from_tool=finding.unique_id_from_tool
467
496
  )
468
497
 
469
498
  def _format_date_to_dd_format(self, date_string):
@@ -6,15 +6,14 @@ from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform
6
6
  DevopsPlatformGateway,
7
7
  )
8
8
  from devsecops_engine_tools.engine_utilities.git_cli.model.gateway.git_gateway import (
9
- GitGateway
9
+ GitGateway,
10
10
  )
11
11
  from devsecops_engine_tools.engine_sast.engine_code.src.domain.model.config_tool import (
12
12
  ConfigTool,
13
13
  )
14
14
  from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
15
- from devsecops_engine_tools.engine_core.src.domain.model.input_core import (
16
- InputCore
17
- )
15
+ from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
16
+ from devsecops_engine_tools.engine_utilities.utils.utils import Utils
18
17
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
19
18
  from devsecops_engine_tools.engine_utilities import settings
20
19
 
@@ -23,7 +22,10 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
23
22
 
24
23
  class CodeScan:
25
24
  def __init__(
26
- self, tool_gateway: ToolGateway, devops_platform_gateway: DevopsPlatformGateway, git_gateway: GitGateway
25
+ self,
26
+ tool_gateway: ToolGateway,
27
+ devops_platform_gateway: DevopsPlatformGateway,
28
+ git_gateway: GitGateway,
27
29
  ):
28
30
  self.tool_gateway = tool_gateway
29
31
  self.devops_platform_gateway = devops_platform_gateway
@@ -31,14 +33,11 @@ class CodeScan:
31
33
 
32
34
  def set_config_tool(self, dict_args):
33
35
  init_config_tool = self.devops_platform_gateway.get_remote_config(
34
- dict_args["remote_config_repo"],
35
- "engine_sast/engine_code/ConfigTool.json"
36
- )
37
- scope_pipeline = self.devops_platform_gateway.get_variable(
38
- "pipeline_name"
36
+ dict_args["remote_config_repo"], "engine_sast/engine_code/ConfigTool.json"
39
37
  )
38
+ scope_pipeline = self.devops_platform_gateway.get_variable("pipeline_name")
40
39
  return ConfigTool(json_data=init_config_tool, scope=scope_pipeline)
41
-
40
+
42
41
  def get_pull_request_files(self, target_branches):
43
42
  files_pullrequest = self.git_gateway.get_files_pull_request(
44
43
  self.devops_platform_gateway.get_variable("path_directory"),
@@ -49,19 +48,17 @@ class CodeScan:
49
48
  self.devops_platform_gateway.get_variable("organization"),
50
49
  self.devops_platform_gateway.get_variable("project_name"),
51
50
  self.devops_platform_gateway.get_variable("repository"),
52
- self.devops_platform_gateway.get_variable("repository_provider")
53
- )
51
+ self.devops_platform_gateway.get_variable("repository_provider"),
52
+ )
54
53
  return files_pullrequest
55
54
 
56
- def get_exclusions(self, dict_args, tool):
57
- exclusions_data = self.devops_platform_gateway.get_remote_config(
58
- dict_args["remote_config_repo"],
59
- "engine_sast/engine_code/Exclusions.json"
60
- )
55
+ def get_exclusions(self, tool, exclusions_data):
61
56
  list_exclusions = []
62
57
  skip_tool = False
63
58
  for pipeline, exclusions in exclusions_data.items():
64
- if (pipeline == "All") or (pipeline == self.devops_platform_gateway.get_variable("pipeline_name")):
59
+ if (pipeline == "All") or (
60
+ pipeline == self.devops_platform_gateway.get_variable("pipeline_name")
61
+ ):
65
62
  if exclusions.get("SKIP_TOOL", False):
66
63
  skip_tool = True
67
64
  elif exclusions.get(tool, False):
@@ -78,10 +75,12 @@ class CodeScan:
78
75
  list_exclusions.append(exclusion)
79
76
  return list_exclusions, skip_tool
80
77
 
81
- def apply_exclude_path(self, exclude_folder, ignore_search_pattern, pull_request_file):
78
+ def apply_exclude_path(
79
+ self, exclude_folder, ignore_search_pattern, pull_request_file
80
+ ):
82
81
  patterns = ignore_search_pattern
83
82
  patterns.extend([rf"/{re.escape(folder)}//*" for folder in exclude_folder])
84
-
83
+
85
84
  for pattern in patterns:
86
85
  if re.search(pattern, pull_request_file):
87
86
  return True
@@ -89,35 +88,54 @@ class CodeScan:
89
88
 
90
89
  def process(self, dict_args, tool):
91
90
  config_tool = self.set_config_tool(dict_args)
92
- list_exclusions, skip_tool = self.get_exclusions(dict_args, tool)
91
+ exclusions_data = self.devops_platform_gateway.get_remote_config(
92
+ dict_args["remote_config_repo"], "engine_sast/engine_code/Exclusions.json"
93
+ )
94
+ list_exclusions, skip_tool = self.get_exclusions(tool, exclusions_data)
93
95
  findings_list, path_file_results = [], ""
94
96
 
95
97
  if not skip_tool:
96
98
  pull_request_files = []
97
99
  if not dict_args["folder_path"]:
98
- pull_request_files = self.get_pull_request_files(config_tool.target_branches)
99
- pull_request_files = [pf for pf in pull_request_files
100
- if not self.apply_exclude_path(config_tool.exclude_folder, config_tool.ignore_search_pattern, pf)]
100
+ pull_request_files = self.get_pull_request_files(
101
+ config_tool.target_branches
102
+ )
103
+ pull_request_files = [
104
+ pf
105
+ for pf in pull_request_files
106
+ if not self.apply_exclude_path(
107
+ config_tool.exclude_folder,
108
+ config_tool.ignore_search_pattern,
109
+ pf,
110
+ )
111
+ ]
101
112
 
102
113
  findings_list, path_file_results = self.tool_gateway.run_tool(
103
- dict_args["folder_path"],
114
+ dict_args["folder_path"],
104
115
  pull_request_files,
105
116
  self.devops_platform_gateway.get_variable("path_directory"),
106
117
  self.devops_platform_gateway.get_variable("repository"),
107
- config_tool
118
+ config_tool,
108
119
  )
109
120
 
110
121
  else:
111
- print(f"Tool skipped by DevSecOps policy")
112
- logger.info(f"Tool skipped by DevSecOps policy")
122
+ print("Tool skipped by DevSecOps policy")
123
+ dict_args["send_metrics"] = "false"
113
124
 
114
125
  input_core = InputCore(
115
126
  totalized_exclusions=list_exclusions,
116
- threshold_defined=config_tool.threshold,
127
+ threshold_defined=Utils.update_threshold(
128
+ self,
129
+ config_tool.threshold,
130
+ exclusions_data,
131
+ config_tool.scope_pipeline,
132
+ ),
117
133
  path_file_results=path_file_results,
118
134
  custom_message_break_build=config_tool.message_info_engine_code,
119
135
  scope_pipeline=config_tool.scope_pipeline,
120
- stage_pipeline=self.devops_platform_gateway.get_variable("stage").capitalize(),
136
+ stage_pipeline=self.devops_platform_gateway.get_variable(
137
+ "stage"
138
+ ).capitalize(),
121
139
  )
122
140
 
123
141
  return findings_list, input_core
@@ -13,6 +13,8 @@ from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclu
13
13
  from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
14
14
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
15
15
  from devsecops_engine_tools.engine_utilities import settings
16
+ from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
17
+ from devsecops_engine_tools.engine_utilities.utils.utils import Utils
16
18
 
17
19
  logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
18
20
 
@@ -45,11 +47,11 @@ class IacScan:
45
47
  environment="pdn" if env not in ["dev", "qa", "pdn"] else env,
46
48
  platform_to_scan=dict_args["platform"],
47
49
  secret_tool=secret_tool,
48
- secret_external_checks=dict_args["token_external_checks"]
50
+ secret_external_checks=dict_args["token_external_checks"],
49
51
  )
50
52
  else:
51
- print(f"Tool skipped by DevSecOps policy")
52
- logger.info(f"Tool skipped by DevSecOps policy")
53
+ print("Tool skipped by DevSecOps policy")
54
+ dict_args["send_metrics"] = "false"
53
55
 
54
56
  totalized_exclusions = []
55
57
  (
@@ -69,7 +71,12 @@ class IacScan:
69
71
 
70
72
  input_core = InputCore(
71
73
  totalized_exclusions=totalized_exclusions,
72
- threshold_defined=config_tool_core.threshold,
74
+ threshold_defined=Utils.update_threshold(
75
+ self,
76
+ config_tool_core.threshold,
77
+ exclusions,
78
+ config_tool_core.scope_pipeline,
79
+ ),
73
80
  path_file_results=path_file_results,
74
81
  custom_message_break_build=config_tool_core.message_info_engine_iac,
75
82
  scope_pipeline=config_tool_core.scope_pipeline,
@@ -88,7 +95,13 @@ class IacScan:
88
95
  "pipeline_name"
89
96
  )
90
97
 
91
- skip_tool = bool(re.match(config_tool.ignore_search_pattern, config_tool.scope_pipeline, re.IGNORECASE))
98
+ skip_tool = bool(
99
+ re.match(
100
+ config_tool.ignore_search_pattern,
101
+ config_tool.scope_pipeline,
102
+ re.IGNORECASE,
103
+ )
104
+ )
92
105
 
93
106
  if config_tool.exclusions.get("All") is not None:
94
107
  config_tool.exclusions_all = config_tool.exclusions.get("All").get(tool)
@@ -96,7 +109,9 @@ class IacScan:
96
109
  config_tool.exclusions_scope = config_tool.exclusions.get(
97
110
  config_tool.scope_pipeline
98
111
  ).get(tool)
99
- skip_tool = bool(config_tool.exclusions.get(config_tool.scope_pipeline).get("SKIP_TOOL"))
112
+ skip_tool = bool(
113
+ config_tool.exclusions.get(config_tool.scope_pipeline).get("SKIP_TOOL")
114
+ )
100
115
 
101
116
  if dict_args["folder_path"]:
102
117
  if (
@@ -124,11 +139,7 @@ class IacScan:
124
139
 
125
140
  def search_folders(self, search_pattern):
126
141
  current_directory = os.getcwd()
127
- patron = (
128
- "(?i).*?("
129
- + "|".join(search_pattern)
130
- + ").*$"
131
- )
142
+ patron = "(?i).*?(" + "|".join(search_pattern) + ").*$"
132
143
  folders = [
133
144
  folder
134
145
  for folder in os.listdir(current_directory)
@@ -59,6 +59,9 @@ class SecretScan:
59
59
  self.devops_platform_gateway.get_variable("os"),
60
60
  self.devops_platform_gateway.get_variable("path_directory")
61
61
  )
62
+ else:
63
+ print("Tool skipped by DevSecOps policy")
64
+ dict_args["send_metrics"] = "false"
62
65
  return finding_list, file_path_findings
63
66
 
64
67
  def complete_config_tool(self, dict_args, tool):
@@ -3,13 +3,20 @@ from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform
3
3
  DevopsPlatformGateway,
4
4
  )
5
5
  from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.DeserializeConfigTool import (
6
- DeserializeConfigTool
7
- )
6
+ DeserializeConfigTool,
7
+ )
8
8
  from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
9
+ from devsecops_engine_tools.engine_utilities.utils.utils import Utils
9
10
 
10
11
 
11
12
  class SetInputCore:
12
- def __init__(self, tool_remote: DevopsPlatformGateway, dict_args, tool, config_tool: DeserializeConfigTool):
13
+ def __init__(
14
+ self,
15
+ tool_remote: DevopsPlatformGateway,
16
+ dict_args,
17
+ tool,
18
+ config_tool: DeserializeConfigTool,
19
+ ):
13
20
  self.tool_remote = tool_remote
14
21
  self.dict_args = dict_args
15
22
  self.tool = tool
@@ -22,7 +29,9 @@ class SetInputCore:
22
29
  Returns:
23
30
  dict: Remote configuration.
24
31
  """
25
- return self.tool_remote.get_remote_config(self.dict_args["remote_config_repo"], file_path)
32
+ return self.tool_remote.get_remote_config(
33
+ self.dict_args["remote_config_repo"], file_path
34
+ )
26
35
 
27
36
  def get_variable(self, variable):
28
37
  """
@@ -60,15 +69,23 @@ class SetInputCore:
60
69
  Returns:
61
70
  dict: Input core.
62
71
  """
72
+ exclusions_config = self.get_remote_config(
73
+ "engine_sast/engine_secret/Exclusions.json"
74
+ )
63
75
  return InputCore(
64
76
  totalized_exclusions=self.get_exclusions(
65
- self.get_remote_config("engine_sast/engine_secret/Exclusions.json"),
77
+ exclusions_config,
66
78
  self.get_variable("pipeline_name"),
67
79
  self.tool,
68
80
  ),
69
- threshold_defined=self.config_tool.level_compliance,
81
+ threshold_defined=Utils.update_threshold(
82
+ self,
83
+ self.config_tool.level_compliance,
84
+ exclusions_config,
85
+ self.config_tool.scope_pipeline,
86
+ ),
70
87
  path_file_results=finding_list,
71
88
  custom_message_break_build=self.config_tool.message_info_engine_secret,
72
89
  scope_pipeline=self.config_tool.scope_pipeline,
73
- stage_pipeline=self.tool_remote.get_variable("stage").capitalize()
90
+ stage_pipeline=self.tool_remote.get_variable("stage").capitalize(),
74
91
  )
@@ -1,8 +1,7 @@
1
1
  from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
2
- from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
3
-
4
-
5
2
  from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
3
+ from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
4
+ from devsecops_engine_tools.engine_utilities.utils.utils import Utils
6
5
 
7
6
 
8
7
  class SetInputCore:
@@ -44,7 +43,12 @@ class SetInputCore:
44
43
  self.pipeline_name,
45
44
  self.tool,
46
45
  ),
47
- Threshold(self.remote_config["THRESHOLD"]),
46
+ Utils.update_threshold(
47
+ self,
48
+ Threshold(self.remote_config["THRESHOLD"]),
49
+ self.exclusions,
50
+ self.pipeline_name,
51
+ ),
48
52
  image_scanned,
49
53
  self.remote_config["MESSAGE_INFO_ENGINE_CONTAINER"],
50
54
  self.pipeline_name,
@@ -56,7 +56,7 @@ def init_engine_sca_rm(
56
56
  deseralized = container_sca_scan.deseralizator(image_scanned)
57
57
  else:
58
58
  print("Tool skipped by DevSecOps policy")
59
- logger.info("Tool skipped by DevSecOps policy")
59
+ dict_args["send_metrics"] = "false"
60
60
  core_input = input_core.set_input_core(image_scanned)
61
61
 
62
62
  return deseralized, core_input
@@ -1,6 +1,7 @@
1
1
  from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
2
2
  from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
3
3
  from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
4
+ from devsecops_engine_tools.engine_utilities.utils.utils import Utils
4
5
 
5
6
 
6
7
  class SetInputCore:
@@ -31,15 +32,6 @@ class SetInputCore:
31
32
  list_exclusions.extend(exclusions)
32
33
  return list_exclusions
33
34
 
34
- def update_threshold(self, threshold, exclusions_data, pipeline_name):
35
- if (pipeline_name in exclusions_data) and (
36
- exclusions_data[pipeline_name].get("THRESHOLD", 0)
37
- ):
38
- threshold["VULNERABILITY"] = exclusions_data[pipeline_name][
39
- "THRESHOLD"
40
- ].get("VULNERABILITY")
41
- return threshold
42
-
43
35
  def set_input_core(self, dependencies_scanned):
44
36
  """
45
37
  Set the input core.
@@ -53,10 +45,11 @@ class SetInputCore:
53
45
  self.pipeline_name,
54
46
  self.tool,
55
47
  ),
56
- Threshold(
57
- self.update_threshold(
58
- self.remote_config["THRESHOLD"], self.exclusions, self.pipeline_name
59
- )
48
+ Utils.update_threshold(
49
+ self,
50
+ Threshold(self.remote_config["THRESHOLD"]),
51
+ self.exclusions,
52
+ self.pipeline_name,
60
53
  ),
61
54
  dependencies_scanned,
62
55
  self.remote_config["MESSAGE_INFO_ENGINE_DEPENDENCIES"],
@@ -62,8 +62,8 @@ def init_engine_dependencies(
62
62
  else:
63
63
  logger.error(f"Path {to_scan} does not exist")
64
64
  else:
65
- print(f"Tool skipped by DevSecOps policy")
66
- logger.info(f"Tool skipped by DevSecOps policy")
65
+ print("Tool skipped by DevSecOps policy")
66
+ dict_args["send_metrics"] = "false"
67
67
 
68
68
  core_input = input_core.set_input_core(dependencies_scanned)
69
69
 
@@ -150,7 +150,6 @@ class ReportSonar:
150
150
  if finding.active and related_sonar_finding["status"] == "RESOLVED": status = "reopen"
151
151
  elif related_sonar_finding["status"] != "RESOLVED":
152
152
  if finding.false_p: status = "falsepositive"
153
- elif finding.risk_accepted: status = "close"
154
153
  elif finding.risk_accepted or finding.out_of_scope: status = "wontfix"
155
154
  if status:
156
155
  self.sonar_gateway.change_finding_status(
@@ -1,5 +1,12 @@
1
1
  import zipfile
2
2
  import base64
3
+ import re
4
+
5
+ from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
6
+ from devsecops_engine_tools.engine_core.src.domain.model.level_vulnerability import (
7
+ LevelVulnerability,
8
+ )
9
+
3
10
 
4
11
  class Utils:
5
12
 
@@ -10,4 +17,24 @@ class Utils:
10
17
  def encode_token_to_base64(self, token):
11
18
  token_bytes = f"{token}:".encode("utf-8")
12
19
  base64_token = base64.b64encode(token_bytes).decode("utf-8")
13
- return base64_token
20
+ return base64_token
21
+
22
+ def update_threshold(self, threshold: Threshold, exclusions_data, pipeline_name):
23
+ def set_vulnerability(level):
24
+ threshold.vulnerability = LevelVulnerability(level)
25
+ return threshold
26
+
27
+ threshold_pipeline = exclusions_data.get(pipeline_name, {}).get("THRESHOLD", {})
28
+ if threshold_pipeline:
29
+ return set_vulnerability(threshold_pipeline.get("VULNERABILITY"))
30
+
31
+ search_patterns = exclusions_data.get("BY_PATTERN_SEARCH", {})
32
+
33
+ match_pattern = next(
34
+ (v["THRESHOLD"]["VULNERABILITY"]
35
+ for pattern, v in search_patterns.items()
36
+ if re.match(pattern, pipeline_name, re.IGNORECASE)),
37
+ None
38
+ )
39
+
40
+ return set_vulnerability(match_pattern) if match_pattern else threshold
@@ -1 +1 @@
1
- version = '1.18.2'
1
+ version = '1.19.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.18.2
3
+ Version: 1.19.0
4
4
  Summary: Tool for DevSecOps strategy
5
5
  Home-page: https://github.com/bancolombia/devsecops-engine-tools
6
6
  Author: Bancolombia DevSecOps Team
@@ -1,5 +1,5 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=_ladg-zchpgxxYliSZ7u18KOpOZp0xyGAVKWsMS0sNA,19
2
+ devsecops_engine_tools/version.py,sha256=0nj2qdmitYrCto-TiXXwqxzre9vK8_m_QX7V-2NYSAU,19
3
3
  devsecops_engine_tools/engine_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  devsecops_engine_tools/engine_core/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  devsecops_engine_tools/engine_core/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -14,7 +14,7 @@ devsecops_engine_tools/engine_core/src/domain/model/finding.py,sha256=MntDksQuPt
14
14
  devsecops_engine_tools/engine_core/src/domain/model/input_core.py,sha256=hc1WMzCwsGxnrlvvk84S5iNYJRDQWbaQP9MwR3N7tVM,422
15
15
  devsecops_engine_tools/engine_core/src/domain/model/level_compliance.py,sha256=ntn_UWqHc6sT5g_LozBdjdewTQxFsp7Kt8M0xqw-k_o,98
16
16
  devsecops_engine_tools/engine_core/src/domain/model/level_vulnerability.py,sha256=0sySEnFNkS2Y8uF5GUVAYehXw-i2OglUClkVobnSTPc,257
17
- devsecops_engine_tools/engine_core/src/domain/model/report.py,sha256=6ByyjXmUbowWbZIkn3qfL-QyhkyCDzdTCdRj-I7wTXA,1870
17
+ devsecops_engine_tools/engine_core/src/domain/model/report.py,sha256=09QV_jBQbucoiGM_PjVzRwWvvnebAx24Vehs2bqEe2o,1929
18
18
  devsecops_engine_tools/engine_core/src/domain/model/threshold.py,sha256=TCBECuvoC3-9g8vg3iKWGIixssNecP0iUaZ9Qzv0n7w,596
19
19
  devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py,sha256=5RcMHpeqznrTOpkjLuqekA_Bqf2Qr-w6OZ5Eoi3b-bs,465
20
20
  devsecops_engine_tools/engine_core/src/domain/model/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -25,18 +25,18 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/secrets_manager_gate
25
25
  devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_management_gateway.py,sha256=dT2YDlWJ4Zvny_5uCTtxBojw4i77UOgGbs8p2jlRo74,1137
26
26
  devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py,sha256=0JK4U5LGxzrLVZOw68j1PMxmLTDPru7Kts_-RtAG0jA,15965
28
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=9Qhh1n8rUCYugEMJ72Mlk3R9SH_wYEbLdGlA6NetBrQ,9269
28
+ devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=UBOBhlIhHbJAalgRPcfdbVZuX3wbhQlHcUYJ6gQimKc,9256
29
29
  devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=Li0NDwHwj_g2iM4tKF3wyKqXWYXspTThzKxkSma3S6E,8912
30
30
  devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=Xi0iNnPrFgqd2cBdAA5E_tgouhxs-BTo016aolnGgv8,2413
31
31
  devsecops_engine_tools/engine_core/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=-9gFDcvOIiXDIv4TUXR9zP83GBgR3v-xgp3QgcoaCo4,1926
35
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=YcioUKsI_heIIcN8ITSoiebxMhUyo6G3cQ7BLOodV2U,1659
34
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=4h1k5EQnL_3NoGI6oRyVibkN5u3s4j5VUthNU1m1zQc,2206
35
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=ELihQBgSPH4f9QCyg2dgjudsFitaqgdsljnVOmaA_v4,1972
36
36
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=blI4ZrquRE4y6DJ7N2YRx1nL0wrAXvdpx0fLSUf5qwA,4831
38
38
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=A_xCCj7Gs5-LAJY8bs1p_nViTI_sdtegmO3_cdPjh-Q,19580
39
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=LhALXdLWPCBvXd78Uebaho2cMYQ8msVz8r1J6AoxI8w,20726
40
40
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=pxlgjhX4-Dssn-XHKK8AdCOj6Ry6VcQtoDf5q8CxTks,3731
42
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -97,7 +97,7 @@ devsecops_engine_tools/engine_sast/engine_code/src/domain/model/config_tool.py,s
97
97
  devsecops_engine_tools/engine_sast/engine_code/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  devsecops_engine_tools/engine_sast/engine_code/src/domain/model/gateways/tool_gateway.py,sha256=kseBXn2SzCaFNJLghY9bTOCVvD2v5t7DKcfxgSmvBc0,459
99
99
  devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
- devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py,sha256=7J9fcMEWM0p8x2S3Q9mSSRDPMXQbp71LxdURb94KxQ0,5530
100
+ devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py,sha256=ynbpORfB0AbKQ0871KWivyUeJ9s3ek_i4_YcAvul3U0,5954
101
101
  devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
102
  devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
103
  devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/driven_adapters/bearer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -118,7 +118,7 @@ devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/config_tool.py,sh
118
118
  devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py,sha256=ClElxyHbwfDCW0fgcehaNfQLq00zozhO71EnyCjzt-U,182
120
120
  devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py,sha256=qD7FCugZpG_6A24_ZgXFxCvQRrcyZssNfyHixPh6eaM,5572
121
+ devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py,sha256=YKbWTYnoONGvVcWLGu1m7D35IHT45EfwSLkF2jTFZso,5934
122
122
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
123
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
124
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -148,8 +148,8 @@ devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init
148
148
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py,sha256=4fYPengHW3K0uVP6wHgOiNu-gRb08m78E7QZayZ2LC4,441
149
149
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=0KIesfLrmRqRId9r-domGjca4oLNyDzSI4jajjjX_Qo,840
150
150
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=unTB8GwpW45Mv0F4QBcUaVndovT0DdQjJKuFBiNCDhI,4357
152
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=k0LZd9PJpqEDns6DLYRGu9DzpRZeFsxAnowcjP5Rml4,2838
151
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=p49r6X74KYuKWi1VcssmLS1ntOJT1xHAhVVZKKnMKEY,4476
152
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=v4shbxBl3ciI9gPHKGKIiOxkJECRx6WwX_0BHp154DI,3204
153
153
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
154
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -173,7 +173,7 @@ devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/too
173
173
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
174
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=SXwMqqUSjaJlFUkfnLJp_2o2kJn4zVUXM0oNTP8cJ-k,3250
175
175
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=4wgBTQSDE-C5v01C3Vxzeq0DJKZUSqQ5TVLG7yPZPKs,926
176
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=DdKyKnLzqswHt619B3s1GTB5u_RyUixCambDkBuu7y4,1806
176
+ devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=-X4wIUAMF3ru1HBEfNz9JhrCg6tcgX40FBKdmamDEIU,2020
177
177
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
178
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
179
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -185,7 +185,7 @@ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_ada
185
185
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=LGqnO10Zt-0-TxUW6F1S46jVktlIwxWSYATKSVblCWI,2535
186
186
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=LWiCQsL7BukEJPCoPkC_zYDfYQMLo2LNYwMbIIXBGfs,3722
187
187
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=z7h-gEkxlRGKqyDeLDfGD_ILHfjoEZNiLQXNt6pH5CQ,2379
188
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=kLV6cyFfvDC7Wv9DOIvR2OK624GZ8D-F8JZ-ADapGWo,2367
189
189
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
190
  devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
191
  devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -201,7 +201,7 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/
201
201
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
202
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py,sha256=ZsNl4K4hXC4H2VGu4UEe2yRA6HvMRxQ2Jrs0rE8KezU,1542
203
203
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/handle_remote_config_patterns.py,sha256=cTM8IQRZJBr5zG5nhCkTxuw2fCHDZ3wrPgQhRjG88pg,968
204
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py,sha256=ZMr9l1h9-JdoT7QlLN8K9VTP2VP0B_5TZGMUQ6KyIYo,2525
204
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py,sha256=0M53iuI0VEDcYk9G4EuAFTc1Iok3xqiWLHYuKaU3dqg,2250
205
205
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
206
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
207
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -211,7 +211,7 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_
211
211
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=Vm0pj1i6a34xXouXUU95Y04hzR--9tcMQuycR7IMUnQ,2221
212
212
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=u8SAtVuTqJ6o2B6jC-gMNG2Pn7a_bHWT_B1a_55iYZ4,7408
213
213
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=qau5EXjyvKuXkcDPxVdc5B4lhwqv6VhcSBsAjFjNlCM,2536
214
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=wPKcSktBqSzsF7vJJYcJ867d_NnusRRSiIeBeLa0D4w,2522
215
215
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
216
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=KjRqQ3zxEq8MUNMW5LjS0EK2EIku3GWhSz9wUbDsZz0,4005
217
217
  devsecops_engine_tools/engine_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -287,7 +287,7 @@ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/__init__.py,s
287
287
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
288
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/sonar_gateway.py,sha256=PCrGq7NOINAFPvmX-5V5191MGhahsnQeWXUB1-xL4Xw,1279
289
289
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
290
- devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=T5RxTCHxhNzs2Tu0Xdx8Xy2xUY8-znzSY3msiaw5reY,9041
290
+ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=47q-JCyjH50FtBnkJ4WkcYPggv140LgqpXpkWh8JKMI,8964
291
291
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
292
292
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
293
293
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -306,9 +306,9 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
306
306
  devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
307
307
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
308
308
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
309
- devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=r_mng-OVWeqQyy6yIFsCeJrvH81VUPI3o1zdJO0JS0I,397
310
- devsecops_engine_tools-1.18.2.dist-info/METADATA,sha256=Q5W2ScOCWoJfmdH4uSsOVQePAhELpY6xrCzS3qe6KW8,10895
311
- devsecops_engine_tools-1.18.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
312
- devsecops_engine_tools-1.18.2.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
313
- devsecops_engine_tools-1.18.2.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
314
- devsecops_engine_tools-1.18.2.dist-info/RECORD,,
309
+ devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=7oWFS_Nv1NVeRuJmqQzj5yV-GEkGKNhBnGpbFaSMvmI,1406
310
+ devsecops_engine_tools-1.19.0.dist-info/METADATA,sha256=nf8B2vIrV5OgG9LE4M4c_P7zsXF7Tb3XXT-5MKUYpbs,10895
311
+ devsecops_engine_tools-1.19.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
312
+ devsecops_engine_tools-1.19.0.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
313
+ devsecops_engine_tools-1.19.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
314
+ devsecops_engine_tools-1.19.0.dist-info/RECORD,,