regscale-cli 6.20.4.1__py3-none-any.whl → 6.20.5.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 regscale-cli might be problematic. Click here for more details.

Files changed (33) hide show
  1. regscale/__init__.py +1 -1
  2. regscale/core/app/internal/model_editor.py +3 -3
  3. regscale/core/app/utils/regscale_utils.py +37 -0
  4. regscale/core/utils/date.py +26 -3
  5. regscale/integrations/commercial/defender.py +3 -0
  6. regscale/integrations/commercial/qualys/__init__.py +40 -14
  7. regscale/integrations/commercial/qualys/containers.py +324 -0
  8. regscale/integrations/commercial/qualys/scanner.py +203 -8
  9. regscale/integrations/commercial/synqly/edr.py +10 -0
  10. regscale/integrations/commercial/wizv2/click.py +2 -2
  11. regscale/integrations/commercial/wizv2/constants.py +13 -0
  12. regscale/integrations/commercial/wizv2/issue.py +3 -2
  13. regscale/integrations/commercial/wizv2/scanner.py +5 -1
  14. regscale/integrations/commercial/wizv2/utils.py +118 -72
  15. regscale/integrations/public/fedramp/fedramp_cis_crm.py +98 -20
  16. regscale/models/integration_models/cisa_kev_data.json +140 -3
  17. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  18. regscale/models/regscale_models/catalog.py +16 -0
  19. regscale/models/regscale_models/file.py +2 -1
  20. regscale/models/regscale_models/form_field_value.py +59 -1
  21. regscale/models/regscale_models/issue.py +47 -0
  22. regscale/models/regscale_models/organization.py +30 -0
  23. regscale/models/regscale_models/regscale_model.py +13 -5
  24. regscale/models/regscale_models/security_control.py +47 -0
  25. regscale/models/regscale_models/security_plan.py +32 -0
  26. {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.5.0.dist-info}/METADATA +1 -1
  27. {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.5.0.dist-info}/RECORD +33 -31
  28. tests/fixtures/test_fixture.py +33 -4
  29. tests/regscale/core/test_app.py +53 -32
  30. {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.5.0.dist-info}/LICENSE +0 -0
  31. {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.5.0.dist-info}/WHEEL +0 -0
  32. {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.5.0.dist-info}/entry_points.txt +0 -0
  33. {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.5.0.dist-info}/top_level.txt +0 -0
@@ -259,3 +259,19 @@ class Catalog(RegScaleModel):
259
259
  return response
260
260
  cls.log_response_error(response, suppress_error=True)
261
261
  return response
262
+
263
+ @classmethod
264
+ def find_by_guid(cls, guid: str) -> Optional["Catalog"]:
265
+ """
266
+ Find a catalog by its GUID.
267
+
268
+ :param str guid: The GUID of the catalog
269
+ :return: The catalog object or None if not found
270
+ :rtype: Optional["Catalog"]
271
+ """
272
+ endpoint = cls.get_endpoint("find_by_guid").format(model_slug=cls.get_module_slug(), strID=guid)
273
+ response = cls._get_api_handler().get(endpoint)
274
+
275
+ if response and response.ok and response.status_code not in [204, 404]:
276
+ return cls.model_validate(response.json())
277
+ return None
@@ -188,10 +188,11 @@ class File(BaseModel):
188
188
  file_res = api.post(
189
189
  url=f"{api.config['domain']}/api/files",
190
190
  headers=file_headers,
191
- json=new_file.dict(),
191
+ json=new_file.model_dump(),
192
192
  )
193
193
  if file_res.ok and return_object:
194
194
  return File(**file_res.json()).model_dump()
195
+ File.create_tag_mappings(file_res)
195
196
  else:
196
197
  return False
197
198
  return file_res.ok
@@ -8,6 +8,7 @@ from typing import Any, List, Optional, Dict
8
8
  from pydantic import ConfigDict, Field
9
9
 
10
10
  from regscale.models.regscale_models.regscale_model import RegScaleModel
11
+ from regscale.models.regscale_models.module import Module
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
@@ -79,7 +80,7 @@ class FormFieldValue(RegScaleModel):
79
80
  Get custom data for a record
80
81
  :param record_id: record id
81
82
  :param module_name: module name
82
- :param form_id: form id
83
+ :param form_id: form tab id
83
84
  :return: list of custom fields
84
85
  """
85
86
  result = cls._get_api_handler().get(
@@ -92,3 +93,60 @@ class FormFieldValue(RegScaleModel):
92
93
  else:
93
94
  cls.log_response_error(response=result)
94
95
  return []
96
+
97
+ @staticmethod
98
+ def check_custom_fields(fields_list: list, module_name: str, tab_name: str) -> dict:
99
+ """
100
+ Check if the custom fields exist and
101
+ create if not
102
+
103
+ :param list fields_list: list list of custom fields
104
+ :param str module_name: name of the module in RegScale
105
+ :param str tab_name: name of the tab in the module
106
+ :return: map of custom fields names to ids
107
+ :return_type: dict
108
+ """
109
+ # Check the custom fields exist in RegScale
110
+ custom_form_fields = Module.get_form_fields_by_tab_id(module_name=module_name, tab_name=tab_name)
111
+ if custom_form_fields:
112
+ custom_form_field_id_dict = {cf.regScaleName: cf.id for cf in custom_form_fields}
113
+ else:
114
+ custom_form_field_id_dict = {}
115
+ missing_custom_fields = []
116
+ for field in fields_list:
117
+ if field not in custom_form_field_id_dict.keys():
118
+ missing_custom_fields.append(field)
119
+
120
+ if len(missing_custom_fields) > 0:
121
+ logger.error(
122
+ f"The following custom fields are missing:\n \
123
+ {missing_custom_fields}\n \
124
+ Load these custom fields in RegScale \
125
+ using the file: security_plan_custom_fields.json\
126
+ and run this command again"
127
+ )
128
+
129
+ return custom_form_field_id_dict
130
+
131
+ @staticmethod
132
+ def save_custom_fields(form_field_values: list):
133
+ """
134
+ Populate Custom Fields form a list of dict of
135
+ record_id, form_field_id, and field_value
136
+
137
+ :param list form_field_values: list of custom form
138
+ fields, values, and the record to which to post
139
+ :return: None
140
+ """
141
+ logger.debug("Creating custom form field values...")
142
+ # FormFieldValue class will throw errors if encountered
143
+ for form_field_value in form_field_values:
144
+ data = [
145
+ FormFieldValue(
146
+ formFieldId=form_field_value["form_field_id"], fieldValue=form_field_value["field_value"]
147
+ ),
148
+ ]
149
+ if data:
150
+ FormFieldValue.save_custom_data(
151
+ record_id=form_field_value["record_id"], module_name="securityplans", data=data
152
+ )
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  """Model for a RegScale Issue"""
4
+ import datetime
4
5
  from collections import defaultdict
5
6
  from concurrent.futures import ThreadPoolExecutor, as_completed
6
7
  from enum import Enum
@@ -387,6 +388,52 @@ class Issue(RegScaleModel):
387
388
  return "High"
388
389
  return ""
389
390
 
391
+ @staticmethod
392
+ def get_due_date(
393
+ severity: Union[IssueSeverity, str],
394
+ config: dict,
395
+ key: str,
396
+ start_date: Union[str, datetime.datetime, None] = None,
397
+ dt_format: Optional[str] = "%Y-%m-%dT%H:%M:%S",
398
+ ) -> str:
399
+ """
400
+ Function to return due date based on the severity of the issue; the values are in the init.yaml
401
+ and if not, it will default to 60 days from the current date.
402
+
403
+ :param Union[IssueSeverity, str] severity: Severity of the issue, can be an IssueSeverity enum or a string
404
+ :param dict config: Application config
405
+ :param str key: The key to use for init.yaml from the issues section to determine the due date
406
+ :param Union[str, datetime.datetime, None] start_date: The date to start the due date calculation from, defaults to current date
407
+ :param Optional[str] dt_format: String of the date format to use, defaults to "%Y-%m-%dT%H:%M:%S"
408
+ :return: Due date for the issue
409
+ :rtype: str
410
+ """
411
+ if isinstance(start_date, str):
412
+ from regscale.core.utils.date import datetime_obj
413
+
414
+ start_date = datetime_obj(start_date)
415
+ elif start_date is None:
416
+ start_date = datetime.datetime.now()
417
+
418
+ # if the severity is an enum, get the value
419
+ if isinstance(severity, IssueSeverity):
420
+ severity = severity.value
421
+ elif severity.lower() not in [severity.value.lower() for severity in IssueSeverity]:
422
+ severity = IssueSeverity.NotAssigned.value
423
+
424
+ if severity == IssueSeverity.Critical.value:
425
+ days = config["issues"].get(key, {}).get("critical", 0)
426
+ elif severity == IssueSeverity.High.value:
427
+ days = config["issues"].get(key, {}).get("high", 0)
428
+ elif severity == IssueSeverity.Moderate.value:
429
+ days = config["issues"].get(key, {}).get("moderate", 0) or config["issues"].get(key, {}).get("medium", 0)
430
+ elif severity == IssueSeverity.Low.value:
431
+ days = config["issues"].get(key, {}).get("low", 0)
432
+ else:
433
+ days = 60
434
+ due_date = start_date + datetime.timedelta(days=days)
435
+ return due_date.strftime(dt_format)
436
+
390
437
  @staticmethod
391
438
  def assign_severity(value: Optional[Any] = None) -> str:
392
439
  """
@@ -0,0 +1,30 @@
1
+ """Organization model for RegScale."""
2
+
3
+ from typing import Optional
4
+
5
+ from pydantic import ConfigDict
6
+
7
+ from regscale.models.regscale_models.regscale_model import RegScaleModel
8
+
9
+
10
+ class Organization(RegScaleModel):
11
+ """Data Model for Organizations"""
12
+
13
+ _module_slug = "organizations"
14
+
15
+ id: int = 0
16
+ name: Optional[str] = ""
17
+ description: Optional[str] = ""
18
+ status: Optional[str] = "Active"
19
+
20
+ @staticmethod
21
+ def _get_additional_endpoints() -> dict:
22
+ """
23
+ Get additional endpoints for the Facility model.
24
+
25
+ :return: A dictionary of additional endpoints
26
+ :rtype: dict
27
+ """
28
+ return ConfigDict(
29
+ get_list="/api/{model_slug}/getList",
30
+ )
@@ -410,12 +410,12 @@ class RegScaleModel(BaseModel, ABC):
410
410
  """
411
411
  hidden_fields = set(
412
412
  attribute_name
413
- for attribute_name, model_field in self.model_fields.items()
413
+ for attribute_name, model_field in self.__class__.model_fields.items()
414
414
  if model_field.from_field("hidden") == "hidden"
415
415
  )
416
416
  unset_fields = set(
417
417
  attribute_name
418
- for attribute_name, model_field in self.model_fields.items()
418
+ for attribute_name, model_field in self.__class__.model_fields.items()
419
419
  if getattr(self, attribute_name, None) is None
420
420
  )
421
421
  excluded_fields = hidden_fields.union(unset_fields)
@@ -963,24 +963,32 @@ class RegScaleModel(BaseModel, ABC):
963
963
  return items
964
964
 
965
965
  @classmethod
966
- def get_field_names(cls) -> List[str]:
966
+ def get_field_names(cls, use_aliases: bool = False) -> List[str]:
967
967
  """
968
968
  Get the field names for the Asset model.
969
969
 
970
+ :param bool use_aliases: Whether to use aliases for the field names, defaults to False
970
971
  :return: List of field names
971
972
  :rtype: List[str]
972
973
  """
974
+ if use_aliases:
975
+ return [val.alias or key for key, val in cls.model_fields.items() if not key.startswith("_")]
973
976
  return [x for x in get_type_hints(cls).keys() if not x.startswith("_")]
974
977
 
975
978
  @classmethod
976
- def build_graphql_fields(cls) -> str:
979
+ def build_graphql_fields(cls, use_aliases: bool = False) -> str:
977
980
  """
978
981
  Dynamically builds a GraphQL query for a given Pydantic model class.
979
982
 
983
+ :param bool use_aliases: Whether to use aliases for the field names, defaults to False
980
984
  :return: A string representing the GraphQL query
981
985
  :rtype: str
982
986
  """
983
- return "\n".join(x for x in cls.get_field_names() if x not in cls._exclude_graphql_fields and x != "extra_data")
987
+ return "\n".join(
988
+ x
989
+ for x in cls.get_field_names(use_aliases=use_aliases)
990
+ if x not in cls._exclude_graphql_fields and x != "extra_data"
991
+ )
984
992
 
985
993
  @classmethod
986
994
  def get_by_parent(cls, parent_id: int, parent_module: str) -> List[T]:
@@ -24,8 +24,10 @@ class SecurityControl(RegScaleModel):
24
24
  ["controlId", "catalogueId"],
25
25
  ]
26
26
  _parent_id_field = "catalogueId"
27
+ _exclude_graphql_fields = ["objectives", "tests", "parameters"]
27
28
 
28
29
  id: int = 0
30
+ otherId: Optional[str] = None
29
31
  isPublic: bool = True
30
32
  uuid: Optional[str] = None
31
33
  controlId: Optional[str] = None
@@ -130,3 +132,48 @@ class SecurityControl(RegScaleModel):
130
132
  config = api.config
131
133
  res = api.get(config["domain"] + f"/api/securitycontrols/findByUniqueId/{control_name}/{catalog_id}")
132
134
  return SecurityControl(**res.json()) if res.status_code == 200 else None
135
+
136
+ @classmethod
137
+ def get_controls_by_parent_id_and_module(
138
+ cls, parent_id: int, parent_module: str, return_dicts: bool = False
139
+ ) -> List["SecurityControl"]:
140
+ """
141
+ Get a list of Security Controls by parent ID and module using GraphQL
142
+
143
+ :param int parent_id: The ID of the parent
144
+ :param str parent_module: The module of the parent
145
+ :param bool return_dicts: Whether to return the controls as a list of dicts, defaults to False
146
+ :return: A list of Security Controls
147
+ :rtype: List["SecurityControl"]
148
+ """
149
+ query = f"""
150
+ query {{
151
+ controlImplementations(skip: 0, take: 50, where: {{
152
+ parentId: {{
153
+ eq: {parent_id}
154
+ }},
155
+ parentModule: {{
156
+ eq: "{parent_module}"
157
+ }}
158
+ control: {{
159
+ id: {{
160
+ gt: 0
161
+ }}
162
+ }}
163
+ }}) {{
164
+ items {{
165
+ control {{
166
+ {cls.build_graphql_fields(use_aliases=True)}
167
+ }}
168
+ }}
169
+ totalCount
170
+ pageInfo {{
171
+ hasNextPage
172
+ }}
173
+ }}
174
+ }}"""
175
+ data = cls._get_api_handler().graph(query=query)
176
+ controls = data.get("controlImplementations", {}).get("items", [])
177
+ if return_dicts:
178
+ return [control["control"] for control in controls if control.get("control")]
179
+ return [cls(**control["control"]) for control in controls if control.get("control")]
@@ -27,6 +27,7 @@ class SecurityPlan(RegScaleModel):
27
27
  defaultAssessmentDays: int = 0
28
28
  planInformationSystemSecurityOfficerId: Optional[str] = None
29
29
  planAuthorizingOfficialId: Optional[str] = None
30
+ systemSecurityManagerId: Optional[str] = None
30
31
  systemOwnerId: Optional[str] = None # this could be userID
31
32
  otherIdentifier: Optional[str] = ""
32
33
  confidentiality: str = ""
@@ -138,6 +139,8 @@ class SecurityPlan(RegScaleModel):
138
139
  return ConfigDict( # type: ignore
139
140
  get_control_implementations="/api/controlImplementation/getAllByPlan/{plan_id}",
140
141
  mega_api="/api/{module_slug}/megaAPI/{intId}",
142
+ export_cis_crm="/api/{module_slug}/exportFedrampRev5CisCrm/{intId}",
143
+ list="/api/{module_slug}/getList",
141
144
  )
142
145
 
143
146
  @classmethod
@@ -156,6 +159,35 @@ class SecurityPlan(RegScaleModel):
156
159
  return response.json()
157
160
  return {}
158
161
 
162
+ @classmethod
163
+ def export_cis_crm(cls, ssp_id: int) -> dict:
164
+ """
165
+ Export to a new CIS/CRM workbook with an existing SSP ID
166
+
167
+ :param int ssp_id: RegScale SSP ID
168
+ :return: A status message
169
+ :rtype: dict
170
+ """
171
+ response = cls._get_api_handler().get(
172
+ endpoint=cls.get_endpoint("export_cis_crm").format(module_slug=cls._module_slug, intId=ssp_id)
173
+ )
174
+ if response.ok:
175
+ return response.json()
176
+ return {}
177
+
178
+ @classmethod
179
+ def get_list(cls) -> list:
180
+ """
181
+ Get a list of objects.
182
+
183
+ :return: A list of objects
184
+ :rtype: list
185
+ """
186
+ response = cls._get_api_handler().get(endpoint=cls.get_endpoint("list").format(module_slug=cls._module_slug))
187
+ if not response.raise_for_status():
188
+ return response.json()
189
+ return []
190
+
159
191
  # Legacy code
160
192
  def create_new_ssp(self, api: Api, return_id: Optional[bool] = False) -> Union[int, None, "SecurityPlan"]:
161
193
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: regscale-cli
3
- Version: 6.20.4.1
3
+ Version: 6.20.5.0
4
4
  Summary: Command Line Interface (CLI) for bulk processing/loading data into RegScale
5
5
  Home-page: https://github.com/RegScale/regscale-cli
6
6
  Author: Travis Howerton
@@ -1,4 +1,4 @@
1
- regscale/__init__.py,sha256=mrOIzxUcC6JJdgXm3RrYL3JG258csG0WHAEujEEUpjs,25
1
+ regscale/__init__.py,sha256=NG2YqNT-SOqEul9gYB4T2_-wp5yQlbqTCwORHAiQc9E,25
2
2
  regscale/regscale.py,sha256=2mNIkLGtQjIvl0m255iV20_3DK4oRSTlXYxe-8XQpeo,30764
3
3
  regscale/airflow/__init__.py,sha256=yMwN0Bz4JbM0nl5qY_hPegxo_O2ilhTOL9PY5Njhn-s,270
4
4
  regscale/airflow/click_dags.py,sha256=H3SUR5jkvInNMv1gu-VG-Ja_H-kH145CpQYNalWNAbE,4520
@@ -49,7 +49,7 @@ regscale/core/app/internal/file_uploads.py,sha256=EfQ4ViJBHzU9bxnFunK3ahA6T9A6pn
49
49
  regscale/core/app/internal/healthcheck.py,sha256=ef4Mwk19vi71bv-Xkny5_EGG1UXTbCO5dvEIzHyyfVA,2010
50
50
  regscale/core/app/internal/login.py,sha256=GsFaBwmSc32liWoRnMFy78m8SuB9pfUV0c1lyCEXFEo,10996
51
51
  regscale/core/app/internal/migrations.py,sha256=wHIzb1uglLVOXawnb-K3Yt70Z5QyfQYb8ZZOMDrNRU4,7983
52
- regscale/core/app/internal/model_editor.py,sha256=4XADESWYs9lpEjnhuXACF47xsWkO8nYEuTz7bxlmVRQ,61666
52
+ regscale/core/app/internal/model_editor.py,sha256=0sxfg92TJYyECU9KwgHooXeY3ZdaF2i5gGWe1gButFY,61696
53
53
  regscale/core/app/internal/poam_editor.py,sha256=3PtpSMpV7bqKFuTHD2ACYcTyB3EEtTRKuYv-XArjd0A,22929
54
54
  regscale/core/app/internal/workflow.py,sha256=SpgYk1QyzdilVLOK1fFzaKhdLspumaugf5VezgboxhQ,4007
55
55
  regscale/core/app/utils/XMLIR.py,sha256=M_RrCsbjznihatkucCKw6dPgHTPQczXyqIdUXWhuCLI,8328
@@ -59,7 +59,7 @@ regscale/core/app/utils/app_utils.py,sha256=zLEHHHWR4likFQYY_bZsWLTAoRajyyaWrESk
59
59
  regscale/core/app/utils/file_utils.py,sha256=URKWVEiR9aFnwoW3-Io7R22tBVeROTC3sX1wOZuhqXw,8912
60
60
  regscale/core/app/utils/parser_utils.py,sha256=aBEgcFwbJMD-ARf3wzf-tyWwR6NHvzEcdYcPMm8hGqo,2533
61
61
  regscale/core/app/utils/pickle_file_handler.py,sha256=iMdv4N8z00TB5LyPdxIcLKNRpDQVWQ8ZQWAqCKpqmF0,1695
62
- regscale/core/app/utils/regscale_utils.py,sha256=fGcYc8lGwBsT3GP2RKkROPztslsNKYVXZvEeIFHeUig,10431
62
+ regscale/core/app/utils/regscale_utils.py,sha256=krtwcA6ohhF0iPDz3dMbzYv-nAqe-N5ENp2SZrg-JpY,11583
63
63
  regscale/core/app/utils/report_utils.py,sha256=rKn3nmiSPq8LTKM16UiKBSizTsZKh-7JwdOlfX6YSpQ,4210
64
64
  regscale/core/app/utils/variables.py,sha256=h29Qrr6jg-Feo74IeqHz28wYLhgtzZ2pCDMf6g0WJFU,8989
65
65
  regscale/core/app/utils/catalog_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -92,7 +92,7 @@ regscale/core/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
92
92
  regscale/core/static/regex.py,sha256=KLg-do2oPuUD6bQG9usqqSy5sxqlSEAEuUUbGVkZ6eU,384
93
93
  regscale/core/utils/__init__.py,sha256=Eyvc210t-KRqvTcV5DNWRjKO99CdWy_dC57wfggFWcw,3876
94
94
  regscale/core/utils/click_utils.py,sha256=y6vAbaPoT0Abb8siS1tvJxJQTm4sbWQTeq5nTDIgBtI,375
95
- regscale/core/utils/date.py,sha256=kTpJ5IBgqcTDOtx9NQc1KnSh7fiQcM7maxDmANBSc58,8355
95
+ regscale/core/utils/date.py,sha256=C5J4xwiYihzWmlZYlSPeOFiEDOo94CFU-OOSGYqY6rs,9308
96
96
  regscale/core/utils/graphql.py,sha256=oXGBcAuDa0uasMnD4CokIzzKKa-IgExdKXLwtaK2_tA,8386
97
97
  regscale/core/utils/urls.py,sha256=ZcU9OJqDmVQXgu6BrLESIp2KMkkUuzTZZ_wHsZMzfA4,687
98
98
  regscale/dev/__init__.py,sha256=wVP59B1iurp36ul8pD_CjmunJLHOdKWWodz1r5loNvw,190
@@ -118,7 +118,7 @@ regscale/integrations/commercial/ad.py,sha256=YXSmK8vRf6yi2GnREGa5GrE6GelhFrLj44
118
118
  regscale/integrations/commercial/burp.py,sha256=3BLNKLfwL1x7jfhd8MJD6hdHEpj58pOEtrtCkn2hcWA,3344
119
119
  regscale/integrations/commercial/cpe.py,sha256=eXZeDXicnp1yYgKuyKcthQUYxXi2Pgc__UD8lUqr5H0,4924
120
120
  regscale/integrations/commercial/crowdstrike.py,sha256=6x7_GlYDRCZvPZwqgrDT5KMnXCa6H4RKO-FNkiYxHgU,40194
121
- regscale/integrations/commercial/defender.py,sha256=SA3cn4tdRcD6ZjbCZgULl3ts2fAUqnf27RkdDo7ULGM,65920
121
+ regscale/integrations/commercial/defender.py,sha256=HAZj1lh4k2mYawsmouU7B2OpmfrGcf49qsEDkZrCPpw,66039
122
122
  regscale/integrations/commercial/dependabot.py,sha256=V4VbHbwrxHfe7eCilJ7U_MBeIO6X3wetGfIo2DJYe_c,7793
123
123
  regscale/integrations/commercial/ecr.py,sha256=47iCigssDANlfHYGznU4rfOq6O-1QMGOuP8lBmn7Df0,2693
124
124
  regscale/integrations/commercial/gitlab.py,sha256=dzfqJQ68QI1ee_BriNMyPuXLkzOhc2vR1hhVfq2j13Y,12496
@@ -181,9 +181,10 @@ regscale/integrations/commercial/nessus/scanner.py,sha256=xz-OBd98ZbKKWnuxsP7oTq
181
181
  regscale/integrations/commercial/opentext/__init__.py,sha256=zqCPb_4rYRZZPXfeKn4AoZyyYyQ6MU4C0lCs2ysOBhc,251
182
182
  regscale/integrations/commercial/opentext/commands.py,sha256=TTClFg16EzlXQOjdQQ6AdWuVuh7H2zO0V9rXd73-ni0,2572
183
183
  regscale/integrations/commercial/opentext/scanner.py,sha256=QAb9FPiYeQCEnqL3dnFBFe64LydwLaR8HWpYmabgcbE,22581
184
- regscale/integrations/commercial/qualys/__init__.py,sha256=D-L5jeRvakv7ZXGe_kolgOqK8WrcvbwacRCFUpUGzwQ,87354
184
+ regscale/integrations/commercial/qualys/__init__.py,sha256=A0tBi-OL6W1Bu_ReenCJcVy3wisLABktUknOfSLaPxw,88162
185
+ regscale/integrations/commercial/qualys/containers.py,sha256=9jiBBgjoDRuOB2y5_rmOIgJ0nysrwZVgMTrBZW4fRzk,11958
185
186
  regscale/integrations/commercial/qualys/qualys_error_handler.py,sha256=2nlxeNLQMOpkiTij39VTsZg-2AFQsM6-rwlBW2pVpKY,18594
186
- regscale/integrations/commercial/qualys/scanner.py,sha256=KbbCq6NofgFCdPJBY6KDc8q0OIajvRGmYjUmJD2Hfcs,47409
187
+ regscale/integrations/commercial/qualys/scanner.py,sha256=cvz7j2X160l5RP74Vtq6-FagIDhT6zQfQPoQOTOR07c,56284
187
188
  regscale/integrations/commercial/qualys/variables.py,sha256=TPoIW5_yNmU6c0AlLOpHQdxp6OrH8jUmMJikqT7YYz8,962
188
189
  regscale/integrations/commercial/sap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
190
  regscale/integrations/commercial/sap/click.py,sha256=pWgjUOA_4WKkDUWcE8z4EshnJUdrTl15NKUfKpKyqzE,522
@@ -207,7 +208,7 @@ regscale/integrations/commercial/stigv2/click_commands.py,sha256=-765vFF03aSjBxU
207
208
  regscale/integrations/commercial/stigv2/stig_integration.py,sha256=-UlfL0BBI3jFGotctOJyTCRAU9zIXW6mwU7ySrRXE9U,11573
208
209
  regscale/integrations/commercial/synqly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
210
  regscale/integrations/commercial/synqly/assets.py,sha256=wAyoMaR5MizBifnKUnNrx6ZlnmneP07LEBjJuf1POZs,3329
210
- regscale/integrations/commercial/synqly/edr.py,sha256=snW_MW3qCeydzd_TokZGA7njMXhX7lCjF3OmQ-Qy3aE,2664
211
+ regscale/integrations/commercial/synqly/edr.py,sha256=IvObVzz5Y2a8iNjCP9dTfKUEv2ZAboCzcFqxI00Y6Do,2978
211
212
  regscale/integrations/commercial/synqly/ticketing.py,sha256=ubTVKqB_f-G6mE4EUxbsU5BkO-GlMTvRkJVRq_tl_jg,6399
212
213
  regscale/integrations/commercial/synqly/vulnerabilities.py,sha256=bLYECK4G3K-j_gXrfEwlse6Rc1ao4TTFezBYxW11CXM,7689
213
214
  regscale/integrations/commercial/tenablev2/__init__.py,sha256=UpSY_oww83kz9c7amdbptJKwDB1gAOBQDS-Q9WFp588,295
@@ -225,14 +226,14 @@ regscale/integrations/commercial/trivy/commands.py,sha256=YGQFtpQGkmcLT3X2OVp7lt
225
226
  regscale/integrations/commercial/trivy/scanner.py,sha256=iiwTvjqRlLRgQvCs_FP0j83B7ApOta0MSXyO0-iHfSk,11309
226
227
  regscale/integrations/commercial/wizv2/WizDataMixin.py,sha256=s7F_rVrP9IZa_x_vh3MswR7W_UBHRfd4kHGVsNX4ips,3606
227
228
  regscale/integrations/commercial/wizv2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
- regscale/integrations/commercial/wizv2/click.py,sha256=eHIS9TdbZQ2Iu57uwbj3ep0m5gpI0HaK5W_ReL892Y4,12232
229
- regscale/integrations/commercial/wizv2/constants.py,sha256=DgxTbtnUixK-IOnmbie7-Hosip3huJPDeRn0GzKlqJU,22854
230
- regscale/integrations/commercial/wizv2/issue.py,sha256=MbND-Ir4pU4i0OtxsjbRxn_i8Ibll6gt-qYQK2ObstA,13361
229
+ regscale/integrations/commercial/wizv2/click.py,sha256=hpexL0xHIW5WBUJu-hWQHI2vK9s6i1TI2mD6YWZOafs,12217
230
+ regscale/integrations/commercial/wizv2/constants.py,sha256=xpcO8W9645MncNKbRFspD7m05fVhPK0dzwzToAm0ReQ,23141
231
+ regscale/integrations/commercial/wizv2/issue.py,sha256=qj5_g-SoOz6f5QDgs34GdQEyxFwJLKAWl1EVx7vjrAw,13407
231
232
  regscale/integrations/commercial/wizv2/models.py,sha256=hZ6557LJfcp1_NRbMM0V_G1erz1jEFmsuKPn86kXE54,5667
232
233
  regscale/integrations/commercial/wizv2/parsers.py,sha256=YcFOGdYZZ17hj2pcRMC9Ho2wPY94dfJ4hHwqTR5BB6c,11095
233
234
  regscale/integrations/commercial/wizv2/sbom.py,sha256=QcGaYiBGtZ3mBcbo-KGl-I2u6QHKAIinTk26LPy0Kng,4466
234
- regscale/integrations/commercial/wizv2/scanner.py,sha256=vPKTV6RhA2_00lBHVsk7jD68Lh_DReCSsmHnSHp8c4w,20964
235
- regscale/integrations/commercial/wizv2/utils.py,sha256=NlRkIgYY10a9tkRO70m_zE-nXC5svsZuvxfL3l3fEK0,32249
235
+ regscale/integrations/commercial/wizv2/scanner.py,sha256=ndUQxQ-_STzLTEtqSkVBsQYLMuFu0cxc1KYIxjUv9IA,21180
236
+ regscale/integrations/commercial/wizv2/utils.py,sha256=Na0HRlymccXPzC1lybEPqHVuvCTbfw7r4LDi98_4mUg,34252
236
237
  regscale/integrations/commercial/wizv2/variables.py,sha256=W_m_TSLUDaqyKJZHukp6i8nftFuhQKb4WRVu9lIyMAs,2485
237
238
  regscale/integrations/commercial/wizv2/wiz_auth.py,sha256=BpQTYJn3u0QiWC2IAw-bunZpBPsJtDJgOsC2zOL_UU4,5554
238
239
  regscale/integrations/integration/__init__.py,sha256=WJgPLnEahD94QLE8NR8QCzlf8xk2ix76_WPDlf98ezU,70
@@ -252,7 +253,7 @@ regscale/integrations/public/fedramp/appendix_parser.py,sha256=u3Q_NHxAvYTQ1RAr1
252
253
  regscale/integrations/public/fedramp/click.py,sha256=8JbWRidFZ9EFoOTp-bwE584u23TzKqWQIpfxmA0-lGo,14975
253
254
  regscale/integrations/public/fedramp/components.py,sha256=z6PMObm-kjRR42bT04EfnjisrEULfXlwxb7576uuMmY,27010
254
255
  regscale/integrations/public/fedramp/docx_parser.py,sha256=EA9g1iTlB6-GtOzV9JwGW8x_SruhbaIMOzstCBvjiq8,10526
255
- regscale/integrations/public/fedramp/fedramp_cis_crm.py,sha256=ygDUlinOizUrUa_9vilFVejP_RB8nVMJ7quf1RhN2Yo,61488
256
+ regscale/integrations/public/fedramp/fedramp_cis_crm.py,sha256=IVASI6W0uEOg_SyxJSqyHev1KzSwEnF1RTWYT3qfViw,64576
256
257
  regscale/integrations/public/fedramp/fedramp_common.py,sha256=Mdy3_WdCEcTwSXEEKXiODmr2YJTWcTg6jfyWZJWfruQ,115406
257
258
  regscale/integrations/public/fedramp/fedramp_docx.py,sha256=GnRjuWEgE9XSe9egPOQSZ8lMjY4CpqcD2IS5paI-xQc,13742
258
259
  regscale/integrations/public/fedramp/fedramp_five.py,sha256=F4KIOdnYaRjJrJHJYsN9Bmf6i5s0nus-t_GaAh8A3ow,92645
@@ -308,7 +309,7 @@ regscale/models/integration_models/azure_alerts.py,sha256=2etrpvcxa7jVQrc98bJlVG
308
309
  regscale/models/integration_models/base64.py,sha256=sxV6O5qY1_TstJENX5jBPsSdQwmA83-NNhgJFunXiZE,570
309
310
  regscale/models/integration_models/burp.py,sha256=FBEBkH3U0Q8vq71FFoWnvgLRF5Hkr9GYmQFmNNHFrVk,16932
310
311
  regscale/models/integration_models/burp_models.py,sha256=UytDTAcCaxyu-knFkm_mEUH6UmWK3OTXKSC9Sc6OjVs,3669
311
- regscale/models/integration_models/cisa_kev_data.json,sha256=IkDjhhPKGl7NdGfVwGZV1lX-Fw5J0ALeXk82mTW0ccc,1217687
312
+ regscale/models/integration_models/cisa_kev_data.json,sha256=UNYylFQOW9KHp5YTozdUTC8NTNe-2xcNf6manT8MGF0,1228128
312
313
  regscale/models/integration_models/defender_data.py,sha256=jsAcjKxiGmumGerj7xSWkFd6r__YpuKDnYX5o7xHDiE,2844
313
314
  regscale/models/integration_models/defenderimport.py,sha256=OFwEH0Xu-HFLIZJZ8hP60Ov3lS8RR7KHEsw4wI8QnoE,5766
314
315
  regscale/models/integration_models/drf.py,sha256=Aq7AdLa_CH97NrnR-CxaFI22JjVN9uCxVN7Z-BBUaNU,18896
@@ -338,7 +339,7 @@ regscale/models/integration_models/flat_file_importer/__init__.py,sha256=V_P3R0j
338
339
  regscale/models/integration_models/sbom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
340
  regscale/models/integration_models/sbom/cyclone_dx.py,sha256=0pFR0BWBrF5c8_cC_8mj2MXvNOMHOdHbBYXvTVfFAh8,4058
340
341
  regscale/models/integration_models/synqly_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
- regscale/models/integration_models/synqly_models/capabilities.json,sha256=49O0YTFgs_HdTv-4If3OY7qb75SIf3hZ_AiZOjxlVek,331964
342
+ regscale/models/integration_models/synqly_models/capabilities.json,sha256=A5IBt8dDS4g8Kztgos9xugSyvuvuE5YZZE8wfnRkZnU,349623
342
343
  regscale/models/integration_models/synqly_models/connector_types.py,sha256=8nxptkTexpskySnmL0obNAff_iu_fx6tJ7i1-4hJvao,461
343
344
  regscale/models/integration_models/synqly_models/ocsf_mapper.py,sha256=e2kTOhWSNRnzbgMchMx-7c21pCgSv2DqWnxvajKEKJM,16960
344
345
  regscale/models/integration_models/synqly_models/param.py,sha256=Xt5Zm6lC_VkLj7LF2qXo72TJZHysqttsp5ai0NCf1po,2643
@@ -360,7 +361,7 @@ regscale/models/regscale_models/asset.py,sha256=-ws6o6hRl2sMLNcT8CIw0SQvOwLtrVSe
360
361
  regscale/models/regscale_models/asset_mapping.py,sha256=HFlkAoPZHy2xPYq28cXuzLpFoP36SI08HTL8mH_Q-uE,6851
361
362
  regscale/models/regscale_models/business_impact_assessment.py,sha256=tkuvw1ssdrVJJcsHT43nFjFhAFTSSFRNfWRIg5W-d2k,2214
362
363
  regscale/models/regscale_models/case.py,sha256=hLVTwZXzusnXR9avqh7xSVLJwPJ1rPI_Nla_VAkpZcg,1192
363
- regscale/models/regscale_models/catalog.py,sha256=U0nEyQSKgMuNCWh22gGk5sC-xeBmN8UXHiBsJKIFNZ8,8546
364
+ regscale/models/regscale_models/catalog.py,sha256=jw4lfWQyE3ult3MlGU7IdGsXLYCQPVnzfjT69kKjLCs,9145
364
365
  regscale/models/regscale_models/cci.py,sha256=jjtO3ZXDhzQ05s5i-YeL7_TWPkl9ArGkUJGAw_LnKD8,1264
365
366
  regscale/models/regscale_models/change.py,sha256=v-FxWrYijGbxAWk7WEIN3piUw8mM3EWTeKd7itAMfMY,4970
366
367
  regscale/models/regscale_models/checklist.py,sha256=GM15N9krNmKNDJnOgtSDRlUTBVwYtttex_plc64OVWY,13290
@@ -383,9 +384,9 @@ regscale/models/regscale_models/email.py,sha256=kgEzXTUZr7uHksMOCextWbXJXYuRKyXO
383
384
  regscale/models/regscale_models/evidence.py,sha256=R78f3eWjmBgusZbv8i9cd5O8Is43KjvxiaJH_CLERqE,4316
384
385
  regscale/models/regscale_models/evidence_mapping.py,sha256=eovTJsl1cjZMvbhpOv70nILIHSXmURyU4mg_r09h4VQ,1444
385
386
  regscale/models/regscale_models/facility.py,sha256=J3gGv0Tf3zNdyKGhb0iM8WjgjWqJHZLKdcN9n-jDrTA,1059
386
- regscale/models/regscale_models/file.py,sha256=_95A8ERXkA7CQRmbl3z7dpe2uZyrkEcGlSKDpIYwurg,14360
387
+ regscale/models/regscale_models/file.py,sha256=peAu78t-zLeMsP9tmeubGAyBL77XRkXyJLaruWzjLac,14413
387
388
  regscale/models/regscale_models/filetag.py,sha256=jd99xcQsGheLFfy7PYtZEzT-re_Dp_ZoUF3GWYMsi0Q,1138
388
- regscale/models/regscale_models/form_field_value.py,sha256=4LQrIdJgDwBh2Fyne9CH-EJ8G21a-tglxod8D48r2lY,3443
389
+ regscale/models/regscale_models/form_field_value.py,sha256=xKnbXWQl4xVuUQMbeRK23MbPO7SOMARBvvH2O98UOm4,5816
389
390
  regscale/models/regscale_models/functional_roles.py,sha256=Vm_j-UZBKoaiONO75VqqCKnDHE6ynP0X5XZmKXl8UT8,932
390
391
  regscale/models/regscale_models/group.py,sha256=HFE3FPUIYo7PArHnvZhb8EQToZQ73jFRU1M-oaHuees,6209
391
392
  regscale/models/regscale_models/implementation_objective.py,sha256=e0Hamt-9RBeHRDzlWDbIJ3t4qnZKXPrbsesBK3wYoNk,12132
@@ -394,7 +395,7 @@ regscale/models/regscale_models/implementation_role.py,sha256=ZjJOhjM3dVlulsGx3l
394
395
  regscale/models/regscale_models/incident.py,sha256=jsS4MfigzjwFphvdIrBk62GfvbceQ8VL-AhfQSQM460,6028
395
396
  regscale/models/regscale_models/inherited_control.py,sha256=RuQJgVyZgfoIrUG_vvwQYHECb3wsFjDH-zPj-bIFBNU,2007
396
397
  regscale/models/regscale_models/interconnection.py,sha256=B8Y4I6KnN-T_gid08QM_o50OwGZcFfO8SJFY2uB68Ak,1256
397
- regscale/models/regscale_models/issue.py,sha256=qtHB2i9wGu2fO4M1qWTOKWWww4bkgFJFaDCkom4Hw7A,46834
398
+ regscale/models/regscale_models/issue.py,sha256=9ufa-gboSYBBQ2wCTVV0wk6qcWsdX8K0plWj0c_zpus,49064
398
399
  regscale/models/regscale_models/leveraged_authorization.py,sha256=OUrL8JQV3r7T3ldHlL6Y_ZLv6KuQIC-3eZW5wZ7XFUk,4192
399
400
  regscale/models/regscale_models/line_of_inquiry.py,sha256=Uu0lQEhif0W6yTSkJo27GyQGmExSngJvyqGBTr4Q8Fg,1713
400
401
  regscale/models/regscale_models/link.py,sha256=lAY4Ig3Menm1EqfcAbVJ7jsCsRO5tWtJIf-9-G9FXT8,6593
@@ -403,6 +404,7 @@ regscale/models/regscale_models/meta_data.py,sha256=Fg8rrWSTx3K00QkF4glH9UdY9OFW
403
404
  regscale/models/regscale_models/module.py,sha256=a7lalHmVTQ04ZILnJxuFWdHYDtyusBMTtonD4ICL-Wc,7272
404
405
  regscale/models/regscale_models/modules.py,sha256=CkR03zJhrBjhw50d-Kpyem7Ryh-QWz_RLHEMlx2e8VA,6150
405
406
  regscale/models/regscale_models/objective.py,sha256=aJIpmkZ-NscqV2y8SGB4HYzm615b6mklyHnW9bL2ljk,249
407
+ regscale/models/regscale_models/organization.py,sha256=E3Y5bwtgaIRL4rbKxU3DyfFVYUzP3d-1umG_CIUG3gE,714
406
408
  regscale/models/regscale_models/parameter.py,sha256=WS5onxkvz119brxugoBidK7K_3CeNVzchLTvW8aEdJs,3859
407
409
  regscale/models/regscale_models/policy.py,sha256=IQ-niE1PP8L2OavYfOQQsvSInw1sw371mkJrGFyWZ94,2382
408
410
  regscale/models/regscale_models/ports_protocol.py,sha256=Pcn-R6bsmxWiaYEtlZuu7Zv0C4vVX8YHMWgGcd1MRCY,2146
@@ -417,7 +419,7 @@ regscale/models/regscale_models/questionnaire.py,sha256=QMSXfNpSoaS8tkeo80C7OWLj
417
419
  regscale/models/regscale_models/questionnaire_instance.py,sha256=1LgGTwFACmWx2xOOqUKhAUOms4_3L6NZySzuteg0_sI,8241
418
420
  regscale/models/regscale_models/rbac.py,sha256=oHzKqwL4bkH2XT4WaslbNlMnWayrSKP9zYbG72e2ijk,4522
419
421
  regscale/models/regscale_models/reference.py,sha256=P_7jT6H-NZIa7TyH3j98N-ZHlB6FsjpZVRZCCpms-D4,3253
420
- regscale/models/regscale_models/regscale_model.py,sha256=NBlCeW-Gm6WrTwOJ75mweK63X_1hsO2tvEYQFWG2fEY,68343
422
+ regscale/models/regscale_models/regscale_model.py,sha256=z-SbjQpwE67sM9pfDg2oiyIJSBEGIEwqfFvCAhzM3bA,68806
421
423
  regscale/models/regscale_models/requirement.py,sha256=-8PnMbuWAZHol5X1w-fzm-moD784Et0oevSVbz6xLhU,767
422
424
  regscale/models/regscale_models/risk.py,sha256=lZFDYPpTt0aEYCrYz5FBKk1Y4y2CKXYU1A8eEKT3zzg,8661
423
425
  regscale/models/regscale_models/risk_issue_mapping.py,sha256=j6uR0x6xymJ0BsIwgnadeUQDshHNhU3VnpyItZp4dc4,2393
@@ -425,8 +427,8 @@ regscale/models/regscale_models/risk_trend.py,sha256=GkooEAc4BAq85vT3SxEOKcETACk
425
427
  regscale/models/regscale_models/sbom.py,sha256=UYS3lBizGqz7A7vNPYBYzpL8PWIaXLl7ZQox_hlJ2ZQ,1722
426
428
  regscale/models/regscale_models/scan_history.py,sha256=o4e9P2rQlqlLj4mbgSPX44jutTJo1nocI1DDXyWyf6w,16741
427
429
  regscale/models/regscale_models/search.py,sha256=rPbFDCnnBRHY5JJv9Ev3_6GjMlkdhUAsaUzC97eE2Ys,1015
428
- regscale/models/regscale_models/security_control.py,sha256=tob8y9zaMGdITju4ffrCAa5s6qhdchdkuxJdZ6VdkOA,4614
429
- regscale/models/regscale_models/security_plan.py,sha256=4hBnAqHpjVXd6i1dsO2r2HbPKjeyM-QnMKCmdk1sYGw,7549
430
+ regscale/models/regscale_models/security_control.py,sha256=GJEMkIh6IDX7Gs_z7ppmm0hqiXjC5qSbSYRYt85wOUg,6365
431
+ regscale/models/regscale_models/security_plan.py,sha256=DtxGJHCIuzj_F_iaP9uuHY5sObKo3zk_8BeC2jUJF7U,8600
430
432
  regscale/models/regscale_models/software_inventory.py,sha256=FRAIfoUlS0kaX1HQRDyV5q4yxwRHilXbS52NSj6exo0,5555
431
433
  regscale/models/regscale_models/stake_holder.py,sha256=JIuDTIky_3acDl-NOMwylTHkppN38JgPDZ1A6wM-BGE,1956
432
434
  regscale/models/regscale_models/stig.py,sha256=y-PQuGg3pwDTfsNZGW6anaNAjIZBQoNe7GOLMiT5zfw,26329
@@ -477,7 +479,7 @@ regscale/visualization/click.py,sha256=-fxIwc-RrI3iHdMNTk_dhplC8yUjZXcWuHfZa7ULR
477
479
  tests/fixtures/__init__.py,sha256=sLuJtRNqBRm8lpE2yKvZFIqwtYho5A5O8KbJj_IpKhQ,41
478
480
  tests/fixtures/api.py,sha256=32EY2VZxumbPAP58ZkS0_SH4UewY9Z-ZzWrP2Unwnog,2629
479
481
  tests/fixtures/models.py,sha256=pWKwexocbJDfMGdiuafgHEz1RklO_24znfd3LsgdXEs,3569
480
- tests/fixtures/test_fixture.py,sha256=T-Fx3l0uTIO3WKphlfaWttZ5Ur3Z1oXTPFDYGFuFBwQ,5360
482
+ tests/fixtures/test_fixture.py,sha256=ndhBx4jR0snD5ONGZhBTUPzn5pRB5s9wxMR-lMRd9XM,6229
481
483
  tests/mocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
482
484
  tests/mocks/objects.py,sha256=KfCpzXpwWl-3zCLihQ3ZrQONW8Jk7F4UbcAgPz2LnnQ,99
483
485
  tests/mocks/response.py,sha256=fUF2jrrxgmGUKXUcWWOSA457yrEyM1EB28G6RqPO9a0,1040
@@ -487,7 +489,7 @@ tests/regscale/test_about.py,sha256=32YZC8XJW5QkIYIfwEVGIdIxQNUIbyzn3OzVcX_5X24,
487
489
  tests/regscale/test_authorization.py,sha256=fls5ODCYiu0DdkwXFepO_GM-BP6tRaPmMCZWX6VD2e8,1899
488
490
  tests/regscale/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
489
491
  tests/regscale/core/test_api.py,sha256=25AsIT-jg8SrlkPeynUwwm4PvTOrHcRO2Ba_omnNLUY,7512
490
- tests/regscale/core/test_app.py,sha256=IOLC6dzgsZF5PdGRHaTqFvJa-BV3dozRK30QQd6JvQs,18099
492
+ tests/regscale/core/test_app.py,sha256=8HvRRD37pI_x4VjXyjs1g7JWXr-jFIbK_lYst4tLXjI,18922
491
493
  tests/regscale/core/test_login.py,sha256=Kl7ySS8JU7SzhmupaDexeUH8VOMjtMRJvW8-CimxHqU,1166
492
494
  tests/regscale/core/test_logz.py,sha256=Yf6tAthETLlYOEp3hee3ovDw-WnZ_6fTw3e1rjx4xSw,2621
493
495
  tests/regscale/core/test_sbom_generator.py,sha256=lgzo1HRbkNIIDZIeKiM2JbbIYQsak0BpU0GlvbrcexM,2935
@@ -512,9 +514,9 @@ tests/regscale/models/test_regscale_model.py,sha256=ZsrEZkC4EtdIsoQuayn1xv2gEGcV
512
514
  tests/regscale/models/test_report.py,sha256=eiSvS_zS0aVeL0HBvtmHVvEzcfF9ZFVn2twj5g8KttY,970
513
515
  tests/regscale/models/test_tenable_integrations.py,sha256=PNJC2Zu6lv1xj7y6e1yOsz5FktSU3PRKb5x3n5YG3w0,4072
514
516
  tests/regscale/models/test_user_model.py,sha256=e9olv28qBApgnvK6hFHOgXjUC-pkaV8aGDirEIWASL4,4427
515
- regscale_cli-6.20.4.1.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
516
- regscale_cli-6.20.4.1.dist-info/METADATA,sha256=ZXfW2mTv2QYQMyGyHP_bEoFXBM7Y0RMPfyMwkCmTKw8,34899
517
- regscale_cli-6.20.4.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
518
- regscale_cli-6.20.4.1.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
519
- regscale_cli-6.20.4.1.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
520
- regscale_cli-6.20.4.1.dist-info/RECORD,,
517
+ regscale_cli-6.20.5.0.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
518
+ regscale_cli-6.20.5.0.dist-info/METADATA,sha256=uhXNlWUvaELYMD0YsHh_2qCqD_OXwj17t9lEeB8jrBw,34899
519
+ regscale_cli-6.20.5.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
520
+ regscale_cli-6.20.5.0.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
521
+ regscale_cli-6.20.5.0.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
522
+ regscale_cli-6.20.5.0.dist-info/RECORD,,