devsecops-engine-tools 1.27.1__py3-none-any.whl → 1.28.1__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 (19) hide show
  1. devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py +3 -0
  2. devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +3 -0
  3. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py +4 -0
  4. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +81 -39
  5. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py +5 -1
  6. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py +5 -2
  7. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py +5 -1
  8. devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py +5 -0
  9. devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py +1 -0
  10. devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py +5 -4
  11. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py +81 -30
  12. devsecops_engine_tools/engine_utilities/github/models/GithubPredefinedVariables.py +6 -0
  13. devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py +4 -1
  14. devsecops_engine_tools/version.py +1 -1
  15. {devsecops_engine_tools-1.27.1.dist-info → devsecops_engine_tools-1.28.1.dist-info}/METADATA +2 -2
  16. {devsecops_engine_tools-1.27.1.dist-info → devsecops_engine_tools-1.28.1.dist-info}/RECORD +19 -19
  17. {devsecops_engine_tools-1.27.1.dist-info → devsecops_engine_tools-1.28.1.dist-info}/WHEEL +0 -0
  18. {devsecops_engine_tools-1.27.1.dist-info → devsecops_engine_tools-1.28.1.dist-info}/entry_points.txt +0 -0
  19. {devsecops_engine_tools-1.27.1.dist-info → devsecops_engine_tools-1.28.1.dist-info}/top_level.txt +0 -0
@@ -18,3 +18,6 @@ class VulnerabilityManagement:
18
18
  branch_tag: str
19
19
  commit_hash: str
20
20
  environment: str
21
+ vm_product_type_name: str
22
+ vm_product_name: str
23
+ vm_product_description: str
@@ -196,6 +196,9 @@ class HandleScan:
196
196
  self.devops_platform_gateway.get_variable("branch_tag"),
197
197
  self.devops_platform_gateway.get_variable("commit_hash"),
198
198
  env,
199
+ self.devops_platform_gateway.get_variable("vm_product_type_name"),
200
+ self.devops_platform_gateway.get_variable("vm_product_name"),
201
+ self.devops_platform_gateway.get_variable("vm_product_description"),
199
202
  )
200
203
  )
201
204
 
@@ -7,6 +7,7 @@ from devsecops_engine_tools.engine_utilities.azuredevops.models.AzurePredefinedV
7
7
  SystemVariables,
8
8
  ReleaseVariables,
9
9
  AgentVariables,
10
+ VMVariables
10
11
  )
11
12
  from devsecops_engine_tools.engine_utilities.azuredevops.infrastructure.azure_devops_api import (
12
13
  AzureDevopsApi,
@@ -95,6 +96,9 @@ class AzureDevops(DevopsPlatformGateway):
95
96
  "target_branch": SystemVariables.System_TargetBranchName,
96
97
  "source_branch": SystemVariables.System_SourceBranch,
97
98
  "repository_provider": BuildVariables.Build_Repository_Provider,
99
+ "vm_product_type_name": VMVariables.Vm_Product_Type_Name,
100
+ "vm_product_name": VMVariables.Vm_Product_Name,
101
+ "vm_product_description": VMVariables.Vm_Product_Description,
98
102
  }
99
103
  try:
100
104
  return variable_map.get(variable).value()
@@ -30,6 +30,7 @@ from functools import partial
30
30
 
31
31
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
32
32
  from devsecops_engine_tools.engine_utilities import settings
33
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.serializers.import_scan import ImportScanSerializer
33
34
  import time
34
35
  import concurrent.futures
35
36
 
@@ -87,44 +88,17 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
87
88
  tags = vulnerability_management.dict_args["tool"]
88
89
  if vulnerability_management.dict_args["tool"] == "engine_iac":
89
90
  tags = f"{vulnerability_management.dict_args['tool']}_{'_'.join(vulnerability_management.dict_args['platform'])}"
90
- request: ImportScanRequest = Connect.cmdb(
91
- cmdb_mapping={
92
- "product_type_name": "nombreevc",
93
- "product_name": "nombreapp",
94
- "tag_product": "nombreentorno",
95
- "product_description": "arearesponsableti",
96
- "codigo_app": "CodigoApp",
97
- },
98
- compact_remote_config_url=f'{vulnerability_management.base_compact_remote_config_url}{vulnerability_management.config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["CMDB_MAPPING_PATH"]}',
99
- personal_access_token=vulnerability_management.access_token,
100
- token_cmdb=token_cmdb,
101
- host_cmdb=vulnerability_management.config_tool[
102
- "VULNERABILITY_MANAGER"
103
- ]["DEFECT_DOJO"]["HOST_CMDB"],
104
- expression=vulnerability_management.config_tool[
105
- "VULNERABILITY_MANAGER"
106
- ]["DEFECT_DOJO"]["REGEX_EXPRESSION_CMDB"],
107
- token_defect_dojo=token_dd,
108
- host_defect_dojo=vulnerability_management.config_tool[
109
- "VULNERABILITY_MANAGER"
110
- ]["DEFECT_DOJO"]["HOST_DEFECT_DOJO"],
111
- scan_type=scan_type_mapping[vulnerability_management.scan_type],
112
- engagement_name=vulnerability_management.input_core.scope_pipeline,
113
- service=vulnerability_management.input_core.scope_pipeline,
114
- file=vulnerability_management.input_core.path_file_results,
115
- version=vulnerability_management.version,
116
- build_id=vulnerability_management.build_id,
117
- source_code_management_uri=vulnerability_management.source_code_management_uri,
118
- branch_tag=vulnerability_management.branch_tag,
119
- commit_hash=vulnerability_management.commit_hash,
120
- environment=(
121
- enviroment_mapping[vulnerability_management.environment.lower()]
122
- if vulnerability_management.environment is not None
123
- and vulnerability_management.environment.lower()
124
- in enviroment_mapping
125
- else enviroment_mapping["default"]
126
- ),
127
- tags=tags,
91
+
92
+ use_cmdb = vulnerability_management.config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["CMDB"]["USE_CMDB"]
93
+
94
+ request = self._build_request_importscan(
95
+ vulnerability_management,
96
+ token_cmdb,
97
+ token_dd,
98
+ scan_type_mapping,
99
+ enviroment_mapping,
100
+ tags,
101
+ use_cmdb
128
102
  )
129
103
 
130
104
  def request_func():
@@ -170,7 +144,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
170
144
  request={
171
145
  "name": Connect.get_code_app(
172
146
  service,
173
- config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"][
147
+ config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["CMDB"][
174
148
  "REGEX_EXPRESSION_CMDB"
175
149
  ],
176
150
  ),
@@ -387,6 +361,74 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
387
361
  ex
388
362
  )
389
363
  )
364
+
365
+ def _build_request_importscan(
366
+ self,
367
+ vulnerability_management: VulnerabilityManagement,
368
+ token_cmdb,
369
+ token_dd,
370
+ scan_type_mapping,
371
+ enviroment_mapping,
372
+ tags,
373
+ use_cmdb: bool
374
+ ):
375
+ common_fields = {
376
+ "scan_type": scan_type_mapping[vulnerability_management.scan_type],
377
+ "file": vulnerability_management.input_core.path_file_results,
378
+ "engagement_name": vulnerability_management.input_core.scope_pipeline,
379
+ "source_code_management_uri": vulnerability_management.source_code_management_uri,
380
+ "tags": tags,
381
+ "version": vulnerability_management.version,
382
+ "build_id": vulnerability_management.build_id,
383
+ "branch_tag": vulnerability_management.branch_tag,
384
+ "commit_hash": vulnerability_management.commit_hash,
385
+ "service": vulnerability_management.input_core.scope_pipeline,
386
+ "environment": (
387
+ enviroment_mapping[vulnerability_management.environment.lower()]
388
+ if vulnerability_management.environment is not None
389
+ and vulnerability_management.environment.lower()
390
+ in enviroment_mapping
391
+ else enviroment_mapping["default"]
392
+ ),
393
+ "token_defect_dojo": token_dd,
394
+ "host_defect_dojo": vulnerability_management.config_tool[
395
+ "VULNERABILITY_MANAGER"
396
+ ]["DEFECT_DOJO"]["HOST_DEFECT_DOJO"],
397
+ "expression": vulnerability_management.config_tool[
398
+ "VULNERABILITY_MANAGER"
399
+ ]["DEFECT_DOJO"]["CMDB"]["REGEX_EXPRESSION_CMDB"],
400
+ }
401
+
402
+ if use_cmdb:
403
+ cmdb_mapping = vulnerability_management.config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["CMDB"]["CMDB_MAPPING"]
404
+ return Connect.cmdb(
405
+ cmdb_mapping={
406
+ "product_type_name": cmdb_mapping["PRODUCT_TYPE_NAME"],
407
+ "product_name": cmdb_mapping["PRODUCT_NAME"],
408
+ "tag_product": cmdb_mapping["TAG_PRODUCT"],
409
+ "product_description": cmdb_mapping["PRODUCT_DESCRIPTION"],
410
+ "codigo_app": cmdb_mapping["CODIGO_APP"],
411
+ },
412
+ compact_remote_config_url=f'{vulnerability_management.base_compact_remote_config_url}{vulnerability_management.config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["CMDB"]["CMDB_MAPPING_PATH"]}',
413
+ personal_access_token=vulnerability_management.access_token,
414
+ token_cmdb=token_cmdb,
415
+ host_cmdb=vulnerability_management.config_tool[
416
+ "VULNERABILITY_MANAGER"
417
+ ]["DEFECT_DOJO"]["CMDB"]["HOST_CMDB"],
418
+ cmdb_request_response=vulnerability_management.config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["CMDB"]["CMDB_REQUEST_RESPONSE"],
419
+ **common_fields,
420
+ )
421
+ else:
422
+ request: ImportScanRequest = ImportScanSerializer().load(
423
+ {
424
+ "product_type_name":vulnerability_management.vm_product_type_name,
425
+ "product_name": vulnerability_management.vm_product_name,
426
+ "product_description":vulnerability_management.vm_product_description,
427
+ "code_app":vulnerability_management.vm_product_name,
428
+ **common_fields,
429
+ }
430
+ )
431
+ return request
390
432
 
391
433
  def _process_component(self, component_sbom, session_manager, engagement):
392
434
  request = {
@@ -6,7 +6,8 @@ from devsecops_engine_tools.engine_utilities.github.models.GithubPredefinedVaria
6
6
  BuildVariables,
7
7
  SystemVariables,
8
8
  ReleaseVariables,
9
- AgentVariables
9
+ AgentVariables,
10
+ VMVariables
10
11
  )
11
12
  from devsecops_engine_tools.engine_utilities.github.infrastructure.github_api import (
12
13
  GithubApi,
@@ -85,6 +86,9 @@ class GithubActions(DevopsPlatformGateway):
85
86
  "target_branch": SystemVariables.github_event_base_ref,
86
87
  "source_branch": SystemVariables.github_ref,
87
88
  "repository_provider": BuildVariables.GitHub,
89
+ "vm_product_type_name": VMVariables.Vm_Product_Type_Name,
90
+ "vm_product_name": VMVariables.Vm_Product_Name,
91
+ "vm_product_description": VMVariables.Vm_Product_Description,
88
92
  }
89
93
  try:
90
94
  return variable_map.get(variable).value()
@@ -21,7 +21,7 @@ class RuntimeLocal(DevopsPlatformGateway):
21
21
  def get_remote_config(self, repository, path, branch=""):
22
22
  remote_config_path = f"{repository}/{path}"
23
23
 
24
- with open(remote_config_path) as f:
24
+ with open(remote_config_path, 'r', encoding='utf-8') as f:
25
25
  return json.load(f)
26
26
 
27
27
  def message(self, type, message):
@@ -66,6 +66,9 @@ class RuntimeLocal(DevopsPlatformGateway):
66
66
  "temp_directory" : "DET_TEMP_DIRECTORY",
67
67
  "target_branch" : "DET_TARGET_BRANCH",
68
68
  "source_branch" : "DET_SOURCE_BRANCH",
69
- "repository_provider" : "DET_REPOSITORY_PROVIDER"
69
+ "repository_provider" : "DET_REPOSITORY_PROVIDER",
70
+ "vm_product_type_name" : "DET_VM_PRODUCT_TYPE_NAME",
71
+ "vm_product_name" : "DET_VM_PRODUCT_NAME",
72
+ "vm_product_description" : "DET_VM_PRODUCT_DESCRIPTION",
70
73
  }
71
74
  return os.environ.get(env_variables[variable], None)
@@ -29,7 +29,11 @@ class XrayScan(ToolGateway):
29
29
  if installed.returncode == 1:
30
30
  command = ["chmod", "+x", prefix]
31
31
  try:
32
- url = f"https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/{version}/jfrog-cli-linux-amd64/jf"
32
+ architecture = platform.machine()
33
+ if architecture == "aarch64":
34
+ url = f"https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/{version}/jfrog-cli-linux-arm64/jf"
35
+ else:
36
+ url = f"https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/{version}/jfrog-cli-linux-amd64/jf"
33
37
  response = requests.get(url, allow_redirects=True)
34
38
  with open(prefix, "wb") as archivo:
35
39
  archivo.write(response.content)
@@ -63,3 +63,8 @@ class AgentVariables(BaseEnum):
63
63
  Agent_WorkFolder = "Agent.WorkFolder"
64
64
  Agent_TempDirectory = "Agent.TempDirectory"
65
65
  Agent_OS = "Agent.OS"
66
+
67
+ class VMVariables(BaseEnum):
68
+ Vm_Product_Type_Name = "Vm.Product.Type.Name"
69
+ Vm_Product_Name = "Vm.Product.Name"
70
+ Vm_Product_Description = "Vm.Product.Description"
@@ -40,6 +40,7 @@ class ImportScanRequest:
40
40
  code_app: str = ""
41
41
  token_cmdb: str = ""
42
42
  host_cmdb: str = ""
43
+ cmdb_request_response: dict = None
43
44
  token_defect_dojo: str = ""
44
45
  host_defect_dojo: str = ""
45
46
  # *** config map ***
@@ -198,16 +198,17 @@ class ImportScanSerializer(Schema):
198
198
  service = fields.Str(required=False)
199
199
  group_by = fields.Str(required=False)
200
200
  test_title = fields.Str(required=False)
201
- description_product = fields.Str(required=False)
201
+ product_description = fields.Str(required=False)
202
202
  create_finding_groups_for_all_findings = fields.Str(required=False)
203
203
  tools_configuration = fields.Int(required=False, load_default=1)
204
204
  code_app = fields.Str(required=False)
205
205
  # defect-dojo credential
206
- token_cmdb = fields.Str(required=True)
207
- host_cmdb = fields.Url(required=True)
206
+ token_cmdb = fields.Str(required=False)
207
+ host_cmdb = fields.Url(required=False)
208
+ cmdb_request_response = fields.Dict(required=False)
208
209
  token_defect_dojo = fields.Str(required=True)
209
210
  host_defect_dojo = fields.Str(required=True)
210
- cmdb_mapping = fields.Dict(required=True)
211
+ cmdb_mapping = fields.Dict(required=False)
211
212
  product_type_name_mapping = fields.Dict(required=False)
212
213
  # Config remote credential
213
214
  compact_remote_config_url = fields.Str(required=False)
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import ast
2
3
  from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
3
4
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
4
5
  from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.cmdb import Cmdb
@@ -18,39 +19,89 @@ class CmdbRestConsumer:
18
19
  self.__session = session._instance
19
20
 
20
21
  def get_product_info(self, request: ImportScanRequest) -> Cmdb:
21
- data = json.dumps({"codapp": request.code_app})
22
- headers = {"tokenkey": self.__token, "Content-Type": "application/json"}
23
- logger.info("Search info of name product")
24
- cmdb_object = Cmdb(
25
- product_type_name="ORPHAN_PRODUCT_TYPE",
26
- product_name=f"{request.code_app}_Product",
27
- tag_product="ORPHAN",
28
- product_description="Orphan Product Description",
29
- codigo_app=str(request.code_app),
30
- )
22
+ method = request.cmdb_request_response.get("METHOD")
23
+ headers = self.prepare_headers(request.cmdb_request_response.get("HEADERS"))
24
+ response_format = request.cmdb_request_response.get("RESPONSE")
25
+
26
+ if method not in ["GET", "POST"]:
27
+ raise ValueError(f"Unsupported method: {method}")
28
+
29
+ return self.handle_request(method, headers, request, response_format)
30
+
31
+ def handle_request(self, method, headers, request: ImportScanRequest, response_format) -> Cmdb:
32
+ cmdb_object = self.initialize_cmdb_object(request)
33
+
31
34
  try:
32
- response = self.__session.post(self.__host, headers=headers, data=data, verify=VERIFY_CERTIFICATE)
33
- if response.status_code != 200:
34
- logger.warning(response)
35
- raise ApiError(f"Error querying cmdb: {response.reason}")
36
-
37
- if response.json() == []:
38
- e = f"Engagement: {request.code_app} not found"
39
- logger.warning(e)
40
- # Producto is Orphan
41
- return cmdb_object
42
-
43
- data = response.json()[-1]
44
- data_map = self.mapping_cmdb(data)
45
- logger.info(data_map)
46
- cmdb_object = Cmdb.from_dict(data_map)
35
+ if method == "GET":
36
+ params = self.replace_placeholders(
37
+ request.cmdb_request_response.get("PARAMS", {}),
38
+ request.code_app
39
+ )
40
+ response = self.__session.get(self.__host, headers=headers, params=params, verify=VERIFY_CERTIFICATE)
41
+ elif method == "POST":
42
+ body = self.replace_placeholders(
43
+ request.cmdb_request_response.get("BODY", {}),
44
+ request.code_app
45
+ )
46
+ body_json = json.dumps(body)
47
+ response = self.__session.post(self.__host, headers=headers, data=body_json, verify=VERIFY_CERTIFICATE)
48
+
49
+ return self.process_response(response, response_format, cmdb_object, request.code_app)
47
50
  except Exception as e:
48
51
  logger.warning(e)
49
52
  return cmdb_object
53
+
54
+ def process_response(self, response, response_format, cmdb_object, code_app) -> Cmdb:
55
+ if response.status_code != 200:
56
+ logger.warning(response)
57
+ raise ApiError(f"Error querying cmdb: {response.reason}")
58
+
59
+ if response.json() == []:
60
+ logger.warning(f"Engagement: {code_app} not found")
61
+ return cmdb_object # Producto es Orphan
62
+
63
+ data = self.get_nested_data(response, response_format)
64
+ data_map = self.mapping_cmdb(data)
65
+ logger.info(data_map)
66
+ cmdb_object = Cmdb.from_dict(data_map)
67
+ cmdb_object.codigo_app = code_app
50
68
  return cmdb_object
51
69
 
52
- def mapping_cmdb(self, data):
53
- data_map = {}
54
- for key, value in self.__mapping_cmdb.items():
55
- data_map[key] = data[value] if value in data else ""
56
- return data_map
70
+ def initialize_cmdb_object(self, request: ImportScanRequest) -> Cmdb:
71
+ return Cmdb(
72
+ product_type_name="ORPHAN_PRODUCT_TYPE",
73
+ product_name=f"{request.code_app}_Product",
74
+ tag_product="ORPHAN",
75
+ product_description="Orphan Product Description",
76
+ codigo_app=str(request.code_app),
77
+ )
78
+
79
+ def mapping_cmdb(self, data: dict) -> dict:
80
+ return {key: data.get(value, "") for key, value in self.__mapping_cmdb.items()}
81
+
82
+ def get_nested_data(self, response, keys: list) -> dict:
83
+ data = response.json()
84
+ for key in keys:
85
+ if isinstance(data, dict) and key in data:
86
+ data = data[key]
87
+ elif isinstance(data, list) and isinstance(key, int):
88
+ key = key if key >=0 else len(data) + key
89
+ if 0 <= key < len(data):
90
+ data = data[key]
91
+ else:
92
+ raise KeyError(f"Index '{key}' out of range in the current context.")
93
+ else:
94
+ raise KeyError(f"Key '{key}' not found or invalid in the current context.")
95
+ return data
96
+
97
+ def prepare_headers(self, headers: dict) -> dict:
98
+ return {key: (self.__token if value == 'tokenvalue' else value) for key, value in headers.items()}
99
+
100
+ def replace_placeholders(self, data, replacements):
101
+ data = str(data)
102
+ data = data.replace("codappvalue", replacements)
103
+ try:
104
+ return ast.literal_eval(data)
105
+ except (SyntaxError, ValueError) as e:
106
+ raise ValueError(f"Error converting string to dictionary: {e}")
107
+
@@ -54,3 +54,9 @@ class AgentVariables(BaseEnum):
54
54
  github_workspace = "github.workspace"
55
55
  runner_os = "runner.os"
56
56
  runner_tool_cache = "runner.tool.cache"
57
+
58
+
59
+ class VMVariables(BaseEnum):
60
+ Vm_Product_Type_Name = "Vm.Product.Type.Name"
61
+ Vm_Product_Name = "Vm.Product.Name"
62
+ Vm_Product_Description = "Vm.Product.Description"
@@ -99,7 +99,10 @@ class ReportSonar:
99
99
  build_id = self.devops_platform_gateway.get_variable("build_id"),
100
100
  branch_tag = branch,
101
101
  commit_hash = self.devops_platform_gateway.get_variable("commit_hash"),
102
- environment = environment
102
+ environment = environment,
103
+ vm_product_type_name = self.devops_platform_gateway.get_variable("vm_product_type_name"),
104
+ vm_product_name = self.devops_platform_gateway.get_variable("vm_product_name"),
105
+ vm_product_description = self.devops_platform_gateway.get_variable("vm_product_description"),
103
106
  )
104
107
 
105
108
  for project_key in project_keys:
@@ -1 +1 @@
1
- version = '1.27.1'
1
+ version = '1.28.1'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.27.1
3
+ Version: 1.28.1
4
4
  Summary: Tool for DevSecOps strategy
5
5
  Home-page: https://github.com/bancolombia/devsecops-engine-tools
6
6
  Author: Bancolombia DevSecOps Team
@@ -99,7 +99,7 @@ devsecops-engine-tools --platform_devops ["local","azure","github"] --remote_con
99
99
  ┃ ┗ 📜ConfigTool.json
100
100
  ┃ ┗ 📜Exclusions.json
101
101
  ```
102
-
102
+ For more information visit [here](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/example_remote_config_local/README.md)
103
103
  #### Tools available for the modules (Configuration engine_core/ConfigTool.json)
104
104
 
105
105
 
@@ -1,5 +1,5 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=w05otwvyeGYuTWZc9-IuWdR2Iy9E4ang6ZB3e7dnLus,19
2
+ devsecops_engine_tools/version.py,sha256=qpSmTI_EN8O9XIYv87VrPrn4yuwbcHDL4fFlyWxyxbg,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
@@ -17,7 +17,7 @@ devsecops_engine_tools/engine_core/src/domain/model/level_compliance.py,sha256=n
17
17
  devsecops_engine_tools/engine_core/src/domain/model/level_vulnerability.py,sha256=0sySEnFNkS2Y8uF5GUVAYehXw-i2OglUClkVobnSTPc,257
18
18
  devsecops_engine_tools/engine_core/src/domain/model/report.py,sha256=09QV_jBQbucoiGM_PjVzRwWvvnebAx24Vehs2bqEe2o,1929
19
19
  devsecops_engine_tools/engine_core/src/domain/model/threshold.py,sha256=TCBECuvoC3-9g8vg3iKWGIixssNecP0iUaZ9Qzv0n7w,596
20
- devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py,sha256=5RcMHpeqznrTOpkjLuqekA_Bqf2Qr-w6OZ5Eoi3b-bs,465
20
+ devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py,sha256=04ALQoTM4uoea9s505WCDw18J3Cvu6phf54ZTKODN64,552
21
21
  devsecops_engine_tools/engine_core/src/domain/model/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py,sha256=7u7Qq2fq_QW7PJmGnSKZZyVSjTwnj3Oj-HBpj6nI8jk,684
23
23
  devsecops_engine_tools/engine_core/src/domain/model/gateway/metrics_manager_gateway.py,sha256=u_ivbmCyymw0Je7gRFg0uD9iDmZfTbteH5UwcgP0JAs,191
@@ -28,7 +28,7 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_manage
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=0JK4U5LGxzrLVZOw68j1PMxmLTDPru7Kts_-RtAG0jA,15965
30
30
  devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=RirHqsW5AhGjV7ITa13bW_BfM6VE99DffrPASoB9SN0,9403
31
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=PpbVGwG4UNgBtEdkX78Jqf3gyrrALV0S2NtQeT79GIg,9412
31
+ devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=q1RGSDT7LSpPn7NyA9Pl4QGeQLQ3kvawzqmXrVQIKTs,9694
32
32
  devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=Xi0iNnPrFgqd2cBdAA5E_tgouhxs-BTo016aolnGgv8,2413
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
@@ -36,17 +36,17 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init
36
36
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=4h1k5EQnL_3NoGI6oRyVibkN5u3s4j5VUthNU1m1zQc,2206
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
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=OjEMwJoWtx6BSxQSP2QKHKUfGUMhSI_d1-OP-SYka6o,4858
39
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=buCBJ6kAg-5b_7P-gWzem6NEMbk5lK9Hx0Zuf-BQfXQ,5090
40
40
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=qT-tqdgh1vXCdgARch_XH0lmIwm7Iw-K--P75zEFhG0,22829
41
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=Ymr2Xk1BUvRO6mzgmApdKLbx_R-0J6nbTYUa9SlFEk4,24420
42
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=Q1WYrnOI5dQSeeAzj7MVQr0ZxjDGCFM0b2DemvUSW8E,3704
43
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=KCg6tTDncasrRZbB20QiLZNE6TKYkfgQ9zP0wPd3xe0,3925
44
44
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py,sha256=NkXu7JYoCHXIx0HzHl4DhdLGEpocPMIqs2L0ADS-RcI,5369
46
46
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_rich_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_rich_table/printer_rich_table.py,sha256=LPr3xSv0I7ENEdu1xj8ve5PXzpUohs7hbQvHjDSaUuE,3028
48
48
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py,sha256=mM1CpoNHfGYAAcXHZrvSS1OXoseNqDPowWcR0cL_UE4,2535
49
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py,sha256=O1ZstzA7JHoFvNCNA_mHK1w7ZWCfMEXz-CZa48tDQqg,2748
50
50
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/syft/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/syft/syft.py,sha256=hP5MitHTeZf3Ia-xwi5bUdIU5hIwbUNuDSzcsqlxG5c,4457
52
52
  devsecops_engine_tools/engine_core/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -213,7 +213,7 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_
213
213
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=bU2u__bgV_MmwB8JCVAq1NHvkKfMV2-mFkteQ2iA-j8,4864
214
214
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
215
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=ZUk-e1PKzV7uRAT7BpET363pgl2eMnXMCGSpewsOpKg,2236
216
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=u8SAtVuTqJ6o2B6jC-gMNG2Pn7a_bHWT_B1a_55iYZ4,7408
216
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=xFNvfPd0L-dc4Ghm-1PtKEU0ueR_XCRZEaJNggug_9U,7648
217
217
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
218
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=gZZRX1oGg1tyZD3yikBXBbH7u33v-nzz6tuSJH5TApk,3453
219
219
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -224,7 +224,7 @@ devsecops_engine_tools/engine_utilities/azuredevops/__init__.py,sha256=47DEQpj8H
224
224
  devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
225
  devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py,sha256=l_sRaktn51NEeJowtEJWfUnUmjaU9uRTqXo4jcNR24E,2968
226
226
  devsecops_engine_tools/engine_utilities/azuredevops/models/AzureMessageLoggingPipeline.py,sha256=pCwlPDDl-hgvZ9gvceuC8GsKbsMhRm3ykhFFVByVqcI,664
227
- devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py,sha256=r-PpcKlyuXzKHx6ao4SuVI9dOKMVnjL1U_b-yfJK0o4,2387
227
+ devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py,sha256=z9AGtc64o-BNTngiowRJFBlXmo_JmWqenL8YxdLs0aE,2561
228
228
  devsecops_engine_tools/engine_utilities/azuredevops/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
229
  devsecops_engine_tools/engine_utilities/defect_dojo/__init__.py,sha256=pVSjIx2caIhX0E67TbXtual0Jz3Ha28aNFnSJKeRsts,400
230
230
  devsecops_engine_tools/engine_utilities/defect_dojo/hello_world.py,sha256=WDvgS22lIJJNoIM4b6mrxT8Bu_6hADmrCOZgvf5yGVY,45
@@ -248,10 +248,10 @@ devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type_l
248
248
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/scan_configuration.py,sha256=-uVxaTkxnDmUUGQUdN9x_VKR8KJUagJKnGR6B1emoEU,577
249
249
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
250
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/finding.py,sha256=RinG3ISc-u_3VXVqntwdcQvZoQdmHPCvDHWSvnkCkcU,2619
251
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py,sha256=Y1ewQ-9wM287MSEraT4myG1RDl4LjmeqansR3-Exn7U,4974
251
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py,sha256=UfvICLF-Wjii3iqvsRq0Tpc-quK4t3oS8U79tozzjfA,5014
252
252
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
253
253
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/finding.py,sha256=HNkA_sHSMfQKAcZht-rRPdwm0eHYK2wxM6u61_bl2uE,5233
254
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py,sha256=q8Zu8zQWFTWFkQnt4xqU4bZO7ojdVbdtAIfEqrfAB2c,7230
254
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py,sha256=AYYPtuAOKagT5qmFvdwuGQ_GupZfQNdMCyMaKzCkTDE,7290
255
255
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
256
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/cmdb.py,sha256=BUOdvP39bEMQ6Unr2hB28eljVGU2Uv8dDEkzRyEJgyQ,2650
257
257
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/component.py,sha256=_icc-ZAqw-aVgE5J4VH8Q7fSqpCgEGcfmurgRIN9NqM,448
@@ -261,7 +261,7 @@ devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan
261
261
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/product.py,sha256=6f6eABdC79zOopMe_Rif3XoGG-yFfq9x_EOkevTuGDY,368
262
262
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
263
263
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py,sha256=Mx1_ed_-91s6u7roO27g6n5mv1IwniXP9AQdmj7HE-g,2630
264
+ devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py,sha256=waucNjkwT9eo-ykeZKxAMZHQCnI-R9Keu0091wVfyOQ,4942
265
265
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/component.py,sha256=-J0Sv7z709Hctb-tgM0wmp5ofE4WKEIA_uJwzvMnStE,2132
266
266
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py,sha256=39qqmTxECRY5IoFvK_B_R0vfwfJwLbdhGt_pcdvdVIE,3571
267
267
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py,sha256=k-z2tg_NPKMni7rZgXMZa2-t8_8F35r8YtF1EcjMyDs,2355
@@ -281,7 +281,7 @@ devsecops_engine_tools/engine_utilities/git_cli/model/gateway/git_gateway.py,sha
281
281
  devsecops_engine_tools/engine_utilities/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
282
282
  devsecops_engine_tools/engine_utilities/github/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
283
283
  devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py,sha256=6c4YXGsKZEYPSy6AtMx9arxR4JpYPz1C0VleIV2n2Ms,2779
284
- devsecops_engine_tools/engine_utilities/github/models/GithubPredefinedVariables.py,sha256=LmIvCVDyszInElu_-Pt034q1Zaajp-QA3ge-RtimxHg,1589
284
+ devsecops_engine_tools/engine_utilities/github/models/GithubPredefinedVariables.py,sha256=8V7rX3jhADkE7wvI4XXWNiIdD8tI_U6JScrd9BY3RqU,1764
285
285
  devsecops_engine_tools/engine_utilities/github/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
286
286
  devsecops_engine_tools/engine_utilities/input_validations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
287
  devsecops_engine_tools/engine_utilities/input_validations/env_utils.py,sha256=nHp9YIuG1k-IvxssQslrE9ny62juJMovmBTzcM7PPk0,258
@@ -297,7 +297,7 @@ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/__init__.py,s
297
297
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
298
298
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/sonar_gateway.py,sha256=PCrGq7NOINAFPvmX-5V5191MGhahsnQeWXUB1-xL4Xw,1279
299
299
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
300
- devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=qNdEQcoRqGDvs2AiDIR9b3zlmBDEmvtdX3eGyDxVjEo,8892
300
+ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=kC1GzbVA8mX3N1Rp7gX9P-emb6gcbQbXEEspYROOmXs,9193
301
301
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
302
302
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
303
303
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -317,8 +317,8 @@ devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGax
317
317
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
318
318
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=Z0fdhB3r-dxU0nGSD9zW_B4r2Qol1rUnUCkhFR0U-HQ,487
319
319
  devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=_yaXWHN1pi2xFFKg0yKbb4fsK_ZRv7Dk_9N1FtPS72k,5964
320
- devsecops_engine_tools-1.27.1.dist-info/METADATA,sha256=mi74kdLQYx00o0T3I9GGHxUjSlEPlxjn2tTtgaexzog,11025
321
- devsecops_engine_tools-1.27.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
322
- devsecops_engine_tools-1.27.1.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
323
- devsecops_engine_tools-1.27.1.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
324
- devsecops_engine_tools-1.27.1.dist-info/RECORD,,
320
+ devsecops_engine_tools-1.28.1.dist-info/METADATA,sha256=1sF3pay4XmB2OKiYGmlo8XPYITisxAHru_P375F41ow,11162
321
+ devsecops_engine_tools-1.28.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
322
+ devsecops_engine_tools-1.28.1.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
323
+ devsecops_engine_tools-1.28.1.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
324
+ devsecops_engine_tools-1.28.1.dist-info/RECORD,,