devsecops-engine-tools 1.81.0__py3-none-any.whl → 1.82.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.

@@ -7,45 +7,6 @@ class HandleFilters:
7
7
  self._get_priority_vulnerability(active_findings)
8
8
  return active_findings
9
9
 
10
- def filter_duplicated(self, findings):
11
- unique_findings = []
12
- findings_map = {}
13
-
14
- for finding in findings:
15
- key = (finding.where, tuple(finding.id), finding.vuln_id_from_tool)
16
- if key in findings_map:
17
- existing_finding = findings_map[key]
18
- combined_services = existing_finding.service.split() + [
19
- s
20
- for s in finding.service.split()
21
- if s not in existing_finding.service.split()
22
- ]
23
- combined_vm_ids = existing_finding.vm_id.split() + [
24
- vm
25
- for vm in finding.vm_id.split()
26
- if vm not in existing_finding.vm_id.split()
27
- ]
28
- combined_vm_id_urls = existing_finding.vm_id_url.split() + [
29
- vm_url
30
- for vm_url in finding.vm_id_url.split()
31
- if vm_url not in existing_finding.vm_id_url.split()
32
- ]
33
- if finding.age >= existing_finding.age:
34
- new_finding = copy.deepcopy(finding)
35
- new_finding.service = " ".join(combined_services)
36
- new_finding.vm_id = " ".join(combined_vm_ids)
37
- new_finding.vm_id_url = " ".join(combined_vm_id_urls)
38
- findings_map[key] = new_finding
39
- else:
40
- existing_finding.service = " ".join(combined_services)
41
- existing_finding.vm_id = " ".join(combined_vm_ids)
42
- existing_finding.vm_id_url = " ".join(combined_vm_id_urls)
43
- else:
44
- findings_map[key] = copy.deepcopy(finding)
45
-
46
- unique_findings = list(findings_map.values())
47
- return unique_findings
48
-
49
10
  def filter_tags_days(self, devops_platform_gateway, remote_config, findings):
50
11
  tag_exclusion_days = remote_config["TAG_EXCLUSION_DAYS"]
51
12
  filtered_findings = []
@@ -52,10 +52,8 @@ def init_engine_risk(
52
52
 
53
53
  active_findings = handle_filters.filter(findings)
54
54
 
55
- unique_findings = handle_filters.filter_duplicated(active_findings)
56
-
57
55
  filtered_findings, len_tag_filtered = handle_filters.filter_tags_days(
58
- devops_platform_gateway, remote_config, unique_findings
56
+ devops_platform_gateway, remote_config, active_findings
59
57
  )
60
58
 
61
59
  data_added = AddData(add_epss_gateway, filtered_findings).process()
@@ -142,8 +142,9 @@ class DependencyCheckTool(ToolGateway):
142
142
  pattern = get_artifacts.excluded_files(
143
143
  remote_config, pipeline_name, exclusion, "DEPENDENCY_CHECK"
144
144
  )
145
+ ignore_files = remote_config.get("IGNORE_FILES", [])
145
146
  to_scan = get_artifacts.find_artifacts(
146
- to_scan, pattern, remote_config["DEPENDENCY_CHECK"]["PACKAGES_TO_SCAN"]
147
+ to_scan, pattern, remote_config["DEPENDENCY_CHECK"]["PACKAGES_TO_SCAN"], ignore_files
147
148
  )
148
149
 
149
150
  if not to_scan:
@@ -194,8 +194,9 @@ class XrayScan(ToolGateway):
194
194
  pattern = get_artifacts.excluded_files(
195
195
  remote_config, pipeline_name, exclusion, "XRAY"
196
196
  )
197
+ ignore_files = remote_config.get("IGNORE_FILES", [])
197
198
  to_scan = get_artifacts.find_artifacts(
198
- to_scan, pattern, remote_config["XRAY"]["PACKAGES_TO_SCAN"]
199
+ to_scan, pattern, remote_config["XRAY"]["PACKAGES_TO_SCAN"], ignore_files
199
200
  )
200
201
  cwd = os.getcwd()
201
202
  if not to_scan:
@@ -33,6 +33,25 @@ class GetArtifacts:
33
33
 
34
34
  return pattern
35
35
 
36
+ def filter_ignored_files(self, files_list, ignore_files):
37
+ if not ignore_files:
38
+ return files_list
39
+
40
+ filtered_files = []
41
+ for file_path in files_list:
42
+ should_ignore = False
43
+ file_name = os.path.basename(file_path)
44
+
45
+ for ignore_pattern in ignore_files:
46
+ if (re.search(ignore_pattern, file_name, re.IGNORECASE) or re.search(ignore_pattern, file_path, re.IGNORECASE)):
47
+ should_ignore = True
48
+ break
49
+
50
+ if not should_ignore:
51
+ filtered_files.append(file_path)
52
+
53
+ return filtered_files
54
+
36
55
  def find_packages(self, pattern, packages, working_dir):
37
56
  packages_list = []
38
57
  files_list = []
@@ -69,7 +88,7 @@ class GetArtifacts:
69
88
  shutil.copy2(file, target)
70
89
  logger.debug(f"File to scan: {file}")
71
90
 
72
- def find_artifacts(self, to_scan, pattern, packages):
91
+ def find_artifacts(self, to_scan, pattern, packages, ignore_files=None):
73
92
  dir_to_scan_path = os.path.join(to_scan, "dependencies_to_scan")
74
93
  if os.path.exists(dir_to_scan_path):
75
94
  shutil.rmtree(dir_to_scan_path)
@@ -77,6 +96,11 @@ class GetArtifacts:
77
96
 
78
97
  packages_list, files_list = self.find_packages(pattern, packages, to_scan)
79
98
 
99
+ if ignore_files:
100
+ filtered_files_list = self.filter_ignored_files(files_list, ignore_files)
101
+ else:
102
+ filtered_files_list = files_list
103
+
80
104
  for package in packages_list:
81
105
  tar_path = os.path.join(
82
106
  dir_to_scan_path,
@@ -88,8 +112,8 @@ class GetArtifacts:
88
112
  )
89
113
  self.compress_and_mv(tar_path, package)
90
114
 
91
- if len(files_list):
92
- self.move_files(dir_to_scan_path, files_list)
115
+ if len(filtered_files_list):
116
+ self.move_files(dir_to_scan_path, filtered_files_list)
93
117
 
94
118
  files = os.listdir(dir_to_scan_path)
95
119
  files = [
@@ -102,8 +126,12 @@ class GetArtifacts:
102
126
  file_to_scan = os.path.join(dir_to_scan_path, "file_to_scan.tar")
103
127
  self.compress_and_mv(file_to_scan, dir_to_scan_path)
104
128
  files_string = ", ".join(files)
105
- logger.debug(f"Files to scan: {files_string}")
106
129
  print(f"Files to scan: {files_string}")
130
+
131
+ if ignore_files and len(filtered_files_list) < len(files_list):
132
+ ignored_files = set([os.path.basename(f) for f in files_list if f not in filtered_files_list])
133
+ files_ignore_string = ", ".join(ignored_files)
134
+ print(f"Files ignored: {files_ignore_string}")
107
135
  else:
108
136
  logger.warning("No artifacts found")
109
137
 
@@ -1 +1 @@
1
- version = '1.81.0'
1
+ version = '1.82.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.81.0
3
+ Version: 1.82.0
4
4
  Summary: Tool for DevSecOps strategy
5
5
  Home-page: https://github.com/bancolombia/devsecops-engine-tools
6
6
  Author: Bancolombia DevSecOps Team
@@ -1,5 +1,5 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=u072QCaCtS931pJYi48X385PnfpT9oB1ysIyygRVXh4,19
2
+ devsecops_engine_tools/version.py,sha256=vL5Lm-NSzzA8AwePtmNmf3k1XSspUDxm9fFe5uddV00,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
@@ -104,13 +104,13 @@ devsecops_engine_tools/engine_risk/src/domain/usecases/add_data.py,sha256=4wqDj-
104
104
  devsecops_engine_tools/engine_risk/src/domain/usecases/break_build.py,sha256=nCUvHa4azCfQSdVzoJcyWOn3vzdSlgibzBS2J3Qqfsc,17011
105
105
  devsecops_engine_tools/engine_risk/src/domain/usecases/check_threshold.py,sha256=VYdmcbAuNNvdHCegRfvza7YJ8FHbFNyDosrKJrMW93I,765
106
106
  devsecops_engine_tools/engine_risk/src/domain/usecases/get_exclusions.py,sha256=UNULFNbGAgQKxUQ7buEgL8uIzyVP3GEpGKguDIuZTUc,4113
107
- devsecops_engine_tools/engine_risk/src/domain/usecases/handle_filters.py,sha256=R53fnuIQYfr7YbpMz1BGPJ1d5z9jY_Hnm7EmPt99wlE,3608
107
+ devsecops_engine_tools/engine_risk/src/domain/usecases/handle_filters.py,sha256=vluqHpEgzbsh1fyuE-UX41u2yj8TYiRX3UabiwrEcbw,1810
108
108
  devsecops_engine_tools/engine_risk/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
109
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
110
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
111
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/first_epss_csv.py,sha256=puyoD1csvsJJTmTlJELS97NMoWC4hHAIbYuu916hvQY,2160
112
112
  devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
- devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py,sha256=gBuEYcHVPJv0PEUpBcwsAHXOFn9AUrfn5pIo_PPvIqk,2712
113
+ devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py,sha256=6-qnhftZ8bH0KGt_-KhD1lRO2ft71JaSqAPOiX_e1s0,2639
114
114
  devsecops_engine_tools/engine_risk/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
115
  devsecops_engine_tools/engine_sast/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
116
  devsecops_engine_tools/engine_sast/engine_code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -239,14 +239,14 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init_
239
239
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
240
240
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
241
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py,sha256=yT8C4bGIMii8XE8wnJW0bv6NI2DP-fpvGZTnG5H7gSg,8875
242
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=2gRtoVWbgv-5tdg2fedsGO5a5AI__qjbFHCytu9WMF0,7242
242
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=5KF8gplfB0sqr9i9_dkmeiV6q-diyQWK7JjS59msY4w,7317
243
243
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
244
244
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=ZUk-e1PKzV7uRAT7BpET363pgl2eMnXMCGSpewsOpKg,2236
245
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=Z69iiuMJBYViSsBjTza-n59-jlevI1ydEGpIwifPPWs,11528
245
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=kT4Qwahl4HKVMwwwB3mJS5JlIi2jv3ajGV_8zmGfnhs,11607
246
246
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
247
247
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=t2nAJ86ZyL6nz_tdrcWZ3cf5pnXhJ_q1AfVAbNhcrSk,3772
248
248
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=CpzyUJyO2bRtv6mZJODV5NL5ea79_VRqsYKC0oYDsNU,4077
249
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=ECczGxi-neekJAJkMBaRCE_1NTqmcv-5tB90F3GKz7w,5234
250
250
  devsecops_engine_tools/engine_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
251
  devsecops_engine_tools/engine_utilities/settings.py,sha256=CPnDndwVeRgQNml3HVzvytVruDd8dTd1ICHbkMDSgTM,2144
252
252
  devsecops_engine_tools/engine_utilities/azuredevops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -352,8 +352,8 @@ devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGax
352
352
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
353
353
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=Z0fdhB3r-dxU0nGSD9zW_B4r2Qol1rUnUCkhFR0U-HQ,487
354
354
  devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=HCjS900TBoNcHrC4LaiP-Kf9frVdtagF130qOUgnO2M,6757
355
- devsecops_engine_tools-1.81.0.dist-info/METADATA,sha256=6xNDWSnPe_SKjQIOTdgEWgWNEdYC1FLN22XgK_vwHuI,12093
356
- devsecops_engine_tools-1.81.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
357
- devsecops_engine_tools-1.81.0.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
358
- devsecops_engine_tools-1.81.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
359
- devsecops_engine_tools-1.81.0.dist-info/RECORD,,
355
+ devsecops_engine_tools-1.82.0.dist-info/METADATA,sha256=xQCnIVzAPBfiuoVW3GmVV-eQseZi2B69nsR_L9KhGV8,12093
356
+ devsecops_engine_tools-1.82.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
357
+ devsecops_engine_tools-1.82.0.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
358
+ devsecops_engine_tools-1.82.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
359
+ devsecops_engine_tools-1.82.0.dist-info/RECORD,,