devsecops-engine-tools 1.99.1__py3-none-any.whl → 1.101.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of devsecops-engine-tools might be problematic. Click here for more details.

Files changed (24) hide show
  1. devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py +1 -5
  2. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py +198 -20
  3. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +1 -1
  4. devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/oauth/generic_oauth.py +1 -1
  5. devsecops_engine_tools/engine_risk/src/domain/usecases/break_build.py +1 -1
  6. devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/first_epss_csv.py +1 -2
  7. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/gitleaks/gitleaks_tool.py +1 -1
  8. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +3 -2
  9. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +1 -1
  10. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +1 -2
  11. devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py +7 -7
  12. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py +1 -1
  13. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py +1 -1
  14. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py +1 -1
  15. devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py +6 -2
  16. devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py +0 -1
  17. devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/sonarqube_report.py +0 -2
  18. devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py +7 -3
  19. devsecops_engine_tools/version.py +1 -1
  20. {devsecops_engine_tools-1.99.1.dist-info → devsecops_engine_tools-1.101.0.dist-info}/METADATA +2 -1
  21. {devsecops_engine_tools-1.99.1.dist-info → devsecops_engine_tools-1.101.0.dist-info}/RECORD +24 -24
  22. {devsecops_engine_tools-1.99.1.dist-info → devsecops_engine_tools-1.101.0.dist-info}/WHEEL +0 -0
  23. {devsecops_engine_tools-1.99.1.dist-info → devsecops_engine_tools-1.101.0.dist-info}/entry_points.txt +0 -0
  24. {devsecops_engine_tools-1.99.1.dist-info → devsecops_engine_tools-1.101.0.dist-info}/top_level.txt +0 -0
@@ -117,9 +117,6 @@ class HandleRisk:
117
117
  print(
118
118
  f"Services to exclude: {[engagement.name for engagement in excluded_engagements]}"
119
119
  )
120
- logger.info(
121
- f"Services to exclude: {[engagement.name for engagement in excluded_engagements]}"
122
- )
123
120
 
124
121
  return remaining_engagements
125
122
  return service_list
@@ -226,8 +223,7 @@ class HandleRisk:
226
223
  )
227
224
 
228
225
  for engagement in new_service_list:
229
- print(f"Service to analyze: {engagement.name}, URL: {engagement.vm_url}")
230
- logger.info(
226
+ print(
231
227
  f"Service to analyze: {engagement.name}, URL: {engagement.vm_url}"
232
228
  )
233
229
 
@@ -7,24 +7,126 @@ from devsecops_engine_tools.engine_core.src.infrastructure.helpers.aws import (
7
7
  import boto3
8
8
  import logging
9
9
  import datetime
10
+ import io
11
+ import pyarrow as pa
12
+ import pyarrow.parquet as pq
13
+ import json
10
14
 
11
15
  boto3.set_stream_logger(name="botocore.credentials", level=logging.WARNING)
12
16
 
13
17
 
14
18
  class S3Manager(MetricsManagerGateway):
15
19
 
16
- def _get_s3_data(self, client, bucket, path):
17
- try:
18
- response = client.get_object(
19
- Bucket=bucket,
20
- Key=path,
21
- )
22
- return response["Body"].read().decode("utf-8")
23
- except client.exceptions.NoSuchKey:
24
- return ""
20
+ # ---- Events ----
21
+ event_schema = pa.struct(
22
+ [
23
+ ("timestamp", pa.string()),
24
+ ("level", pa.string()),
25
+ ("message", pa.string()),
26
+ ("module", pa.string()),
27
+ ("funcName", pa.string()),
28
+ ("lineno", pa.int64()),
29
+ ]
30
+ )
31
+
32
+ # ---- Findings Excluded ----
33
+ finding_excluded_schema = pa.struct(
34
+ [
35
+ ("id", pa.string()),
36
+ ("severity", pa.string()),
37
+ ("category", pa.string()),
38
+ ]
39
+ )
40
+
41
+ # ---- Vulnerabilities ----
42
+ vuln_threshold_schema = pa.struct(
43
+ [
44
+ ("critical", pa.int64()),
45
+ ("high", pa.int64()),
46
+ ("medium", pa.int64()),
47
+ ("low", pa.int64()),
48
+ ]
49
+ )
50
+
51
+ vuln_found_schema = pa.struct(
52
+ [
53
+ ("id", pa.string()),
54
+ ("severity", pa.string()),
55
+ ]
56
+ )
57
+
58
+ vulnerabilities_schema = pa.struct(
59
+ [
60
+ ("threshold", vuln_threshold_schema),
61
+ ("status", pa.string()),
62
+ ("found", pa.list_(vuln_found_schema)),
63
+ ]
64
+ )
65
+
66
+ # ---- Compliances ----
67
+ compliances_schema = pa.struct(
68
+ [
69
+ ("threshold", pa.struct([("critical", pa.int64())])),
70
+ ("status", pa.string()),
71
+ ("found", pa.list_(vuln_found_schema)),
72
+ ]
73
+ )
74
+
75
+ # ---- Risk ----
76
+ risk_control_schema = pa.struct(
77
+ [
78
+ ("remediation_rate", pa.float64()),
79
+ ("blacklisted", pa.int64()),
80
+ ("max_risk_score", pa.float64()),
81
+ ]
82
+ )
83
+
84
+ risk_found_schema = pa.struct(
85
+ [
86
+ ("id", pa.string()),
87
+ ("severity", pa.string()),
88
+ ("risk_score", pa.string()),
89
+ ("reason", pa.string()),
90
+ ]
91
+ )
92
+
93
+ risk_schema = pa.struct(
94
+ [
95
+ ("risk_control", risk_control_schema),
96
+ ("status", pa.string()),
97
+ ("found", pa.list_(risk_found_schema)),
98
+ ]
99
+ )
100
+
101
+ # ---- Scan Result ----
102
+ scan_result_schema = pa.struct(
103
+ [
104
+ ("findings_excluded", pa.list_(finding_excluded_schema)),
105
+ ("vulnerabilities", vulnerabilities_schema),
106
+ ("compliances", compliances_schema),
107
+ ("risk", risk_schema),
108
+ ]
109
+ )
110
+
111
+ record_schema = pa.schema(
112
+ [
113
+ ("id", pa.string()),
114
+ ("date", pa.string()),
115
+ ("component", pa.string()),
116
+ ("stage", pa.string()),
117
+ ("check_type", pa.string()),
118
+ ("environment", pa.string()),
119
+ ("events", pa.list_(event_schema)),
120
+ ("scan_result", scan_result_schema),
121
+ ]
122
+ )
25
123
 
26
124
  def send_metrics(self, config_tool, module, file_path):
27
- credentials_role = assume_role(config_tool["METRICS_MANAGER"]["AWS"]["ROLE_ARN"]) if config_tool["METRICS_MANAGER"]["AWS"]["USE_ROLE"] else None
125
+ credentials_role = (
126
+ assume_role(config_tool["METRICS_MANAGER"]["AWS"]["ROLE_ARN"])
127
+ if config_tool["METRICS_MANAGER"]["AWS"]["USE_ROLE"]
128
+ else None
129
+ )
28
130
  session = boto3.session.Session()
29
131
 
30
132
  if credentials_role:
@@ -38,20 +140,96 @@ class S3Manager(MetricsManagerGateway):
38
140
  else:
39
141
  client = session.client(
40
142
  service_name="s3",
41
- region_name=config_tool["METRICS_MANAGER"]["AWS"]["REGION_NAME"]
143
+ region_name=config_tool["METRICS_MANAGER"]["AWS"]["REGION_NAME"],
42
144
  )
43
145
  date = datetime.datetime.now()
44
- path_bucket = f'engine_tools/{module}/{date.strftime("%Y")}/{date.strftime("%m")}/{date.strftime("%d")}/{file_path.split("/")[-1]}'
146
+ type_format = config_tool["METRICS_MANAGER"]["AWS"]["TYPE_FORMAT_BUCKET_FILE"]
147
+ path_bucket_metrics = config_tool["METRICS_MANAGER"]["AWS"]["PATH_BUCKET"]
148
+ filename = file_path.split("/")[-1]
149
+ base_path = f"{path_bucket_metrics}/module={module}/year={date:%Y}/month={date:%m}" if type_format == "parquet" else f"{path_bucket_metrics}/{module}/{date:%Y}/{date:%m}/{date:%d}"
150
+ path_bucket = f"{base_path}/{filename.rsplit('.', 1)[0]}.{type_format}"
45
151
 
46
- data = self._get_s3_data(
152
+ existing_data = self._get_s3_data(
47
153
  client, config_tool["METRICS_MANAGER"]["AWS"]["BUCKET"], path_bucket
48
154
  )
49
155
 
50
- with open(file_path, "rb") as new_data:
51
- new_data_content = new_data.read().decode("utf-8")
52
- data = data + "\n" + new_data_content if data else new_data_content
53
- client.put_object(
54
- Bucket=config_tool["METRICS_MANAGER"]["AWS"]["BUCKET"],
55
- Key=path_bucket,
56
- Body=data,
156
+ if (
157
+ type_format
158
+ == "parquet"
159
+ ):
160
+ buffer = io.BytesIO()
161
+ with open(file_path, "rb") as new_data:
162
+ new_json_data = json.load(new_data)
163
+
164
+ new_table = self._to_arrow_record(new_json_data)
165
+
166
+ if existing_data:
167
+ existing_table = pq.read_table(
168
+ io.BytesIO(existing_data), schema=self.record_schema
169
+ )
170
+ final_table = pa.concat_tables([existing_table, new_table])
171
+ else:
172
+ final_table = new_table
173
+
174
+ pq.write_table(
175
+ final_table,
176
+ buffer,
177
+ compression="snappy",
178
+ use_deprecated_int96_timestamps=False,
179
+ )
180
+ buffer.seek(0)
181
+ data = buffer.getvalue()
182
+ elif type_format == "json":
183
+ with open(file_path, "rb") as new_data:
184
+ new_data_content = new_data.read().decode("utf-8")
185
+ data = (
186
+ existing_data.decode("utf-8") + "\n" + new_data_content
187
+ if existing_data
188
+ else new_data_content
189
+ )
190
+ else:
191
+ raise ValueError(
192
+ "Unsupported TYPE_FORMAT_BUCKET_FILE. Use 'parquet' or 'json'."
57
193
  )
194
+
195
+ client.put_object(
196
+ Bucket=config_tool["METRICS_MANAGER"]["AWS"]["BUCKET"],
197
+ Key=path_bucket,
198
+ Body=data,
199
+ )
200
+
201
+ def _get_s3_data(self, client, bucket, path):
202
+ try:
203
+ response = client.get_object(
204
+ Bucket=bucket,
205
+ Key=path,
206
+ )
207
+ return response["Body"].read()
208
+ except client.exceptions.NoSuchKey:
209
+ return ""
210
+
211
+ def _to_arrow_record(self, event: dict) -> pa.Table:
212
+ event = dict(event)
213
+
214
+ data = {
215
+ "id": [event.get("id")],
216
+ "date": [event.get("date")], # "YYYY-MM-DD"
217
+ "component": [event.get("component")],
218
+ "stage": [event.get("stage")],
219
+ "check_type": [event.get("check_type")],
220
+ "environment": [event.get("environment")],
221
+ "events": [event.get("events", [])],
222
+ "scan_result": [
223
+ event.get(
224
+ "scan_result",
225
+ {
226
+ "findings_excluded": [],
227
+ "vulnerabilities": None,
228
+ "compliances": None,
229
+ "risk": None,
230
+ },
231
+ )
232
+ ],
233
+ }
234
+
235
+ return pa.Table.from_pydict(data, schema=self.record_schema)
@@ -578,7 +578,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
578
578
  response = Component.create_component(
579
579
  session=session_manager, request=request
580
580
  )
581
- logger.info(
581
+ logger.debug(
582
582
  f"Component created: {response.name} - {response.version} found with id: {response.id}"
583
583
  )
584
584
 
@@ -64,7 +64,7 @@ class GenericOauth(AuthenticationGateway):
64
64
  result = response.json()["access_token"]
65
65
  return ("Authorization",f"Bearer {result}")
66
66
  else:
67
- print(
67
+ logger.warning(
68
68
  "OAuth: Can't obtain access token"
69
69
  "token Unknown status "
70
70
  "code {0}: -> {1}".format(response.status_code, response.text)
@@ -98,7 +98,7 @@ class BreakBuild:
98
98
  else item.id
99
99
  ),
100
100
  "severity": item.severity,
101
- "risk_score": item.risk_score,
101
+ "risk_score": str(item.risk_score),
102
102
  "reason": item.reason,
103
103
  },
104
104
  self.report_breaker,
@@ -26,12 +26,11 @@ class FirstCsv(AddEpssGateway):
26
26
  if response.status_code == 200:
27
27
  with gzip.open(io.BytesIO(response.content), "rt") as f:
28
28
  data = f.read()
29
- logger.info(f"EPSS data downloaded for date: {formatted_date}")
29
+ print(f"EPSS data downloaded for date: {formatted_date}")
30
30
  return data
31
31
  else:
32
32
  date -= datetime.timedelta(days=1)
33
33
  attempts += 1
34
- print("Could not find EPSS data from de last 2 days. Skipping add EPS data...")
35
34
  logger.error(
36
35
  "Could not find EPSS data from de last 2 days. Skipping add EPS data..."
37
36
  )
@@ -59,7 +59,7 @@ class GitleaksTool(ToolGateway):
59
59
  with open(file_path, 'r', encoding='utf-8') as f:
60
60
  return json.load(f)
61
61
  else:
62
- print(f"File {file_path} does not exist")
62
+ logger.warning(f"File {file_path} does not exist")
63
63
  return []
64
64
 
65
65
  def _create_report(self, output_file, combined_data):
@@ -130,7 +130,7 @@ class TrufflehogRun(ToolGateway):
130
130
  command = f"{trufflehog_command} filesystem {path_folder} --include-paths {include_path} --exclude-paths {exclude_path} --no-verification --no-update --json"
131
131
  if enable_custom_rules:
132
132
  command = command.replace("--no-verification --no-update --json", f"--config {path}//rules//trufflehog//custom-rules.yaml --no-verification --no-update --json" if "Windows" in agent_os else
133
- f"--config {path}/rules/trufflehog/custom-rules.yaml --no-verification --no-update --json" if "Linux" in agent_os else
133
+ f"--config {path}/rules/trufflehog/custom-rules.yaml --no-verification --no-update --json" if "Linux" or "Darwin" in agent_os else
134
134
  "--no-verification --no-update --json")
135
135
 
136
136
  result = subprocess.run(command, capture_output=True, shell=True, text=True, encoding='utf-8')
@@ -159,4 +159,5 @@ class TrufflehogRun(ToolGateway):
159
159
  find["Mitigation"] = config_tool[tool]["RULES"][find["Id"]]["Mitigation"] if "SECRET_SCANNING" not in find["Id"] else "N.A"
160
160
  json_str = json.dumps(find)
161
161
  file.write(json_str + '\n')
162
- return findings, file_findings
162
+
163
+ return findings, file_findings
@@ -92,7 +92,7 @@ class DockerImages(ImagesGateway):
92
92
  specific_use_value = label_keys["specific_use"]
93
93
  is_uso_especifico = labels.get("repository") == specific_use_value
94
94
  if source_image and matching_image:
95
- logger.info(f"Base image for '{matching_image}' found: {source_image}")
95
+ print(f"Base image for '{matching_image}' found: {source_image}")
96
96
  elif matching_image:
97
97
  logger.warning(f"Base image not found for '{matching_image}'.")
98
98
  return source_image, is_uso_especifico
@@ -2,7 +2,6 @@ import stat
2
2
  import requests
3
3
  import os
4
4
  import subprocess
5
- import logging
6
5
  import base64
7
6
  import json
8
7
  import platform
@@ -57,7 +56,7 @@ class PrismaCloudManagerScan(ToolGateway):
57
56
  file.write(response.content)
58
57
 
59
58
  os.chmod(file_path, stat.S_IRWXU)
60
- logging.info(f"twistcli downloaded and saved to: {file_path}")
59
+ logger.info(f"twistcli downloaded and saved to: {file_path}")
61
60
  return 0
62
61
 
63
62
  except Exception as e:
@@ -48,7 +48,7 @@ class ImportScanUserCase:
48
48
  response = None
49
49
  if api_scan_bool:
50
50
  response = self.__rest_import_scan.import_scan_api(request)
51
- logger.info(f"End process Succesfull!!!: {response}")
51
+ logger.debug(f"End process Succesfull!!!: {response}")
52
52
  else:
53
53
  try:
54
54
  file_type = self.get_file_type(request.file)
@@ -56,7 +56,7 @@ class ImportScanUserCase:
56
56
  raise ApiError("File format not allowed")
57
57
 
58
58
  with open(request.file, "rb") as file:
59
- logger.info(f"read {file_type} file successful !!!")
59
+ logger.debug(f"read {file_type} file successful !!!")
60
60
  files = [("file", (request.file, file, file_type))]
61
61
  response = self.__rest_import_scan.import_scan(request, files)
62
62
 
@@ -74,7 +74,7 @@ class ImportScanUserCase:
74
74
  logger.error(log)
75
75
  raise ApiError(log)
76
76
 
77
- logger.info(f"Match {request.scan_type}")
77
+ logger.debug(f"Match {request.scan_type}")
78
78
  products = self.__rest_product.get_products({"name": request.product_name})
79
79
  if len(products.results) == 0 and request.product_name != "Orphan_Product":
80
80
  products = self.__rest_product.get_products({"name": request.code_app})
@@ -82,27 +82,27 @@ class ImportScanUserCase:
82
82
  product_id = products.results[0].id
83
83
  request.product_name = products.results[0].name
84
84
  request.product_type_name = self.__rest_product_type.get_product_type_id(products.results[0].prod_type).name
85
- logger.info(f"product found: {request.product_name} with id: {product_id}")
85
+ logger.debug(f"product found: {request.product_name} with id: {product_id}")
86
86
  else:
87
87
  product_type_id = None
88
88
  product_types = self.__rest_product_type.get_product_types(request.product_type_name)
89
89
  if product_types.results == []:
90
90
  product_type = self.__rest_product_type.post_product_type(request.product_type_name)
91
91
  product_type_id = product_type.id
92
- logger.info(f"product_type created: {product_type.name} with id {product_type.id}")
92
+ logger.debug(f"product_type created: {product_type.name} with id {product_type.id}")
93
93
  else:
94
94
  if len(product_types.results) != 1:
95
95
  logger.warning(f"there is more than one product type with the name: {product_types.results}")
96
96
 
97
97
  product_type_id = product_types.results[0].id
98
- logger.info(
98
+ logger.debug(
99
99
  f"product_type found: {product_types.results[0].name}\
100
100
  with id {product_type_id}"
101
101
  )
102
102
 
103
103
  product = self.__rest_product.post_product(request, product_type_id)
104
104
  product_id = product.id
105
- logger.info(
105
+ logger.debug(
106
106
  f"product created: {product.name}\
107
107
  found with id: {product.id}"
108
108
  )
@@ -121,7 +121,7 @@ class CmdbRestConsumer:
121
121
 
122
122
  data = self.get_nested_data(response, response_format)
123
123
  data_map = self.mapping_cmdb(data)
124
- logger.info(data_map)
124
+ logger.debug(data_map)
125
125
  cmdb_object = Cmdb.from_dict(data_map)
126
126
  cmdb_object.codigo_app = code_app
127
127
  return cmdb_object
@@ -123,7 +123,7 @@ class ImportScanRestConsumer:
123
123
  logger.error(response.json())
124
124
  logger.error(response)
125
125
  raise ApiError(response.json())
126
- logger.info(f"Sucessfull {response}")
126
+ logger.debug(f"Sucessfull {response}")
127
127
  response = ImportScanRequest.from_dict(response.json())
128
128
  except Exception as e:
129
129
  logger.error(f"from dict import Scan: {response.json()}")
@@ -52,7 +52,7 @@ class ProductTypeRestConsumer:
52
52
  response = self.__session.get(url, headers=headers, data={}, verify=VERIFY_CERTIFICATE)
53
53
  if response.status_code != 200:
54
54
  raise ApiError(response.json())
55
- logger.info(response)
55
+ logger.debug(response)
56
56
  product_type_object = ProductType.from_dict(response.json())
57
57
  except Exception as e:
58
58
  raise ApiError(e)
@@ -4,6 +4,10 @@ import json
4
4
  from github import Github, GithubIntegration
5
5
  from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
6
6
 
7
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
8
+ from devsecops_engine_tools.engine_utilities import settings
9
+
10
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
7
11
 
8
12
  class GithubApi:
9
13
 
@@ -40,11 +44,11 @@ class GithubApi:
40
44
  file.write(chunk)
41
45
  self.unzip_file(f"{download_path}/{asset_name}", download_path)
42
46
  else:
43
- print(
47
+ logger.warning(
44
48
  f"Error downloading asset {asset_name}. status code: {response.status_code}"
45
49
  )
46
50
  else:
47
- print(
51
+ logger.warning(
48
52
  f"Error getting the assets of the last release. Status code: {response.status_code}"
49
53
  )
50
54
 
@@ -90,7 +90,6 @@ class ReportSonar:
90
90
  if get_components:
91
91
  project_keys = [f"{pipeline_name}_{component}" for component in get_components]
92
92
  print(f"Multiple project keys detected: {project_keys}")
93
- logger.info(f"Multiple project keys detected: {project_keys}")
94
93
  else:
95
94
  project_keys = self.sonar_gateway.get_project_keys(pipeline_name)
96
95
 
@@ -35,14 +35,12 @@ class SonarAdapter(SonarGateway):
35
35
  file_content = f.read()
36
36
  print(f"[SQ] Parse Task report file:\n{file_content}")
37
37
  if not file_content or len(file_content) <= 0:
38
- print("[SQ] Error reading file")
39
38
  logger.warning("[SQ] Error reading file")
40
39
  return None
41
40
  try:
42
41
  settings = self.create_task_report_from_string(file_content)
43
42
  return settings.get("projectKey")
44
43
  except Exception as err:
45
- print(f"[SQ] Parse Task report error: {err}")
46
44
  logger.warning(f"[SQ] Parse Task report error: {err}")
47
45
  return None
48
46
  except Exception as err:
@@ -2,6 +2,10 @@ import os
2
2
  import pexpect
3
3
  import base64
4
4
 
5
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
6
+ from devsecops_engine_tools.engine_utilities import settings
7
+
8
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
5
9
 
6
10
  def decode_base64(secret_data):
7
11
  return base64.b64decode(secret_data).decode("utf-8")
@@ -22,7 +26,7 @@ def config_knowns_hosts(host, ssh_key):
22
26
  with open(known_hosts_file_path, "a") as known_hosts_file:
23
27
  known_hosts_file.write(line_to_add)
24
28
  except Exception as e:
25
- print(f"An error ocurred while configuring file: {e}")
29
+ logger.error(f"An error ocurred while configuring file: {e}")
26
30
 
27
31
 
28
32
  def create_ssh_private_file(ssh_key_file_path, ssh_key_content):
@@ -33,7 +37,7 @@ def create_ssh_private_file(ssh_key_file_path, ssh_key_content):
33
37
 
34
38
  os.chmod(ssh_key_file_path, permisos)
35
39
  except Exception as e:
36
- print(f"An error ocurred creating file: {e}")
40
+ logger.error(f"An error ocurred creating file: {e}")
37
41
 
38
42
 
39
43
  def add_ssh_private_key(ssh_key_file_path, ssh_key_password):
@@ -63,4 +67,4 @@ def add_ssh_private_key(ssh_key_file_path, ssh_key_password):
63
67
 
64
68
  return agent_env
65
69
  except Exception as e:
66
- print(f"An error ocurred adding private key: {e}")
70
+ logger.error(f"An error ocurred adding private key: {e}")
@@ -1 +1 @@
1
- version = '1.99.1'
1
+ version = '1.101.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.99.1
3
+ Version: 1.101.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
@@ -34,6 +34,7 @@ Requires-Dist: PyJWT==2.9.0
34
34
  Requires-Dist: sympy==1.13.3
35
35
  Requires-Dist: urllib3<2.0.0
36
36
  Requires-Dist: holidays==0.58
37
+ Requires-Dist: pyarrow==21.0.0
37
38
 
38
39
  # DevSecOps Engine Tools
39
40
 
@@ -1,5 +1,5 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=kpCtR0hJPuiwybJjqXJ2YMV_S_at5T19xLodf9WZse4,19
2
+ devsecops_engine_tools/version.py,sha256=dNUqTobmrSsn_hKz850xbZ3dQnlZa2xiO52CX6A0XHE,20
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
@@ -27,20 +27,20 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/secrets_manager_gate
27
27
  devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_management_gateway.py,sha256=CB6KMjSNNgOEGdmzsxMLMMhs1MRf_C3GFsrEP77gOIo,1432
28
28
  devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py,sha256=619MnIok_PAsgEinxBSioiveQYHuK6UidiUwRqpUWY8,11839
30
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=nwci23xbuwGcA99S6i67CO_anzmqHBYjgX0cMM6pJ4c,10283
30
+ devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=_vTTHOKBHsWQFPmL4j41fMonp6DLu8U4FCylDsw5-1Q,10053
31
31
  devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=qZKz8jc5k3IEd97vsTXB-4dQOFaiOdPd9zawgPhSFV8,11432
32
32
  devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=xfaGrDf9rnN32qG_zOD9NN-a62reqQ5KOd2bP6xoRnw,2417
33
33
  devsecops_engine_tools/engine_core/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=xLPwfh8FQzP5CldRj0ev8LsSxFO4A_i88EnNGBPuN2g,2210
36
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=G5RFUFXMmDFJfqJnbeGQPkHO0u01KMFU0pfGRINlgLI,7313
37
37
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=ELihQBgSPH4f9QCyg2dgjudsFitaqgdsljnVOmaA_v4,1972
38
38
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=qErfsFIfcXQJlizxCWwi9V7qGXPYccp4e5SJgkD5mzY,5931
40
40
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/cdxgen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/cdxgen/cdxgen.py,sha256=t1CTeQG2ePBwUdeNinSYEi3vyMjufD0KuHUIxRZCsAU,4370
42
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=YuKKS2AsnyKGBXYnaJBD53nNCJpQwXRK-46iGywNbJc,33060
43
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=Ff-LLHhqWhyhQ5xYj_e4sW3OXKpmCDtvAdrKRTR0JvY,33061
44
44
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=sko3NAnLcVeB1-2YQQQ7I8S9vK6MA2s2Ylv0XDv3T0E,4279
46
46
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -85,7 +85,7 @@ devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/nuclei/nuc
85
85
  devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/nuclei/nuclei_deserealizer.py,sha256=qqoBMXr350ItzabSU6a_fD2-9kB6pAmtWioFP5AvCIE,1346
86
86
  devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/nuclei/nuclei_tool.py,sha256=KQKEq06izKut2VMhD9nfc-CFPdvT8wOcar3COB7x6ZA,6843
87
87
  devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/oauth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/oauth/generic_oauth.py,sha256=BJn9WTx3cRphaOOPP4E-_darWp0bWbSOzHWoi2CYDnk,2956
88
+ devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/oauth/generic_oauth.py,sha256=5OvS-XKrSuqHnG64GFd4XqzEGPjwAhn3xfcGgL1ATW4,2965
89
89
  devsecops_engine_tools/engine_dast/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
90
  devsecops_engine_tools/engine_dast/src/infrastructure/entry_points/entry_point_dast.py,sha256=rm0Ao-nFrIvzbrfUBrPUEyJJV_eVaEdzYDnnwumOAsw,484
91
91
  devsecops_engine_tools/engine_dast/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -113,14 +113,14 @@ devsecops_engine_tools/engine_risk/src/domain/model/gateways/__init__.py,sha256=
113
113
  devsecops_engine_tools/engine_risk/src/domain/model/gateways/add_epss_gateway.py,sha256=cTm4QSxiaUt7ETCdXWZxKEus8pmEDA3e9k5b39SLDDE,178
114
114
  devsecops_engine_tools/engine_risk/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
115
  devsecops_engine_tools/engine_risk/src/domain/usecases/add_data.py,sha256=4wqDj-q7hJfJscvrbMDcy7tONqxdxl-CSl_TWTRUGKA,402
116
- devsecops_engine_tools/engine_risk/src/domain/usecases/break_build.py,sha256=ixUlW4rL8ZRj_v1tQHeQiQlzAWV3DUqU1I56aqWja8M,17052
116
+ devsecops_engine_tools/engine_risk/src/domain/usecases/break_build.py,sha256=Lm4pYeGmqs9VIm2PbzttN5KMDHK6bLCw3_0Mm9mxd88,17057
117
117
  devsecops_engine_tools/engine_risk/src/domain/usecases/check_threshold.py,sha256=VYdmcbAuNNvdHCegRfvza7YJ8FHbFNyDosrKJrMW93I,765
118
118
  devsecops_engine_tools/engine_risk/src/domain/usecases/get_exclusions.py,sha256=UNULFNbGAgQKxUQ7buEgL8uIzyVP3GEpGKguDIuZTUc,4113
119
119
  devsecops_engine_tools/engine_risk/src/domain/usecases/handle_filters.py,sha256=npd5MQus_cf6sv7JIAi5YGURyXJDSXxX1big7ts7MjY,2948
120
120
  devsecops_engine_tools/engine_risk/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
121
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
122
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
- devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/first_epss_csv.py,sha256=puyoD1csvsJJTmTlJELS97NMoWC4hHAIbYuu916hvQY,2160
123
+ devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/first_epss_csv.py,sha256=EiiNdcl2I8cedIYsp8GijpwQCwx8IvYKk2j7cMLZtt0,2066
124
124
  devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py,sha256=6-qnhftZ8bH0KGt_-KhD1lRO2ft71JaSqAPOiX_e1s0,2639
126
126
  devsecops_engine_tools/engine_risk/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -194,10 +194,10 @@ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,
194
194
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
195
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/gitleaks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
196
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/gitleaks/gitleaks_deserealizator.py,sha256=IERIxeHhtQj0npBoL4_qb2mRlNgEUjg603DqGA49RQ4,1617
197
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/gitleaks/gitleaks_tool.py,sha256=tSsX5gtv_EzMYnhTzpRdxXT__eiqWELj1hS61N5t5ek,6006
197
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/gitleaks/gitleaks_tool.py,sha256=YGm6KhbFu06wzvTESuZnctmuyJEMQDiwMww3bO6SsC8,6015
198
198
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
199
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=mrSqPrkMiikxQ_uY-rF2I8QvicsOMdMBzTC8CTV3Wk8,2392
200
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=icO8so_bB92hilWknivQPt1qi0QHGzZNDBIXMwVfMII,8160
200
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=azMbd25Yvkil9xh6dWcBFBL1tFse1yr_-2zn8sBUYeU,8176
201
201
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
202
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=61OnP4ehmzh-tRbACgZsB4IJi6J6HT9E6KCOcuhvnRw,1185
203
203
  devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -221,9 +221,9 @@ devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input
221
221
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
222
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
223
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
224
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=VvkRP1knlRGUa6PE2zKTeByQuJVW27PF2FJ0zRy2TDA,6371
224
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py,sha256=SbPuZbhIIIN2w84iTZ8eOChwjqOt8jXIe5rEjEgvb9g,6365
225
225
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=Un0YmZeGh3LpOHiq6872lphD15cf02R9hwBUiHVuhCM,7848
226
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py,sha256=bgwHV4wd6dITrlLCoQctAW4lVJT0nSmOhEKLt3w9TRk,7831
227
227
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py,sha256=FXb0jUReJVUdZq_H_Zz-gCueMmWf0AwMiwJB-Ceqv2A,2695
228
228
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
229
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=Pg0Q0CKEQ-mE8u47H7ts1q3l0JOmTSeU9SBqr9_5U-Y,3839
@@ -314,18 +314,18 @@ devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/component.p
314
314
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/engagement.py,sha256=SVX-weFRPT3DK7w6IBrLuWS4L6vboMuZtwXAQmIHfEE,406
315
315
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding.py,sha256=TjfpdJtaBwQvT8XNJKBf6tuOASOAw7ZiOxJbqsKadaA,1689
316
316
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding_exclusion.py,sha256=VqdwBiQGc9XFpatvbXGL837LtTxkWlfhWH46W1cTbCg,455
317
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py,sha256=xD4JWVaXcgbB7_ssgRmz9dZnkt9U-rKW4K3QIVnlkY4,7261
317
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py,sha256=xovHy5IAzkeQSbQqLGKNfG6RbxT7rl8bTiHVy10cI_8,7268
318
318
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/product.py,sha256=6f6eABdC79zOopMe_Rif3XoGG-yFfq9x_EOkevTuGDY,368
319
319
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
320
320
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py,sha256=t-MnOBwvNlv6omfzinwN4pZd4OJstMKH27Bx2FNqe4Y,7102
321
+ devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py,sha256=RfHDWxGsd2xIpDOFd3VW599ZSxYntrWn9k4EdDl6KRk,7103
322
322
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/component.py,sha256=-J0Sv7z709Hctb-tgM0wmp5ofE4WKEIA_uJwzvMnStE,2132
323
323
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py,sha256=E6ilSQLOcJeBGYn_XXzJimUdi3l9vo0FpN1FhdNJV58,3866
324
324
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py,sha256=k-z2tg_NPKMni7rZgXMZa2-t8_8F35r8YtF1EcjMyDs,2355
325
325
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding_exclusion.py,sha256=BL4xf1FE5tMsBri0LetxBRUgOgLogdoHX97rQkHh10g,1524
326
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py,sha256=uZqPM9sOyclq8q-uKRWUY9qR67SzpIzirM6T7KMkYZ4,6515
326
+ devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py,sha256=BXrTNv2PBWNSQNit0SEVvZbDP6krpvQUUQTJ5a9asD4,6516
327
327
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product.py,sha256=8QksbPReWWuKoRrY9Grzl7XlpMsxfEt8EYYP_K0Nz0U,2725
328
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py,sha256=x-Gh2BEP6IZccS2m_DLB8xI6aEkS19J0ZUpP2mjY88o,3078
328
+ devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py,sha256=VECf9Mm1wXro6yi4yC4dWuysJq5bcGcEn0hVBnvj9zs,3079
329
329
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/scan_configurations.py,sha256=zTGOUJ4BFoF7aFTsuiecme2NAzJ_SWnnfS6mIsFWoVo,3122
330
330
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
331
331
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/settings.py,sha256=5ni59GuAHT-avpWNc4FSedVpoFRTGRNzjQJkAXpWv6c,28
@@ -338,7 +338,7 @@ devsecops_engine_tools/engine_utilities/git_cli/model/gateway/__init__.py,sha256
338
338
  devsecops_engine_tools/engine_utilities/git_cli/model/gateway/git_gateway.py,sha256=x6LFK8wZuVix-ZCBdBQTzvjQi59nZYVrSOTatCOQbxc,638
339
339
  devsecops_engine_tools/engine_utilities/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
340
340
  devsecops_engine_tools/engine_utilities/github/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
- devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py,sha256=6c4YXGsKZEYPSy6AtMx9arxR4JpYPz1C0VleIV2n2Ms,2779
341
+ devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py,sha256=8MYp5Gs8SrZI5TAkDnM4tlvkUeq8yoDvuzW_UxdGKw4,3005
342
342
  devsecops_engine_tools/engine_utilities/github/models/GithubPredefinedVariables.py,sha256=8V7rX3jhADkE7wvI4XXWNiIdD8tI_U6JScrd9BY3RqU,1764
343
343
  devsecops_engine_tools/engine_utilities/github/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
344
344
  devsecops_engine_tools/engine_utilities/input_validations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -355,17 +355,17 @@ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/__init__.py,s
355
355
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
356
356
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/sonar_gateway.py,sha256=mgycD3bzC_BYv7qT0tMLAro9hyNOvi4gJRzceYNF0t8,1339
357
357
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
358
- devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=KJNOTqgxX-wCOJtD_LlyZt5Pp388_MzQO4IdQDcSIJ0,10912
358
+ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=ya-oH6qbjeSls2weN6hhH5wV9pM6MVMKMm6bzN7ZtWU,10837
359
359
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
360
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
361
361
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
362
- devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/sonarqube_report.py,sha256=BpCLMgFQjytZc1HfZ5hXqX44E8T0JhLpAaNOVq5pFjo,4909
362
+ devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/sonarqube_report.py,sha256=o6IML8mQbZS7B7NaxtPI6XA95l7ZiUQc4p_dZvTqsig,4790
363
363
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
364
364
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/entry_points/entry_point_report_sonar.py,sha256=7Rw310PgVhnGyyltFZ4zvxnC78ukMKQBlMQhI5Z0owI,2790
365
365
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
366
366
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/helpers/utils.py,sha256=SGOWrkzQrvOt9bRhhSfgiMzj1695e1W0B9ox9C1ihQI,294
367
367
  devsecops_engine_tools/engine_utilities/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
368
- devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py,sha256=Vvrro2e_YyvtKY9WzPUVOFTd-fiibohcG6wWHjLHAWg,2369
368
+ devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py,sha256=Tbe_YuRbPqb8jLZdAZ4LaupVyO3RJ-SzZdJh8KzrW6w,2598
369
369
  devsecops_engine_tools/engine_utilities/trivy_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
370
370
  devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
371
371
  devsecops_engine_tools/engine_utilities/trivy_utils/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -380,8 +380,8 @@ devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGax
380
380
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
381
381
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=Z0fdhB3r-dxU0nGSD9zW_B4r2Qol1rUnUCkhFR0U-HQ,487
382
382
  devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=HCjS900TBoNcHrC4LaiP-Kf9frVdtagF130qOUgnO2M,6757
383
- devsecops_engine_tools-1.99.1.dist-info/METADATA,sha256=_za0wvZSQ4PtBLwRQ-VqLZR3MsjAnbrAsnDh8IudvMU,3200
384
- devsecops_engine_tools-1.99.1.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
385
- devsecops_engine_tools-1.99.1.dist-info/entry_points.txt,sha256=OWAww5aBsGeMv0kWhSgVNB0ySKKpYuJd4dly0ikFPkc,283
386
- devsecops_engine_tools-1.99.1.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
387
- devsecops_engine_tools-1.99.1.dist-info/RECORD,,
383
+ devsecops_engine_tools-1.101.0.dist-info/METADATA,sha256=Vd7mdKdoMtqhWf3m-gCenEPV_VRg_1xG4to4t7dz2Bg,3232
384
+ devsecops_engine_tools-1.101.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
385
+ devsecops_engine_tools-1.101.0.dist-info/entry_points.txt,sha256=OWAww5aBsGeMv0kWhSgVNB0ySKKpYuJd4dly0ikFPkc,283
386
+ devsecops_engine_tools-1.101.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
387
+ devsecops_engine_tools-1.101.0.dist-info/RECORD,,