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.
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +8 -1
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +2 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +29 -19
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +14 -13
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +15 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +8 -2
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +4 -4
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +7 -33
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py +10 -45
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +31 -55
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +1 -1
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +24 -28
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +6 -2
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +4 -1
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +29 -11
- devsecops_engine_tools/version.py +1 -1
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/METADATA +1 -1
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/RECORD +21 -21
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/entry_points.txt +0 -0
- {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:
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
59
|
+
return finding_list, file_path_findings
|
|
65
60
|
|
|
66
|
-
def complete_config_tool(self,
|
|
67
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
17
|
+
return finding_list, input_core.set_input_core(file_path_findings)
|
devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py
CHANGED
|
@@ -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,
|
|
21
|
+
def runner_engine_container(dict_args, tool, token, tool_remote):
|
|
22
22
|
try:
|
|
23
|
-
if
|
|
23
|
+
if tool.lower() == "trivy":
|
|
24
24
|
tool_run = TrivyScan()
|
|
25
25
|
tool_deseralizator = TrivyDeserializator()
|
|
26
|
-
elif
|
|
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
|
-
|
|
37
|
+
tool,
|
|
38
38
|
)
|
|
39
39
|
|
|
40
40
|
except Exception as e:
|
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py
CHANGED
|
@@ -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
|
-
|
|
16
|
+
remote_config,
|
|
19
17
|
tool_images: ImagesGateway,
|
|
20
18
|
tool_deseralizator: DeseralizatorGateway,
|
|
21
|
-
|
|
19
|
+
build_id,
|
|
22
20
|
token,
|
|
23
|
-
skip_flag
|
|
24
21
|
):
|
|
25
22
|
self.tool_run = tool_run
|
|
26
|
-
self.
|
|
23
|
+
self.remote_config = remote_config
|
|
27
24
|
self.tool_images = tool_images
|
|
28
25
|
self.tool_deseralizator = tool_deseralizator
|
|
29
|
-
self.
|
|
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.
|
|
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
|
-
|
|
11
|
-
|
|
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.
|
|
40
|
-
if re.match(ignore, self.
|
|
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
|
|
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
|
-
|
|
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,
|
|
12
|
-
self.
|
|
13
|
-
self.
|
|
14
|
-
self.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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.
|
|
64
|
-
self.
|
|
65
|
-
self.
|
|
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.
|
|
72
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
91
|
+
try:
|
|
92
|
+
file_path = os.path.join(
|
|
93
|
+
os.getcwd(), remoteconfig["PRISMA_CLOUD"]["TWISTCLI_PATH"]
|
|
94
|
+
)
|
|
99
95
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
114
|
+
return images_scanned
|
|
119
115
|
|
|
120
|
-
|
|
121
|
-
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
23
|
+
tool,
|
|
20
24
|
):
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
|
|
45
|
+
remote_config,
|
|
29
46
|
tool_images,
|
|
30
47
|
tool_deseralizator,
|
|
31
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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.
|
|
1
|
+
version = '1.7.13'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
devsecops_engine_tools/version.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
117
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
142
|
-
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py,sha256=
|
|
143
|
-
devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py,sha256=
|
|
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=
|
|
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=
|
|
150
|
-
devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
246
|
-
devsecops_engine_tools-1.7.
|
|
247
|
-
devsecops_engine_tools-1.7.
|
|
248
|
-
devsecops_engine_tools-1.7.
|
|
249
|
-
devsecops_engine_tools-1.7.
|
|
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,,
|
|
File without changes
|
{devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.13.dist-info}/top_level.txt
RENAMED
|
File without changes
|