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

@@ -13,6 +13,7 @@ from devsecops_engine_tools.engine_utilities.defect_dojo import (
13
13
  Engagement,
14
14
  Product,
15
15
  Component,
16
+ FindingExclusion
16
17
  )
17
18
  from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
18
19
  from devsecops_engine_tools.engine_core.src.domain.model.report import Report
@@ -42,9 +43,11 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
42
43
  @dataclass
43
44
  class DefectDojoPlatform(VulnerabilityManagementGateway):
44
45
 
46
+ RISK_ACCEPTED = "Risk Accepted"
45
47
  OUT_OF_SCOPE = "Out of Scope"
46
48
  FALSE_POSITIVE = "False Positive"
47
49
  TRANSFERRED_FINDING = "Transferred Finding"
50
+ ON_WHITELIST = "On Whitelist"
48
51
 
49
52
  def send_vulnerability_management(
50
53
  self, vulnerability_management: VulnerabilityManagement
@@ -203,6 +206,11 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
203
206
  "tags": tool,
204
207
  "limit": dd_limits_query,
205
208
  }
209
+ white_list_query_params = {
210
+ "risk_status": self.ON_WHITELIST,
211
+ "tags": tool,
212
+ "limit": dd_limits_query,
213
+ }
206
214
 
207
215
  exclusions_risk_accepted = self._get_findings_with_exclusions(
208
216
  session_manager,
@@ -211,7 +219,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
211
219
  risk_accepted_query_params,
212
220
  tool,
213
221
  self._format_date_to_dd_format,
214
- "Risk Accepted",
222
+ self.RISK_ACCEPTED,
215
223
  )
216
224
 
217
225
  exclusions_false_positive = self._get_findings_with_exclusions(
@@ -244,11 +252,29 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
244
252
  self.TRANSFERRED_FINDING,
245
253
  )
246
254
 
255
+ white_list = self._get_finding_exclusion(
256
+ session_manager, dd_max_retries, {
257
+ "type": "white_list",
258
+ }
259
+ )
260
+
261
+ exclusions_white_list = self._get_findings_with_exclusions(
262
+ session_manager,
263
+ service,
264
+ dd_max_retries,
265
+ white_list_query_params,
266
+ tool,
267
+ self._format_date_to_dd_format,
268
+ self.ON_WHITELIST,
269
+ white_list=white_list,
270
+ )
271
+
247
272
  return (
248
273
  list(exclusions_risk_accepted)
249
274
  + list(exclusions_false_positive)
250
275
  + list(exclusions_out_of_scope)
251
276
  + list(exclusions_transfer_finding)
277
+ + list(exclusions_white_list)
252
278
  )
253
279
  except Exception as ex:
254
280
  raise ExceptionFindingsExcepted(
@@ -272,8 +298,10 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
272
298
  "HOST_DEFECT_DOJO"
273
299
  ]
274
300
 
301
+ session_manager = self._get_session_manager(dict_args, secret_tool, config_tool)
302
+
275
303
  findings = self._get_findings(
276
- self._get_session_manager(dict_args, secret_tool, config_tool),
304
+ session_manager,
277
305
  service,
278
306
  max_retries,
279
307
  all_findings_query_params,
@@ -286,8 +314,14 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
286
314
  )
287
315
  )
288
316
 
317
+ white_list = self._get_finding_exclusion(
318
+ session_manager, max_retries, {
319
+ "type": "white_list",
320
+ }
321
+ )
322
+
289
323
  all_exclusions = self._get_report_exclusions(
290
- all_findings, self._format_date_to_dd_format, host_dd=host_dd
324
+ all_findings, self._format_date_to_dd_format, host_dd=host_dd, white_list=white_list
291
325
  )
292
326
 
293
327
  return all_findings, all_exclusions
@@ -461,25 +495,25 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
461
495
  config_tool["VULNERABILITY_MANAGER"]["DEFECT_DOJO"]["HOST_DEFECT_DOJO"],
462
496
  )
463
497
 
464
- def _get_report_exclusions(self, total_findings, date_fn, host_dd):
498
+ def _get_report_exclusions(self, total_findings, date_fn, host_dd, **kwargs):
465
499
  exclusions = []
466
500
  for finding in total_findings:
467
501
  if finding.risk_accepted:
468
502
  exclusions.append(
469
503
  self._create_report_exclusion(
470
- finding, date_fn, "engine_risk", "Risk Accepted", host_dd
504
+ finding, date_fn, "engine_risk", self.RISK_ACCEPTED, host_dd, **kwargs
471
505
  )
472
506
  )
473
507
  elif finding.false_p:
474
508
  exclusions.append(
475
509
  self._create_report_exclusion(
476
- finding, date_fn, "engine_risk", self.FALSE_POSITIVE, host_dd
510
+ finding, date_fn, "engine_risk", self.FALSE_POSITIVE, host_dd, **kwargs
477
511
  )
478
512
  )
479
513
  elif finding.out_of_scope:
480
514
  exclusions.append(
481
515
  self._create_report_exclusion(
482
- finding, date_fn, "engine_risk", self.OUT_OF_SCOPE, host_dd
516
+ finding, date_fn, "engine_risk", self.OUT_OF_SCOPE, host_dd, **kwargs
483
517
  )
484
518
  )
485
519
  elif finding.risk_status == "Transfer Accepted":
@@ -490,18 +524,26 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
490
524
  "engine_risk",
491
525
  self.TRANSFERRED_FINDING,
492
526
  host_dd,
527
+ **kwargs
528
+ )
529
+ )
530
+ elif finding.risk_status == self.ON_WHITELIST:
531
+ exclusions.append(
532
+ self._create_report_exclusion(
533
+ finding, date_fn, "engine_risk", self.ON_WHITELIST, host_dd, **kwargs
493
534
  )
494
535
  )
495
536
  return exclusions
496
537
 
497
538
  def _get_findings_with_exclusions(
498
- self, session_manager, service, max_retries, query_params, tool, date_fn, reason
539
+ self, session_manager, service, max_retries, query_params, tool, date_fn, reason, **kwargs
499
540
  ):
500
541
  findings = self._get_findings(
501
542
  session_manager, service, max_retries, query_params
502
543
  )
544
+
503
545
  return map(
504
- partial(self._create_exclusion, date_fn=date_fn, tool=tool, reason=reason),
546
+ partial(self._create_exclusion, date_fn=date_fn, tool=tool, reason=reason, **kwargs),
505
547
  findings,
506
548
  )
507
549
 
@@ -512,6 +554,14 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
512
554
  ).results
513
555
 
514
556
  return self._retries_requests(request_func, max_retries, retry_delay=5)
557
+
558
+ def _get_finding_exclusion(self, session_manager, max_retries, query_params):
559
+ def request_func():
560
+ return FindingExclusion.get_finding_exclusion(
561
+ session=session_manager, **query_params
562
+ ).results
563
+
564
+ return self._retries_requests(request_func, max_retries, retry_delay=5)
515
565
 
516
566
  def _retries_requests(self, request_func, max_retries, retry_delay):
517
567
  for attempt in range(max_retries):
@@ -526,23 +576,34 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
526
576
  logger.error("Maximum number of retries reached, aborting.")
527
577
  raise e
528
578
 
529
- def _date_reason_based(self, finding, date_fn, reason):
530
- if reason in [self.FALSE_POSITIVE, self.OUT_OF_SCOPE]:
531
- create_date = date_fn(finding.last_status_update)
532
- expired_date = date_fn(None)
533
- elif reason == self.TRANSFERRED_FINDING:
534
- create_date = date_fn(finding.transfer_finding.date)
535
- expired_date = date_fn(finding.transfer_finding.expiration_date)
536
- else:
537
- last_accepted_risk = finding.accepted_risks[-1]
538
- create_date = date_fn(last_accepted_risk["created"])
539
- expired_date = date_fn(last_accepted_risk["expiration_date"])
540
579
 
541
- return create_date, expired_date
580
+ def _date_reason_based(self, finding, date_fn, reason, tool, **kwargs):
581
+ def get_vuln_id(finding, tool):
582
+ if tool == "engine_risk":
583
+ return finding.id[0]["vulnerability_id"] if finding.id else finding.vuln_id_from_tool
584
+ else:
585
+ return finding.vulnerability_ids[0]["vulnerability_id"] if finding.vulnerability_ids else finding.vuln_id_from_tool
586
+
587
+ def get_dates_from_whitelist(vuln_id, white_list):
588
+ matching_finding = next(filter(lambda x: x.unique_id_from_tool == vuln_id, white_list), None)
589
+ if matching_finding:
590
+ return date_fn(matching_finding.create_date), date_fn(matching_finding.expiration_date)
591
+ return date_fn(None), date_fn(None)
592
+
593
+ reason_to_dates = {
594
+ self.FALSE_POSITIVE: lambda: (date_fn(finding.last_status_update), date_fn(None)),
595
+ self.OUT_OF_SCOPE: lambda: (date_fn(finding.last_status_update), date_fn(None)),
596
+ self.TRANSFERRED_FINDING: lambda: (date_fn(finding.transfer_finding.date), date_fn(finding.transfer_finding.expiration_date)),
597
+ self.RISK_ACCEPTED: lambda: (date_fn(finding.accepted_risks[-1]["created"]), date_fn(finding.accepted_risks[-1]["expiration_date"])),
598
+ self.ON_WHITELIST: lambda: get_dates_from_whitelist(get_vuln_id(finding, tool), kwargs.get("white_list", [])),
599
+ }
542
600
 
543
- def _create_exclusion(self, finding, date_fn, tool, reason):
544
- create_date, expired_date = self._date_reason_based(finding, date_fn, reason)
601
+ create_date, expired_date = reason_to_dates.get(reason, lambda: (date_fn(None), date_fn(None)))()
602
+ return create_date, expired_date
545
603
 
604
+ def _create_exclusion(self, finding, date_fn, tool, reason, **kwargs):
605
+ create_date, expired_date = self._date_reason_based(finding, date_fn, reason, tool, **kwargs)
606
+
546
607
  return Exclusions(
547
608
  id=(
548
609
  finding.vuln_id_from_tool
@@ -560,8 +621,8 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
560
621
  reason=reason,
561
622
  )
562
623
 
563
- def _create_report_exclusion(self, finding, date_fn, tool, reason, host_dd):
564
- create_date, expired_date = self._date_reason_based(finding, date_fn, reason)
624
+ def _create_report_exclusion(self, finding, date_fn, tool, reason, host_dd, **kwargs):
625
+ create_date, expired_date = self._date_reason_based(finding, date_fn, reason, tool, **kwargs)
565
626
 
566
627
  return Exclusions(
567
628
  id=(
@@ -5,4 +5,5 @@ from .applications.finding import Finding
5
5
  from .applications.connect import Connect
6
6
  from .applications.engagement import Engagement
7
7
  from .applications.product import Product
8
- from .applications.component import Component
8
+ from .applications.component import Component
9
+ from .applications.finding_exclusion import FindingExclusion
@@ -25,5 +25,4 @@ class Component:
25
25
  uc = ComponentUserCase(rest_component)
26
26
  return uc.post(request)
27
27
  except ApiError as e:
28
- logger.error(f"Error during create component: {e}")
29
28
  raise e
@@ -1,9 +1,6 @@
1
- from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.finding import FindingRequest
2
1
  from devsecops_engine_tools.engine_utilities.defect_dojo.domain.serializers.finding import FindingSerializer
3
2
  from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.finding import FindingRestConsumer
4
3
  from devsecops_engine_tools.engine_utilities.defect_dojo.domain.user_case.finding import FindingUserCase, FindingGetUserCase
5
- from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
6
- from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
7
4
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
8
5
  from devsecops_engine_tools.engine_utilities import settings
9
6
 
@@ -0,0 +1,14 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
2
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.user_case.finding_exclusion import FindingExclusionUserCase
3
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.finding_exclusion import FindingExclusionRestConsumer
4
+
5
+ class FindingExclusion:
6
+ @staticmethod
7
+ def get_finding_exclusion(session, **request):
8
+ try:
9
+ rest_finding_exclusion = FindingExclusionRestConsumer(session=session)
10
+
11
+ uc = FindingExclusionUserCase(rest_finding_exclusion)
12
+ return uc.execute(request)
13
+ except ApiError as e:
14
+ raise e
@@ -0,0 +1,20 @@
1
+ import dataclasses
2
+ from typing import List
3
+ from devsecops_engine_tools.engine_utilities.utils.dataclass_classmethod import FromDictMixin
4
+
5
+
6
+ @dataclasses.dataclass
7
+ class FindingExclusion(FromDictMixin):
8
+ uuid: str = ""
9
+ unique_id_from_tool: str = ""
10
+ type: str = ""
11
+ create_date: str = ""
12
+ expiration_date: str = ""
13
+
14
+
15
+ @dataclasses.dataclass
16
+ class FindingExclusionList(FromDictMixin):
17
+ count: int = 0
18
+ next = None
19
+ previous = None
20
+ results: List[FindingExclusion] = dataclasses.field(default_factory=list)
@@ -63,7 +63,7 @@ class FindingSerializer(Schema):
63
63
  reviewers = fields.List(fields.Int, requerided=False)
64
64
  risk_accetance = fields.Int(requerided=False)
65
65
  risk_status = fields.Str(
66
- required=False, validate=validate.OneOf(["Risk Pending", "Risk Rejected", "Risk Expired", "Risk Accepted", "Risk Active", "Transfer Pending", "Transfer Rejected", "Transfer Expired", "Transfer Accepted"])
66
+ required=False, validate=validate.OneOf(["Risk Pending", "Risk Rejected", "Risk Expired", "Risk Accepted", "Risk Active", "Transfer Pending", "Transfer Rejected", "Transfer Expired", "Transfer Accepted", "On Whitelist", "On Blacklist"])
67
67
  )
68
68
  risk_accepted = fields.Bool(requerided=False)
69
69
  sast_sink_object = fields.Str(requeride=False)
@@ -0,0 +1,9 @@
1
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.finding_exclusion import FindingExclusionRestConsumer
2
+
3
+ class FindingExclusionUserCase:
4
+ def __init__(self, rest_finding_exclusion: FindingExclusionRestConsumer):
5
+ self.__rest_finding_exclusion = rest_finding_exclusion
6
+
7
+ def execute(self, request):
8
+ response = self.__rest_finding_exclusion.get_finding_exclusions(request)
9
+ return response
@@ -66,12 +66,12 @@ class ImportScanUserCase:
66
66
  with id {product_type_id}"
67
67
  )
68
68
 
69
- product = self.__rest_product.post_product(request, product_type_id)
70
- product_id = product.id
71
- logger.info(
72
- f"product created: {product.name}\
73
- found with id: {product.id}"
74
- )
69
+ product = self.__rest_product.post_product(request, product_type_id)
70
+ product_id = product.id
71
+ logger.info(
72
+ f"product created: {product.name}\
73
+ found with id: {product.id}"
74
+ )
75
75
 
76
76
  api_scan_bool = re.search(" API ", request.scan_type)
77
77
  if api_scan_bool:
@@ -0,0 +1,28 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
2
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
3
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.finding_exclusion import FindingExclusionList
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
5
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
6
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
7
+
8
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
9
+
10
+ class FindingExclusionRestConsumer:
11
+ def __init__(self, session: SessionManager):
12
+ self.__token = session._token
13
+ self.__host = session._host
14
+ self.__session = session._instance
15
+
16
+
17
+ def get_finding_exclusions(self, request) -> FindingExclusionList:
18
+ url = f"{self.__host}/api/v2/finding_exclusions/"
19
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
20
+ try:
21
+ response = self.__session.get(url, headers=headers, params=request, verify=VERIFY_CERTIFICATE)
22
+ if response.status_code != 200:
23
+ raise ApiError(response.json())
24
+ finding_exclusions_object = FindingExclusionList.from_dict(response.json())
25
+ except Exception as e:
26
+ logger.error(f"from dict FindingExclusion: {e}")
27
+ raise ApiError(e)
28
+ return finding_exclusions_object
@@ -1 +1 @@
1
- version = '1.30.2'
1
+ version = '1.31.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.30.2
3
+ Version: 1.31.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
@@ -36,6 +36,7 @@ Requires-Dist: packageurl-python==0.15.6
36
36
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=bancolombia_devsecops-engine-tools&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=bancolombia_devsecops-engine-tools)
37
37
  [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=bancolombia_devsecops-engine-tools&metric=coverage)](https://sonarcloud.io/summary/new_code?id=bancolombia_devsecops-engine-tools)
38
38
  [![Python Version](https://img.shields.io/badge/python%20-%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20-blue)](#)
39
+ [![PyPI](https://img.shields.io/pypi/v/devsecops-engine-tools)](https://pypi.org/project/devsecops-engine-tools/)
39
40
  [![Docker Pulls](https://img.shields.io/docker/pulls/bancolombia/devsecops-engine-tools
40
41
  )](https://hub.docker.com/r/bancolombia/devsecops-engine-tools)
41
42
 
@@ -1,5 +1,5 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=QZYYG97jDk2EtK7v0CNUVwwZqOg9qP-xrf5aus8iFlY,19
2
+ devsecops_engine_tools/version.py,sha256=dORcM9p3Gq4eeQIYB7RelGt7lAEzbOinMO8jaEM2CLo,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
@@ -38,7 +38,7 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secret
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=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=35J9vfiGYJV_JMUum4ji7nj-DLRcnZhf9DKY2FkcmKY,24998
41
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=kUGFYhCm4-gZajqZCdhsyDecILWQtFj3dmcIT07pNXU,27745
42
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
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
@@ -226,14 +226,15 @@ devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_
226
226
  devsecops_engine_tools/engine_utilities/azuredevops/models/AzureMessageLoggingPipeline.py,sha256=pCwlPDDl-hgvZ9gvceuC8GsKbsMhRm3ykhFFVByVqcI,664
227
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
- devsecops_engine_tools/engine_utilities/defect_dojo/__init__.py,sha256=pVSjIx2caIhX0E67TbXtual0Jz3Ha28aNFnSJKeRsts,400
229
+ devsecops_engine_tools/engine_utilities/defect_dojo/__init__.py,sha256=P-HiaN1sgDUekalZPCzSTF-zuqyXpNG2uVEsMDaC0ro,462
230
230
  devsecops_engine_tools/engine_utilities/defect_dojo/hello_world.py,sha256=WDvgS22lIJJNoIM4b6mrxT8Bu_6hADmrCOZgvf5yGVY,45
231
231
  devsecops_engine_tools/engine_utilities/defect_dojo/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/component.py,sha256=fIP08EHkqbNii_qJQ4ULa-ELk_9Ggd3SV1M6biepYb8,1239
232
+ devsecops_engine_tools/engine_utilities/defect_dojo/applications/component.py,sha256=Y6vA1nRfMCoqJEceRBDQ_QLpIKASqB-t8V1yqao-eUQ,1175
233
233
  devsecops_engine_tools/engine_utilities/defect_dojo/applications/connect.py,sha256=tRvNN-zVKBJbHMvfW97SCsZoyjGaKttcQhLOKrbjK9E,2079
234
234
  devsecops_engine_tools/engine_utilities/defect_dojo/applications/defect_dojo.py,sha256=gJMBVtE--Kvdc908fQa2T35mYyBXAWNTxM0DKsZ7e-w,2615
235
235
  devsecops_engine_tools/engine_utilities/defect_dojo/applications/engagement.py,sha256=sPTeQs6QHg07QNthqhY3caVbG54vDkd_E_KJpBvgTk4,878
236
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/finding.py,sha256=SBbFawywfvfpqFjFdnK-LaoC05bqJe2-ee6gYntMLUk,1727
236
+ devsecops_engine_tools/engine_utilities/defect_dojo/applications/finding.py,sha256=Cw5_TElo0D0Ec8X0lu-La2H9Pp1rsrmw-2Wv-0w_9oI,1451
237
+ devsecops_engine_tools/engine_utilities/defect_dojo/applications/finding_exclusion.py,sha256=StnDFV3vGhBffBEs-jfV9nMprzRucm5VJqtZFWKF3Fo,689
237
238
  devsecops_engine_tools/engine_utilities/defect_dojo/applications/product.py,sha256=ogJM1AqfW-f_bJP4JWeHHM82PqN7G-jKKTbO8FM2x_Q,598
238
239
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
240
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -241,6 +242,7 @@ devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/cmdb.py,sha256
241
242
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/component.py,sha256=KYyWMUQcPsraqRaw0KY9eBaZPfajfBiskgOuwTI8mnA,483
242
243
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/engagement.py,sha256=MXb7c526tz0zSDS8xGPC5IjTMF9g9qtzcEKLyfcY89c,1393
243
244
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/finding.py,sha256=0Xj7BOlC30LCdBjIkviB2QmmdSj0GlDvT1-TbnaT8nE,3201
245
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/finding_exclusion.py,sha256=mz6RDW3Xk3VHNQcUHm9cCMAyX6Ultcb-IZy9N59qPI4,530
244
246
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product.py,sha256=KL5ue6icA8HH1xKkmAJzElAat3OOYU3_lt3xuNfo7Mc,1272
245
247
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_list.py,sha256=yFo8eYOGJiJMkU5pGpW0r1o5uVaNP5iA80-5w_MyWxU,664
246
248
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type.py,sha256=2KVfRB0qgPO7osY4PBEQSOBOqRnZs0UzUZkS1guisBQ,524
@@ -250,14 +252,15 @@ devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/__ini
250
252
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/finding.py,sha256=RinG3ISc-u_3VXVqntwdcQvZoQdmHPCvDHWSvnkCkcU,2619
251
253
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py,sha256=UfvICLF-Wjii3iqvsRq0Tpc-quK4t3oS8U79tozzjfA,5014
252
254
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
253
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/finding.py,sha256=HNkA_sHSMfQKAcZht-rRPdwm0eHYK2wxM6u61_bl2uE,5233
255
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/finding.py,sha256=4IQLjqgyImVdn8AxoU3UKgXnvU-F-x7Tm2bJdp6nHm4,5265
254
256
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py,sha256=AYYPtuAOKagT5qmFvdwuGQ_GupZfQNdMCyMaKzCkTDE,7290
255
257
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
258
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/cmdb.py,sha256=BUOdvP39bEMQ6Unr2hB28eljVGU2Uv8dDEkzRyEJgyQ,2650
257
259
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/component.py,sha256=_icc-ZAqw-aVgE5J4VH8Q7fSqpCgEGcfmurgRIN9NqM,448
258
260
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/engagement.py,sha256=SVX-weFRPT3DK7w6IBrLuWS4L6vboMuZtwXAQmIHfEE,406
259
261
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding.py,sha256=TjfpdJtaBwQvT8XNJKBf6tuOASOAw7ZiOxJbqsKadaA,1689
260
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py,sha256=ldgiAo8nDt4-Crdgh7LX_8VRm6P_cR5T6_O06tSups0,6951
262
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding_exclusion.py,sha256=VqdwBiQGc9XFpatvbXGL837LtTxkWlfhWH46W1cTbCg,455
263
+ devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py,sha256=eT1f1dtrLMLa41Mv_wnjg1L7bCBGKGjSpxD4hIDMx4Y,6927
261
264
  devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/product.py,sha256=6f6eABdC79zOopMe_Rif3XoGG-yFfq9x_EOkevTuGDY,368
262
265
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
263
266
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -265,6 +268,7 @@ devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapt
265
268
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/component.py,sha256=-J0Sv7z709Hctb-tgM0wmp5ofE4WKEIA_uJwzvMnStE,2132
266
269
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py,sha256=39qqmTxECRY5IoFvK_B_R0vfwfJwLbdhGt_pcdvdVIE,3571
267
270
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py,sha256=k-z2tg_NPKMni7rZgXMZa2-t8_8F35r8YtF1EcjMyDs,2355
271
+ devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding_exclusion.py,sha256=BL4xf1FE5tMsBri0LetxBRUgOgLogdoHX97rQkHh10g,1524
268
272
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py,sha256=68Qd8o0oSxFG-3cRlX97BkX9muS6k64DGslGtX9sx6M,5897
269
273
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product.py,sha256=DhiLPv8KyRhHBRhvF0ULhchhGAT8SQyn1ftiuou_aKw,2576
270
274
  devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py,sha256=9Lzsh9HCs4rbJ2b6X11renvYU3g6s-1q2NUDwbYX0qY,3051
@@ -317,8 +321,8 @@ devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGax
317
321
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
318
322
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=Z0fdhB3r-dxU0nGSD9zW_B4r2Qol1rUnUCkhFR0U-HQ,487
319
323
  devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=_yaXWHN1pi2xFFKg0yKbb4fsK_ZRv7Dk_9N1FtPS72k,5964
320
- devsecops_engine_tools-1.30.2.dist-info/METADATA,sha256=1JGcYhIWKK_8Nt2XcaRp_5U1HhWKrx3yOVKfxKb8ULo,11162
321
- devsecops_engine_tools-1.30.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
322
- devsecops_engine_tools-1.30.2.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
323
- devsecops_engine_tools-1.30.2.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
324
- devsecops_engine_tools-1.30.2.dist-info/RECORD,,
324
+ devsecops_engine_tools-1.31.0.dist-info/METADATA,sha256=pvTlUKMErHnqovHTD6U9B8lHN9TSbSXj_H8B9D00HeI,11276
325
+ devsecops_engine_tools-1.31.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
326
+ devsecops_engine_tools-1.31.0.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
327
+ devsecops_engine_tools-1.31.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
328
+ devsecops_engine_tools-1.31.0.dist-info/RECORD,,