devsecops-engine-tools 1.92.0__py3-none-any.whl → 1.94.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 (28) hide show
  1. devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py +12 -3
  2. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/cdxgen/__init__.py +0 -0
  3. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/cdxgen/cdxgen.py +123 -0
  4. devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py +1 -1
  5. devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +1 -1
  6. devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py +1 -1
  7. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +1 -1
  8. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +2 -2
  9. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py +10 -69
  10. devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py +11 -0
  11. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/deserializator_gateway.py +1 -1
  12. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py +1 -1
  13. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py +1 -1
  14. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/trivy_tool/__init__.py +0 -0
  15. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py +117 -0
  16. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py +1 -1
  17. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +0 -1
  18. devsecops_engine_tools/engine_utilities/trivy_utils/__init__.py +0 -0
  19. devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/__init__.py +0 -0
  20. devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/driven_adapters/__init__.py +0 -0
  21. devsecops_engine_tools/{engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool → engine_utilities/trivy_utils/infrastructure/driven_adapters}/trivy_deserialize_output.py +3 -3
  22. devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/driven_adapters/trivy_manager_scan_utils.py +73 -0
  23. devsecops_engine_tools/version.py +1 -1
  24. {devsecops_engine_tools-1.92.0.dist-info → devsecops_engine_tools-1.94.0.dist-info}/METADATA +6 -2
  25. {devsecops_engine_tools-1.92.0.dist-info → devsecops_engine_tools-1.94.0.dist-info}/RECORD +28 -20
  26. {devsecops_engine_tools-1.92.0.dist-info → devsecops_engine_tools-1.94.0.dist-info}/WHEEL +0 -0
  27. {devsecops_engine_tools-1.92.0.dist-info → devsecops_engine_tools-1.94.0.dist-info}/entry_points.txt +0 -0
  28. {devsecops_engine_tools-1.92.0.dist-info → devsecops_engine_tools-1.94.0.dist-info}/top_level.txt +0 -0
@@ -22,7 +22,13 @@ from devsecops_engine_tools.engine_core.src.infrastructure.driven_adapters.aws.s
22
22
  from devsecops_engine_tools.engine_core.src.infrastructure.driven_adapters.printer_pretty_table.printer_pretty_table import (
23
23
  PrinterPrettyTable,
24
24
  )
25
- from devsecops_engine_tools.engine_core.src.infrastructure.driven_adapters.syft.syft import Syft
25
+ from devsecops_engine_tools.engine_core.src.infrastructure.driven_adapters.syft.syft import (
26
+ Syft
27
+ )
28
+ from devsecops_engine_tools.engine_core.src.infrastructure.driven_adapters.cdxgen.cdxgen import (
29
+ CdxGen
30
+ )
31
+
26
32
  import sys
27
33
  import argparse
28
34
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
@@ -225,7 +231,7 @@ def get_inputs_from_cli(args):
225
231
  "engine_iac": ["checkov", "kics", "kubescape"],
226
232
  "engine_secret": ["trufflehog", "gitleaks"],
227
233
  "engine_container": ["prisma", "trivy"],
228
- "engine_dependencies": ["xray", "dependency_check"],
234
+ "engine_dependencies": ["xray", "dependency_check", "trivy"],
229
235
  "engine_code": ["bearer"],
230
236
  "engine_dast": ["nuclei"],
231
237
  "engine_risk": None,
@@ -285,7 +291,10 @@ def application_core():
285
291
  }.get(args["remote_config_source"])
286
292
  metrics_manager_gateway = S3Manager()
287
293
  printer_table_gateway = PrinterPrettyTable()
288
- sbom_tool_gateway = Syft()
294
+ sbom_tool_gateway = {
295
+ "syft": Syft(),
296
+ "cdxgen": CdxGen()
297
+ }
289
298
 
290
299
  init_engine_core(
291
300
  vulnerability_management_gateway,
@@ -0,0 +1,123 @@
1
+ from dataclasses import dataclass
2
+ import requests
3
+ import subprocess
4
+ import platform
5
+
6
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.sbom_manager import (
7
+ SbomManagerGateway,
8
+ )
9
+ from devsecops_engine_tools.engine_utilities.sbom.deserealizator import (
10
+ get_list_component,
11
+ )
12
+ from devsecops_engine_tools.engine_core.src.domain.model.component import (
13
+ Component,
14
+ )
15
+
16
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
17
+ from devsecops_engine_tools.engine_utilities import settings
18
+
19
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
20
+
21
+
22
+ @dataclass
23
+ class CdxGen(SbomManagerGateway):
24
+
25
+ def get_components(self, artifact, config, service_name) -> "list[Component]":
26
+ try:
27
+ cdxgen_version = config["CDXGEN"]["CDXGEN_VERSION"]
28
+ slim = "-slim" if config["CDXGEN"]["SLIM_BINARY"] else ""
29
+ os_platform = platform.system()
30
+ base_url = (
31
+ f"https://github.com/CycloneDX/cdxgen/releases/download/v{cdxgen_version}/"
32
+ )
33
+
34
+ command_prefix = "cdxgen"
35
+ if os_platform == "Linux":
36
+ file = f"cdxgen-linux-amd64{slim}"
37
+ command_prefix = self._install_tool_unix(
38
+ file, base_url + file, command_prefix
39
+ )
40
+ elif os_platform == "Darwin":
41
+ file = f"cdxgen-darwin-amd64{slim}"
42
+ command_prefix = self._install_tool_unix(
43
+ file, base_url + file, command_prefix
44
+ )
45
+ elif os_platform == "Windows":
46
+ file = f"cdxgen-windows-amd64{slim}.exe"
47
+ command_prefix = self._install_tool_windows(
48
+ file, base_url + file, "cdxgen.exe"
49
+ )
50
+ else:
51
+ logger.warning(f"{os_platform} is not supported.")
52
+ return None
53
+
54
+ result_sbom = self._run_cdxgen(command_prefix, artifact, service_name)
55
+ return get_list_component(result_sbom, config["CDXGEN"]["OUTPUT_FORMAT"])
56
+ except Exception as e:
57
+ logger.error(f"Error generating SBOM: {e}")
58
+ return None
59
+
60
+ def _run_cdxgen(self, command_prefix, artifact, service_name):
61
+ result_file = f"{service_name}_SBOM.json"
62
+ command = [
63
+ command_prefix,
64
+ artifact,
65
+ "-o",
66
+ result_file,
67
+ ]
68
+
69
+ try:
70
+ subprocess.run(
71
+ command,
72
+ check=True,
73
+ stdout=subprocess.PIPE,
74
+ stderr=subprocess.PIPE,
75
+ text=True,
76
+ )
77
+ print(f"SBOM generated and saved to: {result_file}")
78
+ return result_file
79
+ except Exception as e:
80
+ logger.error(f"Error running cdxgen: {e}")
81
+
82
+ def _install_tool_unix(self, file, url, command_prefix):
83
+ installed = subprocess.run(
84
+ ["which", command_prefix],
85
+ stdout=subprocess.PIPE,
86
+ stderr=subprocess.PIPE,
87
+ )
88
+ if installed.returncode == 1:
89
+ try:
90
+ self._download_tool(file, url)
91
+ subprocess.run(
92
+ ["chmod", "+x", f"./{file}"],
93
+ stdout=subprocess.PIPE,
94
+ stderr=subprocess.PIPE,
95
+ )
96
+ return f"./{file}"
97
+ except Exception as e:
98
+ logger.error(f"Error installing cdxgen: {e}")
99
+ else:
100
+ return installed.stdout.decode("utf-8").strip()
101
+
102
+ def _install_tool_windows(self, file, url, command_prefix):
103
+ try:
104
+ installed = subprocess.run(
105
+ [command_prefix, "--version"],
106
+ stdout=subprocess.PIPE,
107
+ stderr=subprocess.PIPE,
108
+ )
109
+ return installed.stdout.decode("utf-8").strip()
110
+ except:
111
+ try:
112
+ self._download_tool(file, url)
113
+ return f"{file}"
114
+ except Exception as e:
115
+ logger.error(f"Error installing cdxgen: {e}")
116
+
117
+ def _download_tool(self, file, url):
118
+ try:
119
+ response = requests.get(url, allow_redirects=True)
120
+ with open(file, "wb") as compress_file:
121
+ compress_file.write(response.content)
122
+ except Exception as e:
123
+ logger.error(f"Error downloading cdxgen: {e}")
@@ -14,7 +14,6 @@ from devsecops_engine_tools.engine_utilities.utils.printers import (
14
14
  Printers,
15
15
  )
16
16
 
17
-
18
17
  def init_engine_core(
19
18
  vulnerability_management_gateway: any,
20
19
  secrets_manager_gateway: any,
@@ -29,6 +28,7 @@ def init_engine_core(
29
28
  args["remote_config_repo"], "/engine_core/ConfigTool.json", args["remote_config_branch"]
30
29
  )
31
30
  Printers.print_logo_tool(config_tool["BANNER"])
31
+ sbom_tool_gateway = sbom_tool_gateway.get(config_tool["SBOM_MANAGER"]["TOOL"].lower())
32
32
 
33
33
  if config_tool[args["module"].upper()]["ENABLED"]:
34
34
  if args["module"] == "engine_risk":
@@ -13,7 +13,7 @@ from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.drive
13
13
  from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.trivy_tool.trivy_manager_scan import (
14
14
  TrivyScan,
15
15
  )
16
- from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.trivy_tool.trivy_deserialize_output import (
16
+ from devsecops_engine_tools.engine_utilities.trivy_utils.infrastructure.driven_adapters.trivy_deserialize_output import (
17
17
  TrivyDeserializator,
18
18
  )
19
19
 
@@ -7,7 +7,7 @@ from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.context
7
7
 
8
8
  class DeseralizatorGateway(metaclass=ABCMeta):
9
9
  @abstractmethod
10
- def get_list_findings(self, results_scan_list: list) -> "list[Finding]":
10
+ def get_list_findings(self, results_scan_list: str) -> "list[Finding]":
11
11
  "Deseralizator"
12
12
 
13
13
  @abstractmethod
@@ -133,7 +133,7 @@ class ContainerScaScan:
133
133
  if context_flag == "true":
134
134
  self.tool_deseralizator.get_container_context_from_results(image_scanned)
135
135
 
136
- return self.tool_deseralizator.get_list_findings(image_scanned)
136
+ return self.tool_deseralizator.get_list_findings(image_scanned, module="engine_container")
137
137
 
138
138
  def _get_image(self, image_to_scan):
139
139
  """
@@ -12,7 +12,7 @@ import json
12
12
 
13
13
  @dataclass
14
14
  class PrismaDeserealizator(DeseralizatorGateway):
15
- def get_list_findings(self, image_scanned) -> "list[Finding]":
15
+ def get_list_findings(self, image_scanned, module="engine_container") -> "list[Finding]":
16
16
  list_open_vulnerabilities = []
17
17
  SEVERITY_MAP = {
18
18
  "unimportant": "low",
@@ -55,7 +55,7 @@ class PrismaDeserealizator(DeseralizatorGateway):
55
55
  published_date_cve=vul.get("publishedDate", "").replace(
56
56
  "Z", "+00:00"
57
57
  ),
58
- module="engine_container",
58
+ module=module,
59
59
  category=Category.VULNERABILITY,
60
60
  requirements=vul.get("status", ""),
61
61
  tool="PrismaCloud",
@@ -1,66 +1,20 @@
1
1
  from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.tool_gateway import (
2
2
  ToolGateway,
3
3
  )
4
-
5
- import subprocess
6
- import platform
7
- import requests
8
- import tarfile
9
- import zipfile
10
- import json
11
-
12
- from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
13
- from devsecops_engine_tools.engine_utilities import settings
14
-
15
4
  from devsecops_engine_tools.engine_utilities.sbom.deserealizator import (
16
5
  get_list_component,
17
6
  )
7
+ from devsecops_engine_tools.engine_utilities.trivy_utils.infrastructure.driven_adapters.trivy_manager_scan_utils import (
8
+ TrivyManagerScanUtils
9
+ )
10
+ import subprocess
11
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
12
+ from devsecops_engine_tools.engine_utilities import settings
18
13
 
19
14
  logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
20
15
 
21
16
 
22
17
  class TrivyScan(ToolGateway):
23
- def download_tool(self, file, url):
24
- try:
25
- response = requests.get(url, allow_redirects=True)
26
- with open(file, "wb") as compress_file:
27
- compress_file.write(response.content)
28
- except Exception as e:
29
- logger.error(f"Error downloading trivy: {e}")
30
-
31
- def install_tool(self, file, url, command_prefix):
32
- installed = subprocess.run(
33
- ["which", command_prefix],
34
- stdout=subprocess.PIPE,
35
- stderr=subprocess.PIPE,
36
- )
37
- if installed.returncode == 1:
38
- try:
39
- self.download_tool(file, url)
40
- with tarfile.open(file, 'r:gz') as tar_file:
41
- tar_file.extract(member=tar_file.getmember("trivy"))
42
- return "./trivy"
43
- except Exception as e:
44
- logger.error(f"Error installing trivy: {e}")
45
- else:
46
- return installed.stdout.decode().strip()
47
-
48
- def install_tool_windows(self, file, url, command_prefix):
49
- try:
50
- subprocess.run(
51
- [command_prefix, "--version"],
52
- stdout=subprocess.PIPE,
53
- stderr=subprocess.PIPE,
54
- )
55
- return command_prefix
56
- except:
57
- try:
58
- self.download_tool(file, url)
59
- with zipfile.ZipFile(file, 'r') as zip_file:
60
- zip_file.extract(member="trivy.exe")
61
- return "./trivy.exe"
62
- except Exception as e:
63
- logger.error(f"Error installing trivy: {e}")
64
18
 
65
19
  def scan_image(self, prefix, image_name, result_file, base_image, is_compressed_file=False):
66
20
  command = [
@@ -123,24 +77,11 @@ class TrivyScan(ToolGateway):
123
77
  logger.error(f"Error generating SBOM: {e}")
124
78
 
125
79
  def run_tool_container_sca(self, remoteconfig, secret_tool, token_engine_container, image_name, result_file, base_image, exclusions, generate_sbom, is_compressed_file=False):
126
- trivy_version = remoteconfig["TRIVY"]["TRIVY_VERSION"]
127
- os_platform = platform.system()
128
- arch_platform = platform.architecture()[0]
129
- base_url = f"https://github.com/aquasecurity/trivy/releases/download/v{trivy_version}/"
80
+ trivy_version = remoteconfig["TRIVY"]["TRIVY_VERSION"]
81
+ command_prefix = TrivyManagerScanUtils().identify_os_and_install(trivy_version)
130
82
  sbom_components = None
131
-
132
- command_prefix = "trivy"
133
- if os_platform == "Linux":
134
- file=f"trivy_{trivy_version}_Linux-{arch_platform}.tar.gz"
135
- command_prefix = self.install_tool(file, base_url+file, "trivy")
136
- elif os_platform == "Darwin":
137
- file=f"trivy_{trivy_version}_macOS-{arch_platform}.tar.gz"
138
- command_prefix = self.install_tool(file, base_url+file, "trivy")
139
- elif os_platform == "Windows":
140
- file=f"trivy_{trivy_version}_windows-{arch_platform}.zip"
141
- command_prefix = self.install_tool_windows(file, base_url+file, "trivy.exe")
142
- else:
143
- logger.warning(f"{os_platform} is not supported.")
83
+
84
+ if not command_prefix:
144
85
  return None
145
86
 
146
87
  image_scanned = (
@@ -10,6 +10,12 @@ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.dr
10
10
  from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.driven_adapters.dependency_check.dependency_check_deserialize import (
11
11
  DependencyCheckDeserialize,
12
12
  )
13
+ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.driven_adapters.trivy_tool.trivy_manager_scan import (
14
+ TrivyScanSBOM,
15
+ )
16
+ from devsecops_engine_tools.engine_utilities.trivy_utils.infrastructure.driven_adapters.trivy_deserialize_output import (
17
+ TrivyDeserializator,
18
+ )
13
19
  from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.entry_points.entry_point_tool import (
14
20
  init_engine_dependencies,
15
21
  )
@@ -30,6 +36,11 @@ def runner_engine_dependencies(
30
36
  "tool_deserializator": DependencyCheckDeserialize,
31
37
  "tool_sbom": sbom_tool_gateway
32
38
  },
39
+ "TRIVY": {
40
+ "tool_run": TrivyScanSBOM,
41
+ "tool_deserializator": TrivyDeserializator,
42
+ "tool_sbom": sbom_tool_gateway
43
+ }
33
44
  }
34
45
 
35
46
  selected_tool = config_tool["ENGINE_DEPENDENCIES"]["TOOL"]
@@ -4,5 +4,5 @@ from devsecops_engine_tools.engine_core.src.domain.model.finding import Finding
4
4
 
5
5
  class DeserializatorGateway(metaclass=ABCMeta):
6
6
  @abstractmethod
7
- def get_list_findings(self, results_scan_file, remote_config) -> "list[Finding]":
7
+ def get_list_findings(self, results_scan_file) -> "list[Finding]":
8
8
  "Deserializator"
@@ -61,4 +61,4 @@ class DependenciesScan:
61
61
  Process the results deserializer.
62
62
  Terun: list: Deserialized list of findings.
63
63
  """
64
- return self.tool_deserializator.get_list_findings(dependencies_scanned, self.remote_config)
64
+ return self.tool_deserializator.get_list_findings(dependencies_scanned, remote_config=self.remote_config, module="engine_dependencies")
@@ -20,7 +20,7 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
20
20
  class DependencyCheckDeserialize(DeserializatorGateway):
21
21
  TOOL = "DEPENDENCY_CHECK"
22
22
 
23
- def get_list_findings(self, dependencies_scanned_file, remote_config) -> "list[Finding]":
23
+ def get_list_findings(self, dependencies_scanned_file, remote_config={}, module="") -> "list[Finding]":
24
24
  dependencies, namespace = self.filter_vulnerabilities_by_confidence(dependencies_scanned_file, remote_config)
25
25
  list_open_vulnerabilities = []
26
26
 
@@ -0,0 +1,117 @@
1
+ from devsecops_engine_tools.engine_sca.engine_dependencies.src.domain.model.gateways.tool_gateway import (
2
+ ToolGateway,
3
+ )
4
+ from devsecops_engine_tools.engine_sca.engine_dependencies.src.domain.model.context_dependencies import (
5
+ ContextDependencies,
6
+ )
7
+ from devsecops_engine_tools.engine_utilities.trivy_utils.infrastructure.driven_adapters.trivy_manager_scan_utils import (
8
+ TrivyManagerScanUtils
9
+ )
10
+ import os
11
+ import json
12
+ import subprocess
13
+ from dataclasses import asdict
14
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
15
+ from devsecops_engine_tools.engine_utilities import settings
16
+
17
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
18
+
19
+
20
+ class TrivyScanSBOM(ToolGateway):
21
+ def run_tool_dependencies_sca(
22
+ self,
23
+ remote_config,
24
+ dict_args,
25
+ exclusion,
26
+ pipeline_name,
27
+ to_scan,
28
+ secret_tool,
29
+ token_engine_dependencies,
30
+ **kwargs,
31
+ ):
32
+ trivy_version = remote_config["TRIVY"]["CLI_VERSION"]
33
+ command_prefix = TrivyManagerScanUtils().identify_os_and_install(trivy_version)
34
+ sbom = f"{pipeline_name}_SBOM.json"
35
+
36
+ if not command_prefix:
37
+ return None
38
+
39
+ if not os.path.exists(sbom):
40
+ raise FileNotFoundError("SBOM file not found, enable SBOM generation to scan with Trivy.")
41
+
42
+ dependencies_scanned = self._scan_dependencies_sbom(command_prefix, sbom)
43
+
44
+ return dependencies_scanned
45
+
46
+ def get_dependencies_context_from_results(
47
+ self,
48
+ path_file_results,
49
+ remote_config
50
+ ):
51
+ dependencies_container_list = []
52
+
53
+ with open(path_file_results, "rb") as file:
54
+ image_object = file.read()
55
+ json_data = json.loads(image_object)
56
+
57
+ results = json_data.get("Results", [])
58
+
59
+ for result in results:
60
+ vulnerabilities = result.get("Vulnerabilities", [])
61
+ for vul in vulnerabilities:
62
+ context_container = ContextDependencies(
63
+ cve_id=[vul.get("VulnerabilityID", "unknown")],
64
+ severity=vul.get("Severity", "unknown").lower(),
65
+ component=vul.get("PkgID", "unknown"),
66
+ package_name=vul.get("PkgName", "unknown"),
67
+ installed_version=vul.get("InstalledVersion", "unknown"),
68
+ fixed_version=vul.get("FixedVersion", "unknown").split(", "),
69
+ impact_paths=[],
70
+ description=vul.get("Description", "unknown").replace("\n", ""),
71
+ references=vul.get("References", "unknown"),
72
+ source_tool="Trivy"
73
+ )
74
+ dependencies_container_list.append(context_container)
75
+
76
+ print("===== BEGIN CONTEXT OUTPUT =====")
77
+ print(
78
+ json.dumps(
79
+ {
80
+ "dependencies_context": [
81
+ asdict(context) for context in dependencies_container_list
82
+ ]
83
+ },
84
+ indent=2,
85
+ )
86
+ )
87
+ print("===== END CONTEXT OUTPUT =====")
88
+
89
+ def _scan_dependencies_sbom(self, command_prefix, sbom_path):
90
+ result_file = f"{sbom_path.replace('.json', '')}_scan_result.json"
91
+
92
+ command = [
93
+ command_prefix,
94
+ "sbom",
95
+ sbom_path,
96
+ "-f",
97
+ "json",
98
+ "--scanners",
99
+ "vuln",
100
+ "-o",
101
+ result_file,
102
+ ]
103
+
104
+ try:
105
+ subprocess.run(
106
+ command,
107
+ check=True,
108
+ stdout=subprocess.PIPE,
109
+ stderr=subprocess.PIPE,
110
+ text=True,
111
+ )
112
+ print(f"The SBOM {sbom_path} was scanned")
113
+
114
+ return result_file
115
+
116
+ except Exception as e:
117
+ logger.error(f"Error during SBOM scan of {sbom_path}: {e}")
@@ -46,7 +46,7 @@ class XrayDeserializator(DeserializatorGateway):
46
46
  ]
47
47
  return vulnerabilities
48
48
 
49
- def get_list_findings(self, dependencies_scanned_file, remote_config) -> "list[Finding]":
49
+ def get_list_findings(self, dependencies_scanned_file, remote_config={}, module="") -> "list[Finding]":
50
50
  list_open_vulnerabilities = []
51
51
  with open(dependencies_scanned_file, "rb") as file:
52
52
  json_data = json.loads(file.read())
@@ -77,7 +77,6 @@ def init_engine_dependencies(
77
77
  secret_tool,
78
78
  build_id,
79
79
  build_url
80
-
81
80
  )
82
81
  if config_sbom["ENABLED"] and any(
83
82
  branch in str(tool_remote.get_variable("branch_tag"))
@@ -16,7 +16,7 @@ from datetime import datetime, timezone
16
16
  @dataclass
17
17
  class TrivyDeserializator(DeseralizatorGateway):
18
18
 
19
- def get_list_findings(self, image_scanned) -> "list[Finding]":
19
+ def get_list_findings(self, image_scanned, remote_config={}, module="") -> "list[Finding]":
20
20
  list_open_vulnerabilities = []
21
21
  with open(image_scanned, "rb") as file:
22
22
  image_object = file.read()
@@ -36,13 +36,13 @@ class TrivyDeserializator(DeseralizatorGateway):
36
36
  )
37
37
  ),
38
38
  where=vul.get("PkgName", "")
39
- + " "
39
+ + ":"
40
40
  + vul.get("InstalledVersion", ""),
41
41
  description=vul.get("Description", "").replace("\n", "")[:150],
42
42
  severity=vul.get("Severity", "").lower(),
43
43
  identification_date=datetime.now().strftime("%Y-%m-%dT%H:%M:%S%z"),
44
44
  published_date_cve=self._check_date_format(vul),
45
- module="engine_container",
45
+ module=module,
46
46
  category=Category.VULNERABILITY,
47
47
  requirements=vul.get("FixedVersion") or vul.get("Status", ""),
48
48
  tool="Trivy",
@@ -0,0 +1,73 @@
1
+ import subprocess
2
+ import platform
3
+ import requests
4
+ import tarfile
5
+ import zipfile
6
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
7
+ from devsecops_engine_tools.engine_utilities import settings
8
+
9
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
10
+
11
+ class TrivyManagerScanUtils():
12
+ def identify_os_and_install(self, trivy_version):
13
+ os_platform = platform.system()
14
+ arch_platform = platform.architecture()[0]
15
+ base_url = f"https://github.com/aquasecurity/trivy/releases/download/v{trivy_version}/"
16
+
17
+ command_prefix = "trivy"
18
+ if os_platform == "Linux":
19
+ file=f"trivy_{trivy_version}_Linux-{arch_platform}.tar.gz"
20
+ command_prefix = self._install_tool(file, base_url+file, "trivy")
21
+ elif os_platform == "Darwin":
22
+ file=f"trivy_{trivy_version}_macOS-{arch_platform}.tar.gz"
23
+ command_prefix = self._install_tool(file, base_url+file, "trivy")
24
+ elif os_platform == "Windows":
25
+ file=f"trivy_{trivy_version}_windows-{arch_platform}.zip"
26
+ command_prefix = self._install_tool_windows(file, base_url+file, "trivy.exe")
27
+ else:
28
+ logger.warning(f"{os_platform} is not supported.")
29
+ return None
30
+
31
+ return command_prefix
32
+
33
+ def _install_tool(self, file, url, command_prefix):
34
+ installed = subprocess.run(
35
+ ["which", command_prefix],
36
+ stdout=subprocess.PIPE,
37
+ stderr=subprocess.PIPE,
38
+ )
39
+ if installed.returncode == 1:
40
+ try:
41
+ self._download_tool(file, url)
42
+ with tarfile.open(file, 'r:gz') as tar_file:
43
+ tar_file.extract(member=tar_file.getmember("trivy"))
44
+ return "./trivy"
45
+ except Exception as e:
46
+ logger.error(f"Error installing trivy: {e}")
47
+ else:
48
+ return installed.stdout.decode().strip()
49
+
50
+ def _install_tool_windows(self, file, url, command_prefix):
51
+ try:
52
+ subprocess.run(
53
+ [command_prefix, "--version"],
54
+ stdout=subprocess.PIPE,
55
+ stderr=subprocess.PIPE,
56
+ )
57
+ return command_prefix
58
+ except:
59
+ try:
60
+ self._download_tool(file, url)
61
+ with zipfile.ZipFile(file, 'r') as zip_file:
62
+ zip_file.extract(member="trivy.exe")
63
+ return "./trivy.exe"
64
+ except Exception as e:
65
+ logger.error(f"Error installing trivy: {e}")
66
+
67
+ def _download_tool(self, file, url):
68
+ try:
69
+ response = requests.get(url, allow_redirects=True)
70
+ with open(file, "wb") as compress_file:
71
+ compress_file.write(response.content)
72
+ except Exception as e:
73
+ logger.error(f"Error downloading trivy: {e}")
@@ -1 +1 @@
1
- version = '1.92.0'
1
+ version = '1.94.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.92.0
3
+ Version: 1.94.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
@@ -165,7 +165,7 @@ For more information visit [here](https://github.com/bancolombia/devsecops-engin
165
165
  <td>Free</td>
166
166
  </tr>
167
167
  <tr>
168
- <td rowspan="2">ENGINE_DEPENDENCIES</td>
168
+ <td rowspan="3">ENGINE_DEPENDENCIES</td>
169
169
  <td><a href="https://jfrog.com/help/r/get-started-with-the-jfrog-platform/jfrog-xray">XRAY</a></td>
170
170
  <td>Paid</td>
171
171
  </tr>
@@ -173,6 +173,10 @@ For more information visit [here](https://github.com/bancolombia/devsecops-engin
173
173
  <td><a href="https://owasp.org/www-project-dependency-check/">DEPENDENCY CHECK</a></td>
174
174
  <td>Free</td>
175
175
  </tr>
176
+ <tr>
177
+ <td><a href="https://trivy.dev/">TRIVY</a></td>
178
+ <td>Free</td>
179
+ </tr>
176
180
  <tr>
177
181
  <td>ENGINE_CODE</td>
178
182
  <td><a href="https://docs.bearer.com/quickstart/">BEARER</a></td>
@@ -1,9 +1,9 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=FeVSuxqtPUNlpG-piPV3vN-uMENWSK-k4OamGUwT6Ao,19
2
+ devsecops_engine_tools/version.py,sha256=eNcZCyl-uCRfczTLkT2ERSgVSyemEGZ0Vosk_-IPdpU,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
6
- devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py,sha256=sacJDgi_oPUIWUfO6vrg1kDvjpbeLzfGHgqL3xwcGao,10586
6
+ devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py,sha256=9XDqzFekR_QYKYq7D8lMM1tTZY_lmqDiLosOawxmgCY,10779
7
7
  devsecops_engine_tools/engine_core/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  devsecops_engine_tools/engine_core/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  devsecops_engine_tools/engine_core/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -37,6 +37,8 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_man
37
37
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=ELihQBgSPH4f9QCyg2dgjudsFitaqgdsljnVOmaA_v4,1972
38
38
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=dKe8hno53uC7JDzRWeBdBeRbDHAasEYLxVaFSvWUVxU,5863
40
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/cdxgen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/cdxgen/cdxgen.py,sha256=t1CTeQG2ePBwUdeNinSYEi3vyMjufD0KuHUIxRZCsAU,4370
40
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
43
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=ZjtlXKAhAwHCSJTkA2X0Z-4utoCY6lvipqYJ6gkk6OU,32417
42
44
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -50,7 +52,7 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_lo
50
52
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/syft/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
53
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/syft/syft.py,sha256=hP5MitHTeZf3Ia-xwi5bUdIU5hIwbUNuDSzcsqlxG5c,4457
52
54
  devsecops_engine_tools/engine_core/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py,sha256=9SykudY1IljqXEho5hjRIwArsUfHueP4nJBXnSrbc14,2537
55
+ devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py,sha256=BjA2jQfWpZrCfk9tpaZFL2A8dSKj26p-zIP61GBLqXk,2627
54
56
  devsecops_engine_tools/engine_core/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
57
  devsecops_engine_tools/engine_core/src/infrastructure/helpers/aws.py,sha256=wfy_PosHS0rrvkdiUYczxIcc8ZNwfqzWwqVxrmRTCBI,264
56
58
  devsecops_engine_tools/engine_core/src/infrastructure/helpers/util.py,sha256=lDtaozInb5m2R8Y-oGQasroksCRw_N_Ltz7gLkSguX8,380
@@ -202,18 +204,18 @@ devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
202
204
  devsecops_engine_tools/engine_sca/engine_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
203
205
  devsecops_engine_tools/engine_sca/engine_container/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
204
206
  devsecops_engine_tools/engine_sca/engine_container/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py,sha256=rUO10c5exTgxta1rtxPRfkNTc8863lr7VgqYcalwEu4,1803
207
+ devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py,sha256=c502JhazBATZ-KInPk4WD1UqeFTlXh0vE7r742f_VP4,1789
206
208
  devsecops_engine_tools/engine_sca/engine_container/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
209
  devsecops_engine_tools/engine_sca/engine_container/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
210
  devsecops_engine_tools/engine_sca/engine_container/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
211
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
212
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/context_container.py,sha256=_BSNeHSWJHS-G1pdkOvrO2fA2UTUlI8N3KYEUI3Uh-c,602
211
213
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py,sha256=AVPZvwwhV-Vns7cM58vHzd4_no2xSdzHUKiI6-2lpNM,576
214
+ devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py,sha256=axkx5wKgMoz1_wBxpsoS2a-27hTiqUB6Y0_ExB54W0A,575
213
215
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/images_gateway.py,sha256=-bsTPQW6m6aVJ1NsWC0gQnmhsYMhsNL7HpC0ONvjJjU,648
214
216
  devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/tool_gateway.py,sha256=HdBGR0QnSCiDlj9bKk6Q55jr9tc65bXbVYIqbWBCy0s,312
215
217
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=nCdt4tuh9cfMa6PNIun7GNiS5AOBkmDENlHCLB5rJ7w,7232
218
+ devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py,sha256=4m9IQA6tXxeSK3GvQANgBbWAoTc4JHTeX1KdShfNhJ8,7259
217
219
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=4wgBTQSDE-C5v01C3Vxzeq0DJKZUSqQ5TVLG7yPZPKs,926
218
220
  devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=A5PpY0li7Pil2vPMpOHi0kkliqCxGbpQyBcB9VKyx5c,2904
219
221
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -222,39 +224,40 @@ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_ada
222
224
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=VvkRP1knlRGUa6PE2zKTeByQuJVW27PF2FJ0zRy2TDA,6371
223
225
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
224
226
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=Un0YmZeGh3LpOHiq6872lphD15cf02R9hwBUiHVuhCM,7848
225
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=Eb7eRLyKQizPvaeX9uH8E1wxIKXCaAyNKUpmldw_iL8,2680
227
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=FXb0jUReJVUdZq_H_Zz-gCueMmWf0AwMiwJB-Ceqv2A,2695
226
228
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
227
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=f74mfDkzA7MD7QsaG-LDbcc2fX9nMvHHp-AkrcBg-h0,5294
228
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=pX5jGm218sLJDjFDW-KPU5hZCkxtvc4dj_heSrzsReQ,5478
229
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=WiVqnlLHRt5Ab5xIxdLCQRfas_HW8-j4tDkZKo_GdPM,3241
229
230
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
231
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=MCBVnUxfjnax2stjn9ByM0Hy9LQ9vAMK9GZkOk3ex9M,3077
231
232
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
233
  devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
233
234
  devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
234
235
  devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py,sha256=FHHb7wq7bBCdSTwkPExChE5OUL7GdF7U_A5_PVUIfHQ,2119
236
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py,sha256=20m2PvpSUGAf27ciJ-Mb612Pyls98qYOb1nmChA3FFA,2609
236
237
  devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
238
  devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
239
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
240
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
240
241
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/context_dependencies.py,sha256=wm_QYNrAWePWsn6YXBtHRriIp1mfx2awuitzuBRwd5o,376
241
242
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
242
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/deserializator_gateway.py,sha256=A4WPW-cNMlitI7-P2L-W2hFUPvIU7Ejk6JxRJGATfwc,301
243
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/deserializator_gateway.py,sha256=WOJbKbeFIbQ0IR6lic2JheTPUJPPzAYsGykU1DiMmHw,286
243
244
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/tool_gateway.py,sha256=78WSYsEzt4394FEURSBmwV1pBztlORXaePFQ6GOZGGk,444
244
245
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py,sha256=F8ro58O475MNwXN2QRvGqcdkYMYb6upeFl8PV6tc-dQ,1979
246
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py,sha256=eLctMrWQmz8GFbLrILpTMtJVsoPtbO9kMQma-xXOHYw,2023
246
247
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/handle_remote_config_patterns.py,sha256=cTM8IQRZJBr5zG5nhCkTxuw2fCHDZ3wrPgQhRjG88pg,968
247
248
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py,sha256=E3-ff4NcyIvPCN5xUV_d0Vh7k1OVXqbPrHzUPJBgmr0,2283
248
249
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
250
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
251
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py,sha256=yT8C4bGIMii8XE8wnJW0bv6NI2DP-fpvGZTnG5H7gSg,8875
252
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py,sha256=V9AacJ0cB3VunoHqys6NM1gpZMB3rJ8CbcFl3MIQqlk,8889
252
253
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=jlz_6bAgCNPKqWgnPow6twOYYMf7ewUh5d1WPwHCrSk,7318
254
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/trivy_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=s1tU8gnA2aiXlXziv54XLLMxYc50XGQpOnImYQtkgC4,3910
253
256
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=ZUk-e1PKzV7uRAT7BpET363pgl2eMnXMCGSpewsOpKg,2236
257
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=JhSRjYL8ND_LnE27KwAoJpVo61pJ47c_v5k98WjMJg8,2250
255
258
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=lYRl76dPzvfossuRJaRFGwTZNdC9wxJ23AivZdp9nhM,11608
256
259
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=t2nAJ86ZyL6nz_tdrcWZ3cf5pnXhJ_q1AfVAbNhcrSk,3772
260
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=atIp2svHXoPw8hZM6zTPp8dPcMqTlD3Q23TfEh9ECC0,3771
258
261
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
259
262
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=ECczGxi-neekJAJkMBaRCE_1NTqmcv-5tB90F3GKz7w,5234
260
263
  devsecops_engine_tools/engine_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -351,6 +354,11 @@ devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/helpers/__i
351
354
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/helpers/utils.py,sha256=SGOWrkzQrvOt9bRhhSfgiMzj1695e1W0B9ox9C1ihQI,294
352
355
  devsecops_engine_tools/engine_utilities/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
353
356
  devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py,sha256=Vvrro2e_YyvtKY9WzPUVOFTd-fiibohcG6wWHjLHAWg,2369
357
+ devsecops_engine_tools/engine_utilities/trivy_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
358
+ devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
359
+ devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
+ devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/driven_adapters/trivy_deserialize_output.py,sha256=a9FM3n_oE9A_6PS6EU6dttBdKQDmoSMDAv3mcpxEpoE,5311
361
+ devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/driven_adapters/trivy_manager_scan_utils.py,sha256=9bUT0V-EFhdik8aNuGTI2i4OnT1YvFT7s7xu5M5sejM,2888
354
362
  devsecops_engine_tools/engine_utilities/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
363
  devsecops_engine_tools/engine_utilities/utils/api_error.py,sha256=yRbad5gNUHh5nALBKkRDi-d98JPmqAhw-QJEGW4psrw,528
356
364
  devsecops_engine_tools/engine_utilities/utils/dataclass_classmethod.py,sha256=S-w6pybVKlyVBhV3HE3IGDvO4ByXxiVePP1JaMnISgM,4302
@@ -360,8 +368,8 @@ devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGax
360
368
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
361
369
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=Z0fdhB3r-dxU0nGSD9zW_B4r2Qol1rUnUCkhFR0U-HQ,487
362
370
  devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=HCjS900TBoNcHrC4LaiP-Kf9frVdtagF130qOUgnO2M,6757
363
- devsecops_engine_tools-1.92.0.dist-info/METADATA,sha256=j-vjgPr62Gi7wIqI9DQ1MDpDtLkQK0myhcCt418qHzw,12218
364
- devsecops_engine_tools-1.92.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
365
- devsecops_engine_tools-1.92.0.dist-info/entry_points.txt,sha256=OWAww5aBsGeMv0kWhSgVNB0ySKKpYuJd4dly0ikFPkc,283
366
- devsecops_engine_tools-1.92.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
367
- devsecops_engine_tools-1.92.0.dist-info/RECORD,,
371
+ devsecops_engine_tools-1.94.0.dist-info/METADATA,sha256=m55XnSwop-muPVV2nnqRIbN3AfDI9bbaxVZNuv8lpHM,12303
372
+ devsecops_engine_tools-1.94.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
373
+ devsecops_engine_tools-1.94.0.dist-info/entry_points.txt,sha256=OWAww5aBsGeMv0kWhSgVNB0ySKKpYuJd4dly0ikFPkc,283
374
+ devsecops_engine_tools-1.94.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
375
+ devsecops_engine_tools-1.94.0.dist-info/RECORD,,