devsecops-engine-tools 1.7.11__py3-none-any.whl → 1.7.13__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/usecases/handle_scan.py +8 -1
  2. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +2 -1
  3. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +29 -19
  4. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +14 -13
  5. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +15 -1
  6. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +8 -2
  7. devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +4 -4
  8. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +7 -33
  9. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py +10 -45
  10. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +31 -55
  11. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +1 -1
  12. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +24 -28
  13. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +6 -2
  14. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +4 -1
  15. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +29 -11
  16. devsecops_engine_tools/version.py +1 -1
  17. {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/METADATA +1 -1
  18. {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/RECORD +21 -21
  19. {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/WHEEL +0 -0
  20. {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/entry_points.txt +0 -0
  21. {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/top_level.txt +0 -0
@@ -110,7 +110,7 @@ class HandleScan:
110
110
  else:
111
111
  secret_sca = dict_args["token_engine_container"]
112
112
  findings_list, input_core = runner_engine_container(
113
- dict_args, config_tool, secret_sca, self.devops_platform_gateway
113
+ dict_args, config_tool["ENGINE_CONTAINER"]["TOOL"], secret_sca, self.devops_platform_gateway
114
114
  )
115
115
  if (
116
116
  dict_args["use_vulnerability_management"] == "true"
@@ -128,6 +128,13 @@ class HandleScan:
128
128
  config_tool["ENGINE_SECRET"]["TOOL"],
129
129
  self.devops_platform_gateway
130
130
  )
131
+ if (
132
+ dict_args["use_vulnerability_management"] == "true"
133
+ and input_core.path_file_results
134
+ ):
135
+ self._use_vulnerability_management(
136
+ config_tool, input_core, dict_args, secret_tool, env
137
+ )
131
138
  return findings_list, input_core
132
139
  elif "engine_dependencies" in dict_args["tool"]:
133
140
  if secret_tool is not None:
@@ -53,6 +53,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
53
53
  "CHECKOV": "Checkov Scan",
54
54
  "PRISMA": "Twistlock Image Scan",
55
55
  "XRAY": "JFrog Xray On Demand Binary Scan",
56
+ "TRUFFLEHOG": "Trufflehog Scan",
56
57
  }
57
58
 
58
59
  if any(
@@ -60,7 +61,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
60
61
  for branch in vulnerability_management.config_tool[
61
62
  "VULNERABILITY_MANAGER"
62
63
  ]["BRANCH_FILTER"].split(",")
63
- ):
64
+ ) or (vulnerability_management.dict_args["tool"] == 'engine_secret'):
64
65
  request: ImportScanRequest = Connect.cmdb(
65
66
  cmdb_mapping={
66
67
  "product_type_name": "nombreevc",
@@ -28,16 +28,10 @@ class SecretScan:
28
28
  self.tool_deserialize = tool_deserialize
29
29
  self.git_gateway = git_gateway
30
30
 
31
- def process(self, dict_args, tool):
32
- tool = str(tool).lower()
33
- init_config_tool = self.devops_platform_gateway.get_remote_config(
34
- dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json"
35
- )
36
- config_tool, skip_tool = self.complete_config_tool(
37
- init_config_tool, tool
38
- )
31
+ def process(self, skip_tool, config_tool):
39
32
  finding_list = []
40
- if skip_tool == "false":
33
+ file_path_findings = ""
34
+ if skip_tool == False:
41
35
  self.tool_gateway.install_tool(self.devops_platform_gateway.get_variable("os"), self.devops_platform_gateway.get_variable("temp_directory"))
42
36
  files_pullrequest = self.git_gateway.get_files_pull_request(
43
37
  self.devops_platform_gateway.get_variable("work_folder"),
@@ -49,24 +43,40 @@ class SecretScan:
49
43
  self.devops_platform_gateway.get_variable("project_name"),
50
44
  self.devops_platform_gateway.get_variable("repository"),
51
45
  self.devops_platform_gateway.get_variable("repository_provider"))
52
- finding_list = self.tool_deserialize.get_list_vulnerability(
53
- self.tool_gateway.run_tool_secret_scan(
46
+ findings, file_path_findings = self.tool_gateway.run_tool_secret_scan(
54
47
  files_pullrequest,
55
48
  config_tool.exclude_path,
56
49
  self.devops_platform_gateway.get_variable("os"),
57
50
  self.devops_platform_gateway.get_variable("work_folder"),
58
51
  config_tool.number_threads,
59
52
  self.devops_platform_gateway.get_variable("repository")
60
- ),
53
+ )
54
+ finding_list = self.tool_deserialize.get_list_vulnerability(
55
+ findings,
61
56
  self.devops_platform_gateway.get_variable("os"),
62
57
  self.devops_platform_gateway.get_variable("work_folder")
63
58
  )
64
- return finding_list, config_tool
59
+ return finding_list, file_path_findings
65
60
 
66
- def complete_config_tool(self, data_file_tool, tool):
67
- config_tool = DeserializeConfigTool(json_data=data_file_tool, tool=tool)
61
+ def complete_config_tool(self, dict_args, tool):
62
+ tool = str(tool).lower()
63
+ init_config_tool = self.devops_platform_gateway.get_remote_config(
64
+ dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json"
65
+ )
66
+ config_tool = DeserializeConfigTool(json_data=init_config_tool, tool=tool)
68
67
  config_tool.scope_pipeline = self.devops_platform_gateway.get_variable("pipeline_name")
69
- skip_tool = "false"
70
- if config_tool.scope_pipeline in config_tool.ignore_search_pattern:
71
- skip_tool = "true"
72
- return config_tool, skip_tool
68
+ return config_tool
69
+
70
+ def skip_from_exclusion(self, exclusions):
71
+ """
72
+ Handle skip tool.
73
+
74
+ Return: bool: True -> skip tool, False -> not skip tool.
75
+ """
76
+ pipeline_name = self.devops_platform_gateway.get_variable("pipeline_name")
77
+ if (pipeline_name in exclusions) and (
78
+ exclusions[pipeline_name].get("SKIP_TOOL", 0)
79
+ ):
80
+ return True
81
+ else:
82
+ return False
@@ -37,19 +37,20 @@ class SetInputCore:
37
37
  list_exclusions = []
38
38
  for key, value in exclusions_data.items():
39
39
  if (key == "All") or (key == pipeline_name):
40
- exclusions = [
41
- Exclusions(
42
- id=item.get("id", ""),
43
- where=item.get("where", ""),
44
- create_date=item.get("create_date", ""),
45
- expired_date=item.get("expired_date", ""),
46
- severity=item.get("severity", ""),
47
- hu=item.get("hu", ""),
48
- reason=item.get("reason", "Risk acceptance"),
49
- )
50
- for item in value[tool]
51
- ]
52
- list_exclusions.extend(exclusions)
40
+ if value.get(tool, 0):
41
+ exclusions = [
42
+ Exclusions(
43
+ id=item.get("id", ""),
44
+ where=item.get("where", ""),
45
+ create_date=item.get("create_date", ""),
46
+ expired_date=item.get("expired_date", ""),
47
+ severity=item.get("severity", ""),
48
+ hu=item.get("hu", ""),
49
+ reason=item.get("reason", "Risk acceptance"),
50
+ )
51
+ for item in value[tool]
52
+ ]
53
+ list_exclusions.extend(exclusions)
53
54
  return list_exclusions
54
55
 
55
56
  def set_input_core(self, finding_list):
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import os
2
3
  import re
3
4
  import subprocess
4
5
  import concurrent.futures
@@ -61,7 +62,8 @@ class TrufflehogRun(ToolGateway):
61
62
  include_paths,
62
63
  [repository_name] * len(include_paths),
63
64
  )
64
- return self.decode_output(results)
65
+ findings, file_findings = self.create_file(self.decode_output(results), agent_work_folder)
66
+ return findings, file_findings
65
67
 
66
68
  def config_include_path(self, files, agent_work_folder):
67
69
  chunks = []
@@ -102,3 +104,15 @@ class TrufflehogRun(ToolGateway):
102
104
  if json_obj not in result:
103
105
  result.append(json_obj)
104
106
  return result
107
+
108
+ def create_file(self, findings, agent_work_folder):
109
+ file_findings = os.path.join(agent_work_folder, "secret_scan_result.json")
110
+ with open(file_findings, "w") as file:
111
+ for find in findings:
112
+ original_where = str(find.get("SourceMetadata").get("Data").get("Filesystem").get("file"))
113
+ original_where = original_where.replace("\\", "/")
114
+ where_text = original_where.replace(agent_work_folder, "")
115
+ find["SourceMetadata"]["Data"]["Filesystem"]["file"] = where_text
116
+ json_str = json.dumps(find)
117
+ file.write(json_str + '\n')
118
+ return findings, file_findings
@@ -6,6 +6,12 @@ from devsecops_engine_tools.engine_sast.engine_secret.src.domain.usecases.set_in
6
6
 
7
7
  def engine_secret_scan(devops_platform_gateway, tool_gateway, dict_args, tool, tool_deserealizator, git_gateway):
8
8
  sys.stdout.reconfigure(encoding='utf-8')
9
- finding_list, config_tool = SecretScan(tool_gateway, devops_platform_gateway, tool_deserealizator, git_gateway).process(dict_args, tool)
9
+ exclusions = devops_platform_gateway.get_remote_config(
10
+ dict_args["remote_config_repo"], "engine_sast/engine_secret/Exclusions.json"
11
+ )
12
+ secret_scan = SecretScan(tool_gateway, devops_platform_gateway, tool_deserealizator, git_gateway)
13
+ config_tool = secret_scan.complete_config_tool(dict_args, tool)
14
+ skip_tool = secret_scan.skip_from_exclusion(exclusions)
15
+ finding_list, file_path_findings = secret_scan.process(skip_tool, config_tool)
10
16
  input_core = SetInputCore(devops_platform_gateway, dict_args, tool, config_tool)
11
- return finding_list, input_core.set_input_core(finding_list)
17
+ return finding_list, input_core.set_input_core(file_path_findings)
@@ -18,12 +18,12 @@ from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.drive
18
18
  )
19
19
 
20
20
 
21
- def runner_engine_container(dict_args, config_tool, token, tool_remote):
21
+ def runner_engine_container(dict_args, tool, token, tool_remote):
22
22
  try:
23
- if config_tool["ENGINE_CONTAINER"]["TOOL"].lower() == "trivy":
23
+ if tool.lower() == "trivy":
24
24
  tool_run = TrivyScan()
25
25
  tool_deseralizator = TrivyDeserializator()
26
- elif config_tool["ENGINE_CONTAINER"]["TOOL"].lower() == "prisma":
26
+ elif tool.lower() == "prisma":
27
27
  tool_run = PrismaCloudManagerScan()
28
28
  tool_deseralizator = PrismaDeserealizator()
29
29
  tool_images = DockerImages()
@@ -34,7 +34,7 @@ def runner_engine_container(dict_args, config_tool, token, tool_remote):
34
34
  tool_deseralizator,
35
35
  dict_args,
36
36
  token,
37
- config_tool,
37
+ tool,
38
38
  )
39
39
 
40
40
  except Exception as e:
@@ -1,6 +1,3 @@
1
- from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
2
- DevopsPlatformGateway,
3
- )
4
1
  from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.tool_gateway import (
5
2
  ToolGateway,
6
3
  )
@@ -11,33 +8,23 @@ from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateway
11
8
  DeseralizatorGateway,
12
9
  )
13
10
 
11
+
14
12
  class ContainerScaScan:
15
13
  def __init__(
16
14
  self,
17
15
  tool_run: ToolGateway,
18
- tool_remote: DevopsPlatformGateway,
16
+ remote_config,
19
17
  tool_images: ImagesGateway,
20
18
  tool_deseralizator: DeseralizatorGateway,
21
- dict_args,
19
+ build_id,
22
20
  token,
23
- skip_flag
24
21
  ):
25
22
  self.tool_run = tool_run
26
- self.tool_remote = tool_remote
23
+ self.remote_config = remote_config
27
24
  self.tool_images = tool_images
28
25
  self.tool_deseralizator = tool_deseralizator
29
- self.dict_args = dict_args
26
+ self.build_id = build_id
30
27
  self.token = token
31
- self.skip_flag = skip_flag
32
-
33
- def get_remote_config(self, file_path):
34
- """
35
- Get remote configuration.
36
-
37
- Returns:
38
- dict: Remote configuration.
39
- """
40
- return self.tool_remote.get_remote_config(self.dict_args["remote_config_repo"], file_path)
41
28
 
42
29
  def scan_image(self):
43
30
  """
@@ -48,15 +35,6 @@ class ContainerScaScan:
48
35
  """
49
36
  return self.tool_images.list_images()
50
37
 
51
- def get_variable(self, variable):
52
- """
53
- Get variable.
54
-
55
- Returns:
56
- dict: Remote variable.
57
- """
58
- return self.tool_remote.get_variable(variable)
59
-
60
38
  def process(self):
61
39
  """
62
40
  Process SCA scanning.
@@ -65,11 +43,7 @@ class ContainerScaScan:
65
43
  dict: SCA scanning results.
66
44
  """
67
45
  return self.tool_run.run_tool_container_sca(
68
- self.get_remote_config("engine_sca/engine_container/ConfigTool.json"),
69
- self.token,
70
- self.scan_image(),
71
- self.get_variable("build_id"),
72
- self.skip_flag
46
+ self.remote_config, self.token, self.scan_image(), self.build_id
73
47
  )
74
48
 
75
49
  def deseralizator(self, image_scanned):
@@ -79,4 +53,4 @@ class ContainerScaScan:
79
53
  Returns:
80
54
  list: Deserialized list of findings.
81
55
  """
82
- return self.tool_deseralizator.get_list_findings(image_scanned)
56
+ return self.tool_deseralizator.get_list_findings(image_scanned)
@@ -1,67 +1,32 @@
1
1
  import re
2
- from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
3
- DevopsPlatformGateway,
4
- )
5
2
 
6
3
 
7
4
  class HandleRemoteConfigPatterns:
8
- def __init__(
9
- self,
10
- tool_remote: DevopsPlatformGateway,
11
- dict_args,
12
- ):
13
- self.tool_remote = tool_remote
14
- self.dict_args = dict_args
5
+ def __init__(self, remote_config, exclusions, pipeline_name):
6
+ self.remote_config = remote_config
7
+ self.exclusions = exclusions
8
+ self.pipeline_name = pipeline_name
15
9
 
16
- def get_remote_config(self, file_path):
17
- """
18
- Get remote configuration
19
- Return: dict: Remote configuration
20
- """
21
- return self.tool_remote.get_remote_config(
22
- self.dict_args["remote_config_repo"], file_path
23
- )
24
-
25
- def get_variable(self, variable):
26
- """
27
- Get variable.
28
-
29
- Returns:
30
- dict: Remote variable.
31
- """
32
- return self.tool_remote.get_variable(variable)
33
-
34
10
  def ignore_analysis_pattern(self):
35
11
  """
36
12
  Handle analysis pattern.
37
13
  Return: bool: False -> not scan, True -> scan.
38
14
  """
39
- ignore = self.get_remote_config("engine_sca/engine_container/ConfigTool.json")["IGNORE_SEARCH_PATTERN"]
40
- if re.match(ignore, self.get_variable("pipeline_name"), re.IGNORECASE):
15
+ ignore = self.remote_config["IGNORE_SEARCH_PATTERN"]
16
+ if re.match(ignore, self.pipeline_name, re.IGNORECASE):
41
17
  return False
42
18
  else:
43
19
  return True
44
-
45
- def handle_skip_tool(self, exclusions, pipeline_name):
20
+
21
+ def skip_from_exclusion(self):
46
22
  """
47
23
  Handle skip tool.
48
24
 
49
25
  Return: bool: True -> skip tool, False -> not skip tool.
50
26
  """
51
- if (pipeline_name in exclusions) and (
52
- exclusions[pipeline_name].get("SKIP_TOOL", 0)
27
+ if (self.pipeline_name in self.exclusions) and (
28
+ self.exclusions[self.pipeline_name].get("SKIP_TOOL", 0)
53
29
  ):
54
30
  return True
55
31
  else:
56
32
  return False
57
-
58
- def process_handle_skip_tool(self):
59
- """
60
- Process handle skip tool.
61
-
62
- Return: bool: True -> skip tool, False -> not skip tool.
63
- """
64
- return self.handle_skip_tool(
65
- self.get_remote_config("engine_sca/engine_container/Exclusions.json"),
66
- self.get_variable("pipeline_name"),
67
- )
@@ -1,54 +1,34 @@
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
- from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
4
- DevopsPlatformGateway,
5
- )
3
+
6
4
 
7
5
  from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
8
6
 
9
7
 
10
8
  class SetInputCore:
11
- def __init__(self, tool_remote: DevopsPlatformGateway, dict_args, config_tool):
12
- self.tool_remote = tool_remote
13
- self.dict_args = dict_args
14
- self.config_tool = config_tool
15
-
16
- def get_remote_config(self, file_path):
17
- """
18
- Get remote configuration.
19
-
20
- Returns:
21
- dict: Remote configuration.
22
- """
23
- return self.tool_remote.get_remote_config(self.dict_args["remote_config_repo"], file_path)
24
-
25
- def get_variable(self, variable):
26
- """
27
- Get variable.
28
-
29
- Returns:
30
- dict: Remote variable.
31
- """
32
- return self.tool_remote.get_variable(variable)
33
-
34
- def get_exclusions(self, exclusions_data, pipeline_name, config_tool):
35
- list_exclusions = []
36
- for key, value in exclusions_data.items():
37
- if (key == "All") or (key == pipeline_name):
38
- exclusions = [
39
- Exclusions(
40
- id=item.get("id", ""),
41
- where=item.get("where", ""),
42
- cve_id=item.get("cve_id", ""),
43
- create_date=item.get("create_date", ""),
44
- expired_date=item.get("expired_date", ""),
45
- severity=item.get("severity", ""),
46
- hu=item.get("hu", ""),
47
- reason=item.get("reason", "Risk acceptance"),
48
- )
49
- for item in value[config_tool["ENGINE_CONTAINER"]["TOOL"]]
50
- ]
51
- list_exclusions.extend(exclusions)
9
+ def __init__(self, remote_config, exclusions, pipeline_name, tool, stage):
10
+ self.remote_config = remote_config
11
+ self.exclusions = exclusions
12
+ self.pipeline_name = pipeline_name
13
+ self.tool = tool
14
+ self.stage = stage
15
+
16
+ def get_exclusions(self, exclusions_data, pipeline_name, tool):
17
+ list_exclusions = [
18
+ Exclusions(
19
+ id=item.get("id", ""),
20
+ where=item.get("where", ""),
21
+ cve_id=item.get("cve_id", ""),
22
+ create_date=item.get("create_date", ""),
23
+ expired_date=item.get("expired_date", ""),
24
+ severity=item.get("severity", ""),
25
+ hu=item.get("hu", ""),
26
+ reason=item.get("reason", "Risk acceptance"),
27
+ )
28
+ for key, value in exclusions_data.items()
29
+ if key in {"All", pipeline_name} and value.get(tool)
30
+ for item in value[tool]
31
+ ]
52
32
  return list_exclusions
53
33
 
54
34
  def set_input_core(self, images_scanned):
@@ -60,17 +40,13 @@ class SetInputCore:
60
40
  """
61
41
  return InputCore(
62
42
  self.get_exclusions(
63
- self.get_remote_config("engine_sca/engine_container/Exclusions.json"),
64
- self.get_variable("pipeline_name"),
65
- self.config_tool,
66
- ),
67
- Threshold(
68
- self.get_remote_config("engine_sca/engine_container/ConfigTool.json")["THRESHOLD"]
43
+ self.exclusions,
44
+ self.pipeline_name,
45
+ self.tool,
69
46
  ),
47
+ Threshold(self.remote_config["THRESHOLD"]),
70
48
  images_scanned[-1] if images_scanned else None,
71
- self.get_remote_config("engine_sca/engine_container/ConfigTool.json")[
72
- "MESSAGE_INFO_ENGINE_CONTAINER"
73
- ],
74
- self.get_variable("pipeline_name"),
75
- self.get_variable("stage").capitalize(),
49
+ self.remote_config["MESSAGE_INFO_ENGINE_CONTAINER"],
50
+ self.pipeline_name,
51
+ self.stage.capitalize(),
76
52
  )
@@ -19,4 +19,4 @@ class DockerImages(ImagesGateway):
19
19
  print("Created date last image:", latest_image.attrs["Created"])
20
20
  return latest_image
21
21
  except subprocess.CalledProcessError as e:
22
- raise ValueError(f"Error listing images:{e.stderr}")
22
+ raise ValueError(f"Error listing images:{e.stderr}")
@@ -3,7 +3,6 @@ import requests
3
3
  import os
4
4
  import subprocess
5
5
  import logging
6
- import re
7
6
  import base64
8
7
  from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.helpers.images_scanned import (
9
8
  ImagesScanned,
@@ -87,37 +86,34 @@ class PrismaCloudManagerScan(ToolGateway):
87
86
 
88
87
  return images_scanned
89
88
 
90
- def run_tool_container_sca(
91
- self, remoteconfig, prisma_secret_key, image, build_id, skip_flag
92
- ):
89
+ def run_tool_container_sca(self, remoteconfig, prisma_secret_key, image, build_id):
93
90
  images_scanned = []
94
- if not (skip_flag):
95
- try:
96
- file_path = os.path.join(
97
- os.getcwd(), remoteconfig["PRISMA_CLOUD"]["TWISTCLI_PATH"]
98
- )
91
+ try:
92
+ file_path = os.path.join(
93
+ os.getcwd(), remoteconfig["PRISMA_CLOUD"]["TWISTCLI_PATH"]
94
+ )
99
95
 
100
- if not os.path.exists(file_path):
101
- self.download_twistcli(
102
- file_path,
103
- remoteconfig["PRISMA_CLOUD"]["PRISMA_ACCESS_KEY"],
104
- prisma_secret_key,
105
- remoteconfig["PRISMA_CLOUD"]["PRISMA_CONSOLE_URL"],
106
- remoteconfig["PRISMA_CLOUD"]["PRISMA_API_VERSION"],
107
- )
108
- images_scanned.extend(
109
- self.scan_image(
110
- file_path,
111
- image,
112
- remoteconfig,
113
- prisma_secret_key,
114
- build_id,
115
- )
96
+ if not os.path.exists(file_path):
97
+ self.download_twistcli(
98
+ file_path,
99
+ remoteconfig["PRISMA_CLOUD"]["PRISMA_ACCESS_KEY"],
100
+ prisma_secret_key,
101
+ remoteconfig["PRISMA_CLOUD"]["PRISMA_CONSOLE_URL"],
102
+ remoteconfig["PRISMA_CLOUD"]["PRISMA_API_VERSION"],
103
+ )
104
+ images_scanned.extend(
105
+ self.scan_image(
106
+ file_path,
107
+ image,
108
+ remoteconfig,
109
+ prisma_secret_key,
110
+ build_id,
116
111
  )
112
+ )
117
113
 
118
- return images_scanned
114
+ return images_scanned
119
115
 
120
- except Exception as ex:
121
- logger.error(f"An overall error occurred: {ex}")
116
+ except Exception as ex:
117
+ logger.error(f"An overall error occurred: {ex}")
122
118
 
123
119
  return images_scanned
@@ -31,8 +31,12 @@ class PrismaDeserealizator(DeseralizatorGateway):
31
31
  image_object = file.read()
32
32
 
33
33
  json_data = json.loads(image_object)
34
- vulnerabilities_data = json_data["results"][0]["vulnerabilities"] if "vulnerabilities" in json_data["results"][0] else []
35
-
34
+ vulnerabilities_data = (
35
+ json_data["results"][0]["vulnerabilities"]
36
+ if "vulnerabilities" in json_data["results"][0]
37
+ else []
38
+ )
39
+
36
40
  # Create a list of findings instances from the JSON data
37
41
  vulnerabilities = [
38
42
  Finding(
@@ -9,6 +9,7 @@ from dataclasses import dataclass
9
9
  import json
10
10
  from datetime import datetime
11
11
 
12
+
12
13
  @dataclass
13
14
  class TrivyDeserializator(DeseralizatorGateway):
14
15
  def get_list_findings(self, images_scanned: list) -> "list[Finding]":
@@ -34,7 +35,9 @@ class TrivyDeserializator(DeseralizatorGateway):
34
35
  + vul.get("InstalledVersion", ""),
35
36
  description=vul.get("Description", "").replace("\n", ""),
36
37
  severity=vul.get("Severity", "").lower(),
37
- identification_date=datetime.now().strftime("%d-%m-%Y %H:%M:%S"),
38
+ identification_date=datetime.now().strftime(
39
+ "%d-%m-%Y %H:%M:%S"
40
+ ),
38
41
  published_date_cve=vul.get("PublishedDate", ""),
39
42
  module="engine_container",
40
43
  category=Category.VULNERABILITY,
@@ -7,6 +7,10 @@ from devsecops_engine_tools.engine_sca.engine_container.src.domain.usecases.hand
7
7
  from devsecops_engine_tools.engine_sca.engine_container.src.domain.usecases.set_input_core import (
8
8
  SetInputCore,
9
9
  )
10
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
11
+ from devsecops_engine_tools.engine_utilities import settings
12
+
13
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
10
14
 
11
15
 
12
16
  def init_engine_sca_rm(
@@ -16,25 +20,39 @@ def init_engine_sca_rm(
16
20
  tool_deseralizator,
17
21
  dict_args,
18
22
  token,
19
- config_tool,
23
+ tool,
20
24
  ):
21
- handle_remote_config_patterns = HandleRemoteConfigPatterns(tool_remote, dict_args)
22
- flag = handle_remote_config_patterns.ignore_analysis_pattern()
25
+ remote_config = tool_remote.get_remote_config(
26
+ dict_args["remote_config_repo"], "engine_sca/engine_container/ConfigTool.json"
27
+ )
28
+ exclusions = tool_remote.get_remote_config(
29
+ dict_args["remote_config_repo"], "engine_sca/engine_container/Exclusions.json"
30
+ )
31
+ pipeline_name = tool_remote.get_variable("pipeline_name")
32
+ handle_remote_config_patterns = HandleRemoteConfigPatterns(
33
+ remote_config, exclusions, pipeline_name
34
+ )
35
+ skip_flag = handle_remote_config_patterns.skip_from_exclusion()
36
+ scan_flag = handle_remote_config_patterns.ignore_analysis_pattern()
37
+ build_id = tool_remote.get_variable("build_id")
38
+ stage = tool_remote.get_variable("stage")
23
39
  images_scanned = []
24
40
  deseralized = []
25
- if flag:
41
+ input_core = SetInputCore(remote_config, exclusions, pipeline_name, tool, stage)
42
+ if scan_flag and not (skip_flag):
26
43
  container_sca_scan = ContainerScaScan(
27
44
  tool_run,
28
- tool_remote,
45
+ remote_config,
29
46
  tool_images,
30
47
  tool_deseralizator,
31
- dict_args,
48
+ build_id,
32
49
  token,
33
- handle_remote_config_patterns.process_handle_skip_tool(),
34
50
  )
35
51
  images_scanned = container_sca_scan.process()
36
52
  deseralized = container_sca_scan.deseralizator(images_scanned)
37
- input_core = SetInputCore(tool_remote, dict_args, config_tool)
38
-
39
- return deseralized, input_core.set_input_core(images_scanned
40
- )
53
+ else:
54
+ print("Tool skipped by DevSecOps policy")
55
+ logger.info("Tool skipped by DevSecOps policy")
56
+ core_input = input_core.set_input_core(images_scanned)
57
+
58
+ return deseralized, core_input
@@ -1 +1 @@
1
- version = '1.7.11'
1
+ version = '1.7.13'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.7.11
3
+ Version: 1.7.13
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=kch8pLRhOVDYQb0GPok1AQuGCWQQYxcJ0g6aeebrt9Q,19
2
+ devsecops_engine_tools/version.py,sha256=Uh22o-ohmw70__1bozvtr1yrWudbnqwNgHxwHKM-Qbg,18
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
@@ -26,7 +26,7 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_manage
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=z6lcd-tnb-3QfZ1yf2ZlaRbovwF0YE6nUmS5V92aszc,15534
28
28
  devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=EBLEzm-p_lEeB7T8iarn2Fc4_6hY0XAIT1AJATd2JUM,2473
29
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=CBk6KR2lpZ_ayitIdZERjJ0yasg1_dICHA0Tw97s-eo,6410
29
+ devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=ee9ULqKGYfaxBUO8RNq-Znh4dbojghIauH4YIjYx9QU,6730
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
@@ -36,7 +36,7 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secret
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=Ot1j5my-iEpU-ZYy9yNXkwmwLOmJ3f95JyyAUcpFN5g,4967
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=YxW1Otev5V7REBr9yCW36XCmk9e_v5Y-blXrmRX_rZU,10748
39
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=fnyexfnIfFyP4iCLTeMwWa6OaEP_VYcnPg8roANIKGs,10864
40
40
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py,sha256=Tz056qYuIKrdYGKyoPo7xFdOpfN3A0YMd3cCSAGVrYQ,3828
42
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -113,22 +113,22 @@ devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gatewa
113
113
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py,sha256=x6LFK8wZuVix-ZCBdBQTzvjQi59nZYVrSOTatCOQbxc,638
114
114
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=juharYjy__KyB0fFCbU30k_aLd_9cQgsoCMeodq9ebA,593
115
115
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=AppRyQD1vTkK46BPTLc6mCqGp9gE4YA0fxkg_pPoR2U,3621
117
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=AR8bVAyrWEwyeJEJwXCQlsZKZMb790918OJPpxkmwyA,2747
116
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=VSeZorNjc98TTqGxD1NKm1ox__DRlCBqLCrA2heTxtM,3907
117
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=k0LZd9PJpqEDns6DLYRGu9DzpRZeFsxAnowcjP5Rml4,2838
118
118
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
120
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
121
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py,sha256=xKIUAnNK4u0pTHgo5tFrzmnquBegBQgN2-3jU6V6vxQ,2642
122
122
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
123
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=HZcNUa9VvK1InsDY94HiuDQuEH_R6pJIeAN3Zwi8CBA,1825
124
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=BYbYBdC_DWWxpaxoLWXYdIHiKXDbUJ_zOyExt0coJwA,4544
124
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=cvCSKTDN-4oL9H5EZF_-WrP5bNamFt0WfeCwaMO_Nfo,5345
125
125
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=cSCDXXDptaIDeBn-u9y_j5UbtjEY3AYK1zNXyKi9Ilw,693
126
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=g3DNFlvt6NEYG-g0CjSAQAUUh6spWpnkU64Pvi3cjqM,1028
127
127
  devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  devsecops_engine_tools/engine_sca/engine_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  devsecops_engine_tools/engine_sca/engine_container/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
130
  devsecops_engine_tools/engine_sca/engine_container/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py,sha256=-ExUAX2SCr4FM61mHmm0ezla8u0-FCbw59yEiW4YMUk,1802
131
+ devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py,sha256=tu7FU4taXp9XQFNkNv8jzHIS16pqy6zLDjYBGax4tWU,1718
132
132
  devsecops_engine_tools/engine_sca/engine_container/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
133
  devsecops_engine_tools/engine_sca/engine_container/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
134
  devsecops_engine_tools/engine_sca/engine_container/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -138,21 +138,21 @@ devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/des
138
138
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/images_gateway.py,sha256=szx-9iO1eSDedr3rw605Mx3jYBEFwRKBM0ts5zImgx0,158
139
139
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/tool_gateway.py,sha256=ADZjrl8u8CQ0hWoVhbnHFcjvyUmUeleffwmhtlg8s30,224
140
140
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=eu8Sk2F_YLZ5fQ915ms-ebjHmmZrgg5XgQY53lbPHaU,2442
142
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=SuoYbbJkFIzOY71-ALIxMPnHEM6P4h_nu5F-EH7oXj0,1921
143
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=luo4pi7PtiH_cUue5DhrnqqABuciwz2w7UWpN-J6e50,2843
141
+ devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=zwlYQSmtn7_ms9x5-Dhr3WTilLM5cXdAyslgWRh5xdc,1635
142
+ devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=4wgBTQSDE-C5v01C3Vxzeq0DJKZUSqQ5TVLG7yPZPKs,926
143
+ devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=Jw2sjrgRS8kjIFLt2nEBXQpF2-Ncm_ltgc6Q7ZIZKw0,1840
144
144
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=gnDC8wnG99D3p6K_ph2a9bMtoYGu_5BdGacVOD8swH8,815
147
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=tdZeW5KbZcLxSMM37-GdmkLItpRDUlR0eAyew6bI2ts,816
148
148
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=J92AIpPzIwAO37RFRN7H9x-9QLWatpL7v7bbGadRY6c,4532
150
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=InUFpFj1LO_rY_8oiKaAXUZ3NP_uASL1wofyd7WPLeQ,2450
149
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=3KyqbuLSFHMAUO5n9ruLMU8nhiP9BuGeXchN9PHW3M0,4369
150
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=k6j6ajlHFVfKdxIdvWVak0eryhIknT0IyTvyI2e3gz0,2514
151
151
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=U5FFZsJCCADpH0-VbweeRqZi0aVM8RQqIijv17BWnY0,2114
152
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=v0XU-KJfnt4BFmoLbpc3IE0RxDVsYN5dzftfJiWR2Fs,2169
153
153
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=IBd3fOQmHPDeVud54DQtw0x2o4jm31iwRoiBDTpkqdc,4284
154
154
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=goSKzTRwVbuwMuEkYVy7eoR-OkljFhB3Jj2BD7U5ggg,1334
155
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=BM8XJI_tlFxurdhBz2N5R33z4WGNLN_mkaG2npYBTiM,2212
156
156
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/images_scanned.py,sha256=V_wE9maXdGlQbYIe6qVgOqEtiWrh-icd8V4dpWDQrXg,590
158
158
  devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -242,8 +242,8 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
242
242
  devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
243
243
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=GAslbWaBpwP3mP6fBsgVl07TTBgcCggQTy8h2M9ibeo,612
244
244
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
245
- devsecops_engine_tools-1.7.11.dist-info/METADATA,sha256=CvJMZOvY8BNEkXrKzS99fzgz-8jNTZDn6GcOZp8oPsg,9927
246
- devsecops_engine_tools-1.7.11.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
247
- devsecops_engine_tools-1.7.11.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
248
- devsecops_engine_tools-1.7.11.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
249
- devsecops_engine_tools-1.7.11.dist-info/RECORD,,
245
+ devsecops_engine_tools-1.7.13.dist-info/METADATA,sha256=dmkfv5Qf-s9SoAKRGVC0fYKI3u-Ie-IRHl5E9gsfJrQ,9927
246
+ devsecops_engine_tools-1.7.13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
247
+ devsecops_engine_tools-1.7.13.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
248
+ devsecops_engine_tools-1.7.13.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
249
+ devsecops_engine_tools-1.7.13.dist-info/RECORD,,