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