regscale-cli 6.24.0.0__py3-none-any.whl → 6.25.0.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 (32) hide show
  1. regscale/_version.py +1 -1
  2. regscale/core/app/api.py +1 -1
  3. regscale/core/app/application.py +5 -3
  4. regscale/core/app/internal/evidence.py +308 -202
  5. regscale/dev/code_gen.py +84 -3
  6. regscale/integrations/commercial/__init__.py +2 -0
  7. regscale/integrations/commercial/jira.py +95 -22
  8. regscale/integrations/commercial/microsoft_defender/defender.py +326 -5
  9. regscale/integrations/commercial/microsoft_defender/defender_api.py +348 -14
  10. regscale/integrations/commercial/microsoft_defender/defender_constants.py +157 -0
  11. regscale/integrations/commercial/synqly/assets.py +99 -16
  12. regscale/integrations/commercial/synqly/query_builder.py +533 -0
  13. regscale/integrations/commercial/synqly/vulnerabilities.py +134 -14
  14. regscale/integrations/commercial/wizv2/click.py +23 -0
  15. regscale/integrations/commercial/wizv2/compliance_report.py +137 -26
  16. regscale/integrations/compliance_integration.py +247 -5
  17. regscale/integrations/scanner_integration.py +16 -0
  18. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  19. regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +12 -2
  20. regscale/models/integration_models/synqly_models/filter_parser.py +332 -0
  21. regscale/models/integration_models/synqly_models/synqly_model.py +47 -3
  22. regscale/models/regscale_models/compliance_settings.py +28 -0
  23. regscale/models/regscale_models/component.py +1 -0
  24. regscale/models/regscale_models/control_implementation.py +143 -4
  25. regscale/regscale.py +1 -1
  26. regscale/validation/record.py +23 -1
  27. {regscale_cli-6.24.0.0.dist-info → regscale_cli-6.25.0.0.dist-info}/METADATA +9 -9
  28. {regscale_cli-6.24.0.0.dist-info → regscale_cli-6.25.0.0.dist-info}/RECORD +32 -30
  29. {regscale_cli-6.24.0.0.dist-info → regscale_cli-6.25.0.0.dist-info}/LICENSE +0 -0
  30. {regscale_cli-6.24.0.0.dist-info → regscale_cli-6.25.0.0.dist-info}/WHEEL +0 -0
  31. {regscale_cli-6.24.0.0.dist-info → regscale_cli-6.25.0.0.dist-info}/entry_points.txt +0 -0
  32. {regscale_cli-6.24.0.0.dist-info → regscale_cli-6.25.0.0.dist-info}/top_level.txt +0 -0
@@ -3,8 +3,9 @@
3
3
  """Model for a RegScale Security Control Implementation"""
4
4
  # standard python imports
5
5
  import logging
6
+ from functools import lru_cache
6
7
  from enum import Enum
7
- from typing import Any, Callable, Dict, List, Optional, Union, TypeVar
8
+ from typing import Any, Callable, Dict, List, Optional, Union
8
9
  from urllib.parse import urljoin
9
10
 
10
11
  import requests
@@ -19,7 +20,6 @@ from regscale.models.regscale_models.implementation_role import ImplementationRo
19
20
  from regscale.models.regscale_models.regscale_model import RegScaleModel
20
21
  from regscale.models.regscale_models.security_control import SecurityControl
21
22
 
22
-
23
23
  logger = logging.getLogger("regscale")
24
24
  PATCH_CONTENT_TYPE = "application/json-patch+json"
25
25
 
@@ -74,6 +74,7 @@ class ControlImplementation(RegScaleModel):
74
74
  _get_objects_for_list = True
75
75
 
76
76
  controlOwnerId: str = Field(default_factory=RegScaleModel.get_user_id)
77
+ controlOwnersIds: Optional[List[str]] = Field(default=None)
77
78
  status: str # Required
78
79
  controlID: int # Required foreign key to Security Control
79
80
  status_lst: List[ControlImplementationStatus] = []
@@ -104,7 +105,9 @@ class ControlImplementation(RegScaleModel):
104
105
  qiVendorCompliance: Optional[str] = None
105
106
  qiIssues: Optional[str] = None
106
107
  qiOverall: Optional[str] = None
107
- responsibility: Optional[str] = None
108
+ responsibility: str = Field(
109
+ default_factory=lambda: ControlImplementation.get_default_responsibility()
110
+ ) # Required field - Control Origination
108
111
  inheritedControlId: Optional[int] = None
109
112
  inheritedRequirementId: Optional[int] = None
110
113
  inheritedSecurityPlanId: Optional[int] = None
@@ -153,9 +156,24 @@ class ControlImplementation(RegScaleModel):
153
156
  """
154
157
  self.status_lst = self._get_status_enum()
155
158
 
159
+ # Backwards compatibility: Auto-populate controlOwnersIds if not set but controlOwnerId exists
160
+ if self.controlOwnersIds is None and self.controlOwnerId:
161
+ self.controlOwnersIds = [self.controlOwnerId]
162
+
163
+ # Set intelligent default responsibility if not explicitly set and we have parent info
164
+ if (
165
+ self.responsibility == self.get_default_responsibility()
166
+ and self.parentId
167
+ and self.parentModule == "securityplans"
168
+ ):
169
+ # Try to get a more specific default based on the actual security plan's compliance settings
170
+ better_default = self.get_default_responsibility(parent_id=self.parentId)
171
+ if better_default != self.responsibility:
172
+ self.responsibility = better_default
173
+
156
174
  def __setattr__(self, name: str, value: Any) -> None:
157
175
  """
158
- Override __setattr__ to update status_lst when status changes.
176
+ Override __setattr__ to update status_lst when status changes and handle backwards compatibility.
159
177
 
160
178
  :param str name: The attribute name
161
179
  :param Any value: The attribute value
@@ -164,6 +182,127 @@ class ControlImplementation(RegScaleModel):
164
182
  super().__setattr__(name, value)
165
183
  if name == "status":
166
184
  self.status_lst = self._get_status_enum()
185
+ elif name == "controlOwnerId" and value:
186
+ # Backwards compatibility: Auto-populate controlOwnersIds when controlOwnerId is set
187
+ if hasattr(self, "controlOwnersIds") and (
188
+ not hasattr(self, "_controlOwnersIds") or self._controlOwnersIds is None
189
+ ):
190
+ super().__setattr__("controlOwnersIds", [value])
191
+
192
+ @classmethod
193
+ @lru_cache(maxsize=256)
194
+ def get_default_responsibility(
195
+ cls, parent_id: Optional[int] = None, compliance_setting_id: Optional[int] = None
196
+ ) -> str:
197
+ """
198
+ Get default responsibility (control origination) based on compliance settings.
199
+
200
+ Cached for high-performance bulk operations.
201
+
202
+ :param Optional[int] parent_id: The parent security plan ID to get compliance settings from
203
+ :param Optional[int] compliance_setting_id: Specific compliance setting ID override
204
+ :return: Default responsibility string
205
+ :rtype: str
206
+ """
207
+ actual_compliance_setting_id = compliance_setting_id or cls._get_compliance_setting_id_from_parent(parent_id)
208
+
209
+ if actual_compliance_setting_id:
210
+ responsibility = cls._get_responsibility_from_compliance_settings(actual_compliance_setting_id)
211
+ if responsibility:
212
+ return responsibility
213
+
214
+ return cls._get_fallback_responsibility(actual_compliance_setting_id)
215
+
216
+ @classmethod
217
+ @lru_cache(maxsize=128)
218
+ def _get_compliance_setting_id_from_parent(cls, parent_id: Optional[int]) -> Optional[int]:
219
+ """
220
+ Get compliance setting ID from parent security plan.
221
+
222
+ Cached to avoid repeated API calls for the same security plan.
223
+ """
224
+ if not parent_id:
225
+ return None
226
+
227
+ try:
228
+ from regscale.models.regscale_models.security_plan import SecurityPlan
229
+
230
+ security_plan = SecurityPlan.get_object(parent_id)
231
+ return security_plan.complianceSettingsId if security_plan else None
232
+ except Exception:
233
+ return None
234
+
235
+ @classmethod
236
+ @lru_cache(maxsize=32)
237
+ def _get_responsibility_from_compliance_settings(cls, compliance_setting_id: int) -> Optional[str]:
238
+ """
239
+ Get default responsibility from compliance settings API using settingsList endpoint.
240
+
241
+ Cached to avoid repeated API calls for the same compliance setting.
242
+ """
243
+ try:
244
+ from regscale.models.regscale_models.compliance_settings import ComplianceSettings
245
+
246
+ return ComplianceSettings.get_default_responsibility_for_compliance_setting(compliance_setting_id)
247
+ except Exception:
248
+ pass
249
+
250
+ return None
251
+
252
+ @classmethod
253
+ def _get_fallback_responsibility(cls, compliance_setting_id: Optional[int] = None) -> str:
254
+ """
255
+ Get intelligent fallback responsibility using framework-specific defaults.
256
+
257
+ :param Optional[int] compliance_setting_id: Compliance setting ID to determine framework type
258
+ :return: Fallback responsibility string
259
+ :rtype: str
260
+ """
261
+ if compliance_setting_id:
262
+ return cls._get_framework_default_responsibility(compliance_setting_id)
263
+
264
+ # Ultimate fallback for unknown compliance settings
265
+ return ControlImplementationOrigin.SERVICE_PROVIDER_CORPORATE.value
266
+
267
+ @classmethod
268
+ def _get_framework_default_responsibility(cls, compliance_setting_id: int) -> str:
269
+ """
270
+ Get default responsibility for a specific compliance framework.
271
+
272
+ :param int compliance_setting_id: The compliance setting ID (1=RegScale, 2=FedRAMP, 3=PCI, 4=DoD, 5=CMMC)
273
+ :return: Default responsibility string
274
+ :rtype: str
275
+ """
276
+ try:
277
+ from regscale.models.regscale_models.compliance_settings import ComplianceSettings
278
+
279
+ default_value = ComplianceSettings.get_default_responsibility_for_compliance_setting(compliance_setting_id)
280
+ if default_value:
281
+ return default_value
282
+ except Exception:
283
+ pass
284
+
285
+ # Framework-specific fallbacks if API fails
286
+ fallback_map = {
287
+ 1: "Provider", # RegScale Default
288
+ 2: ImplementationControlOrigin.SERVICE_PROVIDER_CORPORATE.value, # FedRAMP
289
+ 3: ImplementationControlOrigin.SERVICE_PROVIDER_CORPORATE.value, # PCI
290
+ 4: "System-Specific", # DoD
291
+ 5: "Provider", # CMMC
292
+ }
293
+ return fallback_map.get(compliance_setting_id, "Service Provider Corporate")
294
+
295
+ @classmethod
296
+ def clear_responsibility_cache(cls) -> None:
297
+ """
298
+ Clear the responsibility lookup cache.
299
+
300
+ Call this method when compliance settings have been updated to ensure
301
+ fresh data is retrieved from the API.
302
+ """
303
+ cls.get_default_responsibility.cache_clear()
304
+ cls._get_compliance_setting_id_from_parent.cache_clear()
305
+ cls._get_responsibility_from_compliance_settings.cache_clear()
167
306
 
168
307
  @classmethod
169
308
  def _get_additional_endpoints(cls) -> ConfigDict:
regscale/regscale.py CHANGED
@@ -293,7 +293,7 @@ def banner():
293
293
  \t[#05d1b7].clicli, [#15cfec].;loooool'
294
294
  \t[#05d1b7].clicli, [#18a8e9].:oolloc.
295
295
  \t[#05d1b7].clicli, [#ef7f2e].,cli,. [#18a8e9].clllll,
296
- \t[#05d1b7].clicli. [#ef7f2e].,oxxxxd; [#158fd0].:lllll;
296
+ \t[#05d1b7].clicli. [#ef7f2e].,oxxxxd; [#18a8e9].:lllll;
297
297
  \t[#05d1b7] ..cli. [#f68d1f]';cdxxxxxo, [#18a8e9].cllllc,
298
298
  \t [#f68d1f].:odddddddc. [#1b97d5] .;ccccc:.
299
299
  \t[#ffc42a] ..'. [#f68d1f].;ldddddddl' [#0c8cd7].':ccccc:.
@@ -3,9 +3,11 @@
3
3
  """Rich Logging"""
4
4
 
5
5
 
6
+ # standard python imports
7
+ from typing import Optional
8
+
6
9
  from regscale.core.app.api import Api
7
10
 
8
- # standard python imports
9
11
  from regscale.core.utils.graphql import GraphQLQuery
10
12
  from regscale.models.regscale_models.modules import Modules
11
13
 
@@ -46,3 +48,23 @@ def validate_regscale_object(parent_id: int, parent_module: str) -> bool:
46
48
  if mod_lookup.lower() in [k.lower() for k in dat.keys()] and dat[list(dat.keys())[0]]["totalCount"] > 0:
47
49
  result = True
48
50
  return result
51
+
52
+
53
+ def validate_component_or_ssp(ssp_id: Optional[int], component_id: Optional[int]) -> None:
54
+ """
55
+ Validate that either an SSP or component exists in RegScale.
56
+
57
+ :param Optional[int] ssp_id: The RegScale SSP ID
58
+ :param Optional[int] component_id: The RegScale component ID
59
+ :rtype: None
60
+ """
61
+ from regscale.core.app.utils.app_utils import error_and_exit
62
+
63
+ if not ssp_id and not component_id:
64
+ error_and_exit("Please provide a RegScale SSP ID or component ID.")
65
+ if ssp_id and component_id:
66
+ error_and_exit("Please provide either a RegScale SSP ID or component ID, but not both.")
67
+ record_id = ssp_id or component_id
68
+ record_module = "securityplans" if ssp_id else "components"
69
+ if not validate_regscale_object(record_id, record_module):
70
+ error_and_exit(f"RegScale {record_module} ID #{record_id} does not exist.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: regscale-cli
3
- Version: 6.24.0.0
3
+ Version: 6.25.0.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
@@ -36,7 +36,7 @@ Requires-Dist: google-cloud-asset ~=3.22
36
36
  Requires-Dist: google-cloud-securitycenter ~=1.25
37
37
  Requires-Dist: gql ~=3.5.0
38
38
  Requires-Dist: inflect
39
- Requires-Dist: jira ==3.8.0
39
+ Requires-Dist: jira >=3.8.0
40
40
  Requires-Dist: jwcrypto >=1.5.1
41
41
  Requires-Dist: lxml ==5.3.0
42
42
  Requires-Dist: markdown
@@ -105,7 +105,7 @@ Requires-Dist: greenlet >=3.0.3 ; extra == 'airflow'
105
105
  Requires-Dist: importlib-metadata >=6.5 ; extra == 'airflow'
106
106
  Requires-Dist: inflect ; extra == 'airflow'
107
107
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'airflow'
108
- Requires-Dist: jira ==3.8.0 ; extra == 'airflow'
108
+ Requires-Dist: jira >=3.8.0 ; extra == 'airflow'
109
109
  Requires-Dist: jmespath ==1.0.0 ; extra == 'airflow'
110
110
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'airflow'
111
111
  Requires-Dist: lxml ==5.3.0 ; extra == 'airflow'
@@ -189,7 +189,7 @@ Requires-Dist: greenlet >=3.0.3 ; extra == 'airflow-azure'
189
189
  Requires-Dist: importlib-metadata >=6.5 ; extra == 'airflow-azure'
190
190
  Requires-Dist: inflect ; extra == 'airflow-azure'
191
191
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'airflow-azure'
192
- Requires-Dist: jira ==3.8.0 ; extra == 'airflow-azure'
192
+ Requires-Dist: jira >=3.8.0 ; extra == 'airflow-azure'
193
193
  Requires-Dist: jmespath ==1.0.0 ; extra == 'airflow-azure'
194
194
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'airflow-azure'
195
195
  Requires-Dist: lxml ==5.3.0 ; extra == 'airflow-azure'
@@ -273,7 +273,7 @@ Requires-Dist: greenlet >=3.0.3 ; extra == 'airflow-sqlserver'
273
273
  Requires-Dist: importlib-metadata >=6.5 ; extra == 'airflow-sqlserver'
274
274
  Requires-Dist: inflect ; extra == 'airflow-sqlserver'
275
275
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'airflow-sqlserver'
276
- Requires-Dist: jira ==3.8.0 ; extra == 'airflow-sqlserver'
276
+ Requires-Dist: jira >=3.8.0 ; extra == 'airflow-sqlserver'
277
277
  Requires-Dist: jmespath ==1.0.0 ; extra == 'airflow-sqlserver'
278
278
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'airflow-sqlserver'
279
279
  Requires-Dist: lxml ==5.3.0 ; extra == 'airflow-sqlserver'
@@ -365,7 +365,7 @@ Requires-Dist: importlib-resources ; extra == 'all'
365
365
  Requires-Dist: inflect ; extra == 'all'
366
366
  Requires-Dist: jinja2 ; extra == 'all'
367
367
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'all'
368
- Requires-Dist: jira ==3.8.0 ; extra == 'all'
368
+ Requires-Dist: jira >=3.8.0 ; extra == 'all'
369
369
  Requires-Dist: jmespath ==1.0.0 ; extra == 'all'
370
370
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'all'
371
371
  Requires-Dist: lxml ==5.3.0 ; extra == 'all'
@@ -440,7 +440,7 @@ Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'ansible'
440
440
  Requires-Dist: gql ~=3.5.0 ; extra == 'ansible'
441
441
  Requires-Dist: inflect ; extra == 'ansible'
442
442
  Requires-Dist: jinja2 ; extra == 'ansible'
443
- Requires-Dist: jira ==3.8.0 ; extra == 'ansible'
443
+ Requires-Dist: jira >=3.8.0 ; extra == 'ansible'
444
444
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'ansible'
445
445
  Requires-Dist: lxml ==5.3.0 ; extra == 'ansible'
446
446
  Requires-Dist: markdown ; extra == 'ansible'
@@ -506,7 +506,7 @@ Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'dev'
506
506
  Requires-Dist: gql ~=3.5.0 ; extra == 'dev'
507
507
  Requires-Dist: inflect ; extra == 'dev'
508
508
  Requires-Dist: isort ; extra == 'dev'
509
- Requires-Dist: jira ==3.8.0 ; extra == 'dev'
509
+ Requires-Dist: jira >=3.8.0 ; extra == 'dev'
510
510
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'dev'
511
511
  Requires-Dist: lxml-stubs ; extra == 'dev'
512
512
  Requires-Dist: lxml ==5.3.0 ; extra == 'dev'
@@ -592,7 +592,7 @@ Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'server'
592
592
  Requires-Dist: gql ~=3.5.0 ; extra == 'server'
593
593
  Requires-Dist: importlib-resources ; extra == 'server'
594
594
  Requires-Dist: inflect ; extra == 'server'
595
- Requires-Dist: jira ==3.8.0 ; extra == 'server'
595
+ Requires-Dist: jira >=3.8.0 ; extra == 'server'
596
596
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'server'
597
597
  Requires-Dist: lxml ==5.3.0 ; extra == 'server'
598
598
  Requires-Dist: markdown ; extra == 'server'
@@ -1,6 +1,6 @@
1
1
  regscale/__init__.py,sha256=ZygAIkX6Nbjag1czWdQa-yP-GM1mBE_9ss21Xh__JFc,34
2
- regscale/_version.py,sha256=aEKcQkG8x8HCLF1r9TPYAUjkbrx8MzUY1sWdBWNufv4,1198
3
- regscale/regscale.py,sha256=u25AiF58XIfAG2fKjqxVWDhaAOK8-gZ19Y-eWYlM5TI,31480
2
+ regscale/_version.py,sha256=2VqR4bHAUJozo-V_QrqGicdNxrWhSlj6A87PDDLku9k,1198
3
+ regscale/regscale.py,sha256=4LzcbkBxPh23cCLANVEEr6uNoZ0sebHec0N-VJm5_vA,31480
4
4
  regscale/airflow/__init__.py,sha256=yMwN0Bz4JbM0nl5qY_hPegxo_O2ilhTOL9PY5Njhn-s,270
5
5
  regscale/airflow/click_dags.py,sha256=H3SUR5jkvInNMv1gu-VG-Ja_H-kH145CpQYNalWNAbE,4520
6
6
  regscale/airflow/click_mixins.py,sha256=BTwKWsEu6KVtlrzFbXpD_RuEpMzc-CSnCCySUzqzCgQ,3571
@@ -35,8 +35,8 @@ regscale/core/decorators.py,sha256=YuX9VCbCJh76qlc_6ungu0nD4VT1VsV2spXH_bsDTfY,8
35
35
  regscale/core/lazy_group.py,sha256=S2-nA5tzm47A929NOTqGkzrzKuZQDlq2OAPbNnG1W1Q,2046
36
36
  regscale/core/login.py,sha256=-8vy1HVAtv1iARnZh6uzYtwmx8VFYPwLYR0QAf1ttCk,2714
37
37
  regscale/core/app/__init__.py,sha256=nGcCN1vWBAnZzoccIlt0jwWQdegCOrBWOB7LPhQkQSs,96
38
- regscale/core/app/api.py,sha256=vDcdvXLz9hEu6R-U-f9z7zZ-aXmmhCjiUKlhzm5M6zA,23602
39
- regscale/core/app/application.py,sha256=dRiG8X7LFfs5KuLOgZlJWZ_WVs9EitNxNuRYZCi25-c,32104
38
+ regscale/core/app/api.py,sha256=yJhlKICpy8irEcZaFWq36_Bi2I_VcQ7Fh_LtGm0-H98,23632
39
+ regscale/core/app/application.py,sha256=JLPXjKYpFYHKmo4dmaAG1N9urMjPUdL5dbow_fPcUTM,32285
40
40
  regscale/core/app/logz.py,sha256=8AdBKmquv45JGi5fCMc38JqQg6-FpUONGmqfd5EGwrI,2583
41
41
  regscale/core/app/internal/__init__.py,sha256=rod4nmE7rrYDdbuYF4mCWz49TK_2r-v4tWy1UHW63r0,4808
42
42
  regscale/core/app/internal/admin_actions.py,sha256=hOdma7QGwFblmxEj9UTjiWWmZGUS5_ZFtxL2qZdhf-Q,7443
@@ -45,7 +45,7 @@ regscale/core/app/internal/catalog.py,sha256=svBAgFZaGrkNHh2gZEo1ex2vdjllAIc4940
45
45
  regscale/core/app/internal/comparison.py,sha256=eRnCKhq3Kyzh-aUgD6phQH0eONCSCkl5Vz0dr2ymDpQ,16720
46
46
  regscale/core/app/internal/control_editor.py,sha256=bvltPfUJERVcPW14njFzMHLzb4KLcXlmtAJMRDXegXI,19338
47
47
  regscale/core/app/internal/encrypt.py,sha256=yOEMDDlpI0Sc0LkoeCtXbypnOF8cxoDrzKRU5d3POFQ,5927
48
- regscale/core/app/internal/evidence.py,sha256=P_I0wyk37M48NZMWkXwX55HQlTjdxrbhuto4SUMHpt8,50470
48
+ regscale/core/app/internal/evidence.py,sha256=dB95G-0ppLyrYg2BvUhyrdyXZ419vjJPapPVm5q-VTI,52423
49
49
  regscale/core/app/internal/file_uploads.py,sha256=EfQ4ViJBHzU9bxnFunK3ahA6T9A6pnA-Jk2NrtgmrQY,4776
50
50
  regscale/core/app/internal/healthcheck.py,sha256=ef4Mwk19vi71bv-Xkny5_EGG1UXTbCO5dvEIzHyyfVA,2010
51
51
  regscale/core/app/internal/login.py,sha256=GsFaBwmSc32liWoRnMFy78m8SuB9pfUV0c1lyCEXFEo,10996
@@ -100,7 +100,7 @@ regscale/core/utils/urls.py,sha256=ZcU9OJqDmVQXgu6BrLESIp2KMkkUuzTZZ_wHsZMzfA4,6
100
100
  regscale/dev/__init__.py,sha256=wVP59B1iurp36ul8pD_CjmunJLHOdKWWodz1r5loNvw,190
101
101
  regscale/dev/analysis.py,sha256=9s6pfTGK6FBqV-karQQnCc_GYHloETmFyvsvVJ5jBm8,15603
102
102
  regscale/dev/cli.py,sha256=VT9QHhfJX10KdJlSL9zBx-D__0H7qqS8G1GPwOb59Xs,8783
103
- regscale/dev/code_gen.py,sha256=wh9398z_CoEN7ndBf31N5xrXZx1FKoZK34w77WWfY9Y,22538
103
+ regscale/dev/code_gen.py,sha256=Pkb2J4t-2tzsvMBb-vpnwx8mVg4KnbyKlaufNwImXJY,26392
104
104
  regscale/dev/dirs.py,sha256=wmEKM4UZjMXDiNi6a17JchhyfQNvJg6ACQmqT_Xt6V0,2044
105
105
  regscale/dev/docs.py,sha256=Ngtd2Z0vYXYQXUIAqhL02f-_fUuIpmTPa5YIO3wAOHY,14678
106
106
  regscale/dev/monitoring.py,sha256=h0pewRSXF8bLEtQ9dB3D0XqGTM4HtjaCiUUH3ijEllM,835
@@ -111,13 +111,13 @@ regscale/exceptions/validation_exception.py,sha256=_DW_GARtPr_Dyy8tolnvC_AYsHRsU
111
111
  regscale/integrations/__init__.py,sha256=Sqthp3Jggo7co_go380cLn3OAb0cHwqL609_4QJSFBY,58
112
112
  regscale/integrations/api_paginator.py,sha256=73rjaNM9mGv8evHAeoObXEjZPg-bJuGPo60ewCLEil8,33192
113
113
  regscale/integrations/api_paginator_example.py,sha256=lEuYI-xEGcjnXuIzbCobCP0YRuukLF0s8S3d382SAH4,12119
114
- regscale/integrations/compliance_integration.py,sha256=cyc8iPGhKgvb7G9sN1ja4Fi4Rq91llBnJbTkGSKHINE,79967
114
+ regscale/integrations/compliance_integration.py,sha256=as4cb4NWmY9mTaHtu75lvwxScB3OKE3Ge6ki7-zZNBE,91103
115
115
  regscale/integrations/due_date_handler.py,sha256=qIOeFx4LPvOTpqJx8JV5Hj3FLlx0FoaYAsFoXqxYBcs,8343
116
116
  regscale/integrations/integration_override.py,sha256=HjYBCuvNpU3t3FptaqYAkdexLFOZBAFrFE9xU0RD1Nc,5867
117
117
  regscale/integrations/jsonl_scanner_integration.py,sha256=l8nq_T3rE1XX-6HxrNHm3xzxCNWbIjxQvGMdtZWs7KQ,57003
118
- regscale/integrations/scanner_integration.py,sha256=Xglq93nS-B4D4eyGXlU47CcAvp-wckK0AjmSWoPtjeQ,186305
118
+ regscale/integrations/scanner_integration.py,sha256=T9AkwDdL1V2e6G31MLFYsbMzkyX4emqmomsp_muOdew,187010
119
119
  regscale/integrations/variables.py,sha256=MfQ34WuYVN5437A9sZ2ssHRkA3gFhMHfk1DVasceGmY,2336
120
- regscale/integrations/commercial/__init__.py,sha256=fFiuXp-uOFd5HWLKa0PeKw3425OvZqPvsMe8bvh8n_s,14371
120
+ regscale/integrations/commercial/__init__.py,sha256=U2RIsRe4lKufADRwMJY0RhSbL6TX4jLxpCtbcnzvI3k,14607
121
121
  regscale/integrations/commercial/ad.py,sha256=YXSmK8vRf6yi2GnREGa5GrE6GelhFrLj44SY8AO1pK0,15509
122
122
  regscale/integrations/commercial/burp.py,sha256=3BLNKLfwL1x7jfhd8MJD6hdHEpj58pOEtrtCkn2hcWA,3344
123
123
  regscale/integrations/commercial/cpe.py,sha256=vUHKGdq0UlR38pZWqqHLLTdDfooLtE9zIiFHdoFcUr0,5735
@@ -126,7 +126,7 @@ regscale/integrations/commercial/dependabot.py,sha256=V4VbHbwrxHfe7eCilJ7U_MBeIO
126
126
  regscale/integrations/commercial/ecr.py,sha256=oQafB_Lx4CbGDLb6fqNtY1oAWci6-XWsm39URNbqgrk,2687
127
127
  regscale/integrations/commercial/gitlab.py,sha256=dzfqJQ68QI1ee_BriNMyPuXLkzOhc2vR1hhVfq2j13Y,12496
128
128
  regscale/integrations/commercial/ibm.py,sha256=vFloNxSrM2BzoicMSiInYN5dF10BbYHJpJDyyMqZu2I,2766
129
- regscale/integrations/commercial/jira.py,sha256=vhXfVGv2cow_hSKCo2I3k9w9ppfCCrnsa3Mp-mGnd0M,46929
129
+ regscale/integrations/commercial/jira.py,sha256=c_ixudk6YBhXHhrjOFtSzknaaOQh-nl0GqLPgl7P1AA,49906
130
130
  regscale/integrations/commercial/nexpose.py,sha256=fx6O__y7eY0GaAbX8p24_V1VTFfOM7oia4r3aa_qVnE,2847
131
131
  regscale/integrations/commercial/okta.py,sha256=VNwE848xiBxkha4DibkhLJN-fi0T8rLMd30PPAmRjpk,30837
132
132
  regscale/integrations/commercial/prisma.py,sha256=oYS31HlI7GiShUy0r9Luv57Ex3cGqdJcIoVMrwDAC2c,2835
@@ -179,9 +179,9 @@ regscale/integrations/commercial/mappings/__init__.py,sha256=47DEQpj8HBSa-_TImW-
179
179
  regscale/integrations/commercial/mappings/csf_controls.json,sha256=EHOLWrnFr0oRsHBx4LX6pLVoqLuX-Mn7O-CXuzpw-v4,57504
180
180
  regscale/integrations/commercial/mappings/nist_800_53_r5_controls.json,sha256=Vuh8RkKhX84U8VG2zoLG94QL7mvWIF28M-u8B4paxgw,123879
181
181
  regscale/integrations/commercial/microsoft_defender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
- regscale/integrations/commercial/microsoft_defender/defender.py,sha256=qBMeevsYwgXAUiYR2ZlYDHkpncbnfRL_MGCAi3Y5lVM,38181
183
- regscale/integrations/commercial/microsoft_defender/defender_api.py,sha256=8vPcp7j4w89da9SRx2Hzfg2047sBb-2qhJVOhSXJVhI,12472
184
- regscale/integrations/commercial/microsoft_defender/defender_constants.py,sha256=F41IcTchYSOWSl1LpUk_MzXGHK2cxa695hLlwVhGQ-E,3439
182
+ regscale/integrations/commercial/microsoft_defender/defender.py,sha256=JQLdSiGMuDFGXH8wdb3NQXuobcBprg1PR11OEOEBYyQ,51702
183
+ regscale/integrations/commercial/microsoft_defender/defender_api.py,sha256=_Gij8I26tTt6B0RTqRyKPAi58gwl_TnKwe1fu80CPIM,29433
184
+ regscale/integrations/commercial/microsoft_defender/defender_constants.py,sha256=pYIVii1ouy3FYM58UbAdlcYdVoC54vEv0M2FjFk0XmU,9516
185
185
  regscale/integrations/commercial/microsoft_defender/defender_scanner.py,sha256=gUTtbv-yB2gDa3xXZpx1Ygq0hqa77I28516UOrwvla4,10615
186
186
  regscale/integrations/commercial/nessus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
187
  regscale/integrations/commercial/nessus/nessus_utils.py,sha256=lP1_xVmYeyL17muy0jGMnJ5xdON3mi22BVAyDHa9WfU,13525
@@ -218,10 +218,11 @@ regscale/integrations/commercial/stigv2/ckl_parser.py,sha256=RPrDGsKqAbTJMsJd3AY
218
218
  regscale/integrations/commercial/stigv2/click_commands.py,sha256=-765vFF03aSjBxU9SYCpca7x8fPaoTDNQtbk4fKuwYw,2792
219
219
  regscale/integrations/commercial/stigv2/stig_integration.py,sha256=-UlfL0BBI3jFGotctOJyTCRAU9zIXW6mwU7ySrRXE9U,11573
220
220
  regscale/integrations/commercial/synqly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
221
- regscale/integrations/commercial/synqly/assets.py,sha256=wAyoMaR5MizBifnKUnNrx6ZlnmneP07LEBjJuf1POZs,3329
221
+ regscale/integrations/commercial/synqly/assets.py,sha256=2D26tvMvNIpR9YuD0P2h_6oqXfZf5y93xGhb2hPFsn0,6785
222
222
  regscale/integrations/commercial/synqly/edr.py,sha256=4EQSI2-5QnaWXh1idhndToFDOHOb3xycWAdc8NY4Auk,2836
223
+ regscale/integrations/commercial/synqly/query_builder.py,sha256=1MAheCLG_3zUkvDeXbnCFEBybbG09OV-vUtBD0GLx0o,19306
223
224
  regscale/integrations/commercial/synqly/ticketing.py,sha256=akucc9Ok4cTcivH_rmG927WJetJDhZ0L4IF27OC_KOE,8352
224
- regscale/integrations/commercial/synqly/vulnerabilities.py,sha256=qPiw5oWOGQwZadkUIicgLZHwPSTNJpkDA39hooMCkGo,8868
225
+ regscale/integrations/commercial/synqly/vulnerabilities.py,sha256=h2M9wFlCcEpW3HOga6oxFBWeIERICQR9M7dU85_dIkA,12587
225
226
  regscale/integrations/commercial/tenablev2/__init__.py,sha256=UpSY_oww83kz9c7amdbptJKwDB1gAOBQDS-Q9WFp588,295
226
227
  regscale/integrations/commercial/tenablev2/authenticate.py,sha256=VPTmxaVCaah2gJYNeU9P1KoQ734ohGQ-wcVy6JfqDTE,1247
227
228
  regscale/integrations/commercial/tenablev2/commands.py,sha256=4pUfHv_a3ddbKiS_nQ0W6u86rKGzm9PQbEF67OfsE-4,27862
@@ -238,8 +239,8 @@ regscale/integrations/commercial/trivy/scanner.py,sha256=iiwTvjqRlLRgQvCs_FP0j83
238
239
  regscale/integrations/commercial/wizv2/WizDataMixin.py,sha256=s7F_rVrP9IZa_x_vh3MswR7W_UBHRfd4kHGVsNX4ips,3606
239
240
  regscale/integrations/commercial/wizv2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
240
241
  regscale/integrations/commercial/wizv2/async_client.py,sha256=CElkHxbSlNfRnvJpf4JTBD293NJxQsR-QaTBuHINrLw,12946
241
- regscale/integrations/commercial/wizv2/click.py,sha256=N5GLs3q-oMJzJqqEfy9luuXjc7yKSb0ibLRYmYGqZqw,18873
242
- regscale/integrations/commercial/wizv2/compliance_report.py,sha256=_Ntrq_uaGU6JW5keCxZKKBsA17FZwvHlQ9afS5euwog,62959
242
+ regscale/integrations/commercial/wizv2/click.py,sha256=FkoXEUgZGQUyZNMdaDJTyNE8G_oXmIM5z6JlT-QQW8I,19831
243
+ regscale/integrations/commercial/wizv2/compliance_report.py,sha256=lFTgm78lrTSXJyqGA-wUbKJ2jOnFaHsV8_Ex95iIO-M,68717
243
244
  regscale/integrations/commercial/wizv2/constants.py,sha256=emJHsfdsRuHhWTYqADV4-l6sZNJ-nWGj_l1abdFrXxk,49308
244
245
  regscale/integrations/commercial/wizv2/data_fetcher.py,sha256=CmJyUCeTQIkYBu2LPicpTNwXJrYkRP3xxM55BJQhr2A,16258
245
246
  regscale/integrations/commercial/wizv2/file_cleanup.py,sha256=ENBO9RDXL2kyHkBYaSai83i4kVTUJUF_F0JCj84i-ow,4178
@@ -359,17 +360,18 @@ regscale/models/integration_models/flat_file_importer/__init__.py,sha256=HYO7mrq
359
360
  regscale/models/integration_models/sbom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
361
  regscale/models/integration_models/sbom/cyclone_dx.py,sha256=0pFR0BWBrF5c8_cC_8mj2MXvNOMHOdHbBYXvTVfFAh8,4058
361
362
  regscale/models/integration_models/synqly_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
362
- regscale/models/integration_models/synqly_models/capabilities.json,sha256=R7Oq3YrgFc3HVS0X8DvXrAsAnLIgmos8Rih2PVxh6R4,399849
363
+ regscale/models/integration_models/synqly_models/capabilities.json,sha256=Wcf7dY1zjVfdK5YRRq2lDK_bCPBI9k5TdKKczk4M2Qg,405530
363
364
  regscale/models/integration_models/synqly_models/connector_types.py,sha256=8nxptkTexpskySnmL0obNAff_iu_fx6tJ7i1-4hJvao,461
365
+ regscale/models/integration_models/synqly_models/filter_parser.py,sha256=8rdnHH7gW1A_uWRTexZXzCH-HzRVy5nlvFgtc7ztcsQ,12160
364
366
  regscale/models/integration_models/synqly_models/ocsf_mapper.py,sha256=ftObPhGg9CamnwRZ5z6qi8pW2Gu4JYy8apEo33o7q00,16960
365
367
  regscale/models/integration_models/synqly_models/param.py,sha256=Xt5Zm6lC_VkLj7LF2qXo72TJZHysqttsp5ai0NCf1po,2643
366
- regscale/models/integration_models/synqly_models/synqly_model.py,sha256=9wgR0mNTuteMarnMj3iAIj8Ki9-8rc-pIWZpku4hH_k,34701
368
+ regscale/models/integration_models/synqly_models/synqly_model.py,sha256=qFvN0-3xvoM36GHHR4B0uHguCtVK2iJoEsJTB_OttdY,36419
367
369
  regscale/models/integration_models/synqly_models/tenants.py,sha256=kewIZw-iv18bNXJGG3ghwuFJ4CK5iXQhn_x2-xvV0iM,1078
368
370
  regscale/models/integration_models/synqly_models/connectors/__init__.py,sha256=J3YS7KXLnTPRzeM3lUQpy6HKH7CxPPsWCB-sPXSWcYA,189
369
371
  regscale/models/integration_models/synqly_models/connectors/assets.py,sha256=HHNIAVh5pRuJe8sStqhFEc6VnX2wT0FcY5178nbQgkQ,3705
370
372
  regscale/models/integration_models/synqly_models/connectors/edr.py,sha256=kio3uoEYubCHretpDOJqxdwmzid1IzbVYz0BF64zeL0,5547
371
373
  regscale/models/integration_models/synqly_models/connectors/ticketing.py,sha256=yRBuCkRAVfa_C91r3WqJ9gxrQsoD0qV9cY48YXpJl70,25358
372
- regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py,sha256=jebBkFy6KspZMVGkmLWQm8-enAUsjRJ6z3pM6Wg0Qv0,7193
374
+ regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py,sha256=e92dzLXVgEB66Vv79VWw73Ivk_uttDoiw1d4Ip3cFRQ,7577
373
375
  regscale/models/integration_models/tenable_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
374
376
  regscale/models/integration_models/tenable_models/integration.py,sha256=lplL8zmjTFuhLreW-4y7G1fiCOBgzNAaATq800jgTQc,10271
375
377
  regscale/models/integration_models/tenable_models/models.py,sha256=dmG7btkN4YkDWwnfW5Ldc3tWEAGjPiaRgJjrqMOkPEU,15846
@@ -387,11 +389,11 @@ regscale/models/regscale_models/change.py,sha256=v-FxWrYijGbxAWk7WEIN3piUw8mM3EW
387
389
  regscale/models/regscale_models/checklist.py,sha256=GM15N9krNmKNDJnOgtSDRlUTBVwYtttex_plc64OVWY,13290
388
390
  regscale/models/regscale_models/classification.py,sha256=kz1TxaxnqEwAS3mF8jTH7wbu6EQRZPZqGwxlXb-QEw0,775
389
391
  regscale/models/regscale_models/comment.py,sha256=EJtnk04JcyFUYeiVAHTPkoZuS8XndgmCr8KaprrywRo,1555
390
- regscale/models/regscale_models/compliance_settings.py,sha256=e0Ghjozt8iCgzmCPfYNAqyGcz7rD8Xw4efdhg5QFuyg,3808
391
- regscale/models/regscale_models/component.py,sha256=zURPe-unWeHpkx6OoVq3AxdOYp7Ci14xXMy-AjYmXik,14149
392
+ regscale/models/regscale_models/compliance_settings.py,sha256=F2q7OQEgYK-HrPmDHMcV-6ywzrjnBnU5KGG3StVgK3E,4902
393
+ regscale/models/regscale_models/component.py,sha256=Zbl-glM2WYtDRKtnQSyhXRDY9fqBTSSGz_2pMkAsawg,14196
392
394
  regscale/models/regscale_models/component_mapping.py,sha256=g0cbbW4X49SDdlB_YtKMrP4eiK9OkrJqiut0ucdyVDA,2162
393
395
  regscale/models/regscale_models/control.py,sha256=mO46F1IfiXnLSb3YhylaS3SyjtT51s-r8b3hjix9Gbc,1072
394
- regscale/models/regscale_models/control_implementation.py,sha256=Kj4zDQcn5SQHNy7peh80sCDoveD02I6MBstY82BgOB4,50345
396
+ regscale/models/regscale_models/control_implementation.py,sha256=xLvc8hO48VI1kDKVP3ixdu0SVxnsMbFnYFzi89wR7w0,56338
395
397
  regscale/models/regscale_models/control_objective.py,sha256=qGh8OtATjjc4JS-3bC1AX6TbgtRtz-I0dckbuZ2RzVo,9496
396
398
  regscale/models/regscale_models/control_parameter.py,sha256=5VVkbVZTb2Hzy_WiybU2JtrvhQp8DLSWxRcbSKxktiI,3499
397
399
  regscale/models/regscale_models/control_test.py,sha256=FG-fLS9JJf8__a84W2LtBXtEjzOH9iq2EO949vBx3eY,949
@@ -498,7 +500,7 @@ regscale/utils/threading/threadsafe_list.py,sha256=-ltEj-MQH0dN0z_5aalptwJw2_EAU
498
500
  regscale/utils/threading/threadsafe_set.py,sha256=BWtS10abZdvMcgd3OT6VVpfS28e80hKNDtDkqIRPnPo,2952
499
501
  regscale/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
500
502
  regscale/validation/address.py,sha256=ZgF2ODljUDL7ri7IUUg_fXJxYpVVVqbUjlMHIsgPXJM,865
501
- regscale/validation/record.py,sha256=liBQwtDUzoH-KXsmFi1Fsxtp4OUrq7U5EYua7O3o4Cc,1325
503
+ regscale/validation/record.py,sha256=v8_WS1NbEmlcLYW_8BRVT-UpvjhdmidyvYHlMeHMOlI,2225
502
504
  regscale/visualization/__init__.py,sha256=F8fS2WyyvmXfdWWecWLY5wo5yyIvMZJrDqjSalBd9Mw,173
503
505
  regscale/visualization/click.py,sha256=-fxIwc-RrI3iHdMNTk_dhplC8yUjZXcWuHfZa7ULRfo,922
504
506
  tests/fixtures/__init__.py,sha256=sLuJtRNqBRm8lpE2yKvZFIqwtYho5A5O8KbJj_IpKhQ,41
@@ -553,9 +555,9 @@ tests/regscale/models/test_regscale_model.py,sha256=ZsrEZkC4EtdIsoQuayn1xv2gEGcV
553
555
  tests/regscale/models/test_report.py,sha256=IqUq7C__a1_q_mLaz0PE9Lq6fHggBsB14-AzEYNBxLw,4666
554
556
  tests/regscale/models/test_tenable_integrations.py,sha256=y1qaW77H094VSGHjZdlvF66UCt-nPEib9Mv3cdwbM94,32435
555
557
  tests/regscale/models/test_user_model.py,sha256=e9olv28qBApgnvK6hFHOgXjUC-pkaV8aGDirEIWASL4,4427
556
- regscale_cli-6.24.0.0.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
557
- regscale_cli-6.24.0.0.dist-info/METADATA,sha256=6T2bohVMlgbNakpTUiGWynlNicpTrapmkXGtBXxS7zQ,35027
558
- regscale_cli-6.24.0.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
559
- regscale_cli-6.24.0.0.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
560
- regscale_cli-6.24.0.0.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
561
- regscale_cli-6.24.0.0.dist-info/RECORD,,
558
+ regscale_cli-6.25.0.0.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
559
+ regscale_cli-6.25.0.0.dist-info/METADATA,sha256=O9zALayXiFJ3iPJ4BIgCxIpx1xHG1DpdL4Z7BJo8zBg,35027
560
+ regscale_cli-6.25.0.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
561
+ regscale_cli-6.25.0.0.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
562
+ regscale_cli-6.25.0.0.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
563
+ regscale_cli-6.25.0.0.dist-info/RECORD,,