regscale-cli 6.21.0.0__py3-none-any.whl → 6.21.2.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.
Files changed (54) hide show
  1. regscale/_version.py +1 -1
  2. regscale/core/app/application.py +7 -0
  3. regscale/integrations/commercial/__init__.py +9 -10
  4. regscale/integrations/commercial/amazon/common.py +79 -2
  5. regscale/integrations/commercial/aws/cli.py +183 -9
  6. regscale/integrations/commercial/aws/scanner.py +544 -9
  7. regscale/integrations/commercial/cpe.py +18 -1
  8. regscale/integrations/commercial/import_all/import_all_cmd.py +2 -2
  9. regscale/integrations/commercial/microsoft_defender/__init__.py +0 -0
  10. regscale/integrations/commercial/{defender.py → microsoft_defender/defender.py} +38 -612
  11. regscale/integrations/commercial/microsoft_defender/defender_api.py +286 -0
  12. regscale/integrations/commercial/microsoft_defender/defender_constants.py +80 -0
  13. regscale/integrations/commercial/microsoft_defender/defender_scanner.py +168 -0
  14. regscale/integrations/commercial/qualys/__init__.py +24 -86
  15. regscale/integrations/commercial/qualys/containers.py +2 -0
  16. regscale/integrations/commercial/qualys/scanner.py +7 -2
  17. regscale/integrations/commercial/sonarcloud.py +110 -71
  18. regscale/integrations/commercial/tenablev2/jsonl_scanner.py +2 -1
  19. regscale/integrations/commercial/wizv2/async_client.py +10 -3
  20. regscale/integrations/commercial/wizv2/click.py +105 -26
  21. regscale/integrations/commercial/wizv2/constants.py +249 -1
  22. regscale/integrations/commercial/wizv2/data_fetcher.py +401 -0
  23. regscale/integrations/commercial/wizv2/finding_processor.py +295 -0
  24. regscale/integrations/commercial/wizv2/issue.py +2 -2
  25. regscale/integrations/commercial/wizv2/parsers.py +3 -2
  26. regscale/integrations/commercial/wizv2/policy_compliance.py +3057 -0
  27. regscale/integrations/commercial/wizv2/policy_compliance_helpers.py +564 -0
  28. regscale/integrations/commercial/wizv2/scanner.py +19 -25
  29. regscale/integrations/commercial/wizv2/utils.py +258 -85
  30. regscale/integrations/commercial/wizv2/variables.py +4 -3
  31. regscale/integrations/compliance_integration.py +1607 -0
  32. regscale/integrations/public/fedramp/fedramp_five.py +93 -8
  33. regscale/integrations/public/fedramp/markdown_parser.py +7 -1
  34. regscale/integrations/scanner_integration.py +57 -6
  35. regscale/models/__init__.py +1 -1
  36. regscale/models/app_models/__init__.py +1 -0
  37. regscale/models/integration_models/cisa_kev_data.json +103 -4
  38. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  39. regscale/{integrations/commercial/wizv2/models.py → models/integration_models/wizv2.py} +4 -12
  40. regscale/models/regscale_models/file.py +4 -0
  41. regscale/models/regscale_models/issue.py +151 -8
  42. regscale/models/regscale_models/regscale_model.py +4 -2
  43. regscale/models/regscale_models/security_plan.py +1 -1
  44. regscale/utils/graphql_client.py +3 -1
  45. {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/METADATA +9 -9
  46. {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/RECORD +52 -44
  47. tests/regscale/core/test_version_regscale.py +5 -3
  48. tests/regscale/integrations/test_wiz_policy_compliance_affected_controls.py +154 -0
  49. tests/regscale/test_authorization.py +0 -65
  50. tests/regscale/test_init.py +0 -96
  51. {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/LICENSE +0 -0
  52. {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/WHEEL +0 -0
  53. {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/entry_points.txt +0 -0
  54. {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  regscale/__init__.py,sha256=ZygAIkX6Nbjag1czWdQa-yP-GM1mBE_9ss21Xh__JFc,34
2
- regscale/_version.py,sha256=17Hr2OW5lfl7oIZmlsvv4nSvqpeEGwYv23YLZ2Wbe9s,1198
2
+ regscale/_version.py,sha256=RSHUslawemipH8yaOMvaSKPUKiKa27EuRFDlAk-t2k4,1198
3
3
  regscale/regscale.py,sha256=xcxnTwEwWgfO3Fnp0LVo32SZCJzAswq3WDZgm21nHnI,30914
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
@@ -36,7 +36,7 @@ regscale/core/lazy_group.py,sha256=S2-nA5tzm47A929NOTqGkzrzKuZQDlq2OAPbNnG1W1Q,2
36
36
  regscale/core/login.py,sha256=-8vy1HVAtv1iARnZh6uzYtwmx8VFYPwLYR0QAf1ttCk,2714
37
37
  regscale/core/app/__init__.py,sha256=nGcCN1vWBAnZzoccIlt0jwWQdegCOrBWOB7LPhQkQSs,96
38
38
  regscale/core/app/api.py,sha256=CSyUCV6haBAQ9IyE1FViJcAfTcoS5GJRaULwnRoAV9U,23499
39
- regscale/core/app/application.py,sha256=-Or42DMJEIzaGWEMrYFVoXXm8i-sWAfbqNfk6Rxe99U,31641
39
+ regscale/core/app/application.py,sha256=R86hqlOG5AI1kpLQr16cDsm9cZvBUz0FY9S9-gcU144,31867
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
@@ -111,16 +111,16 @@ 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=8HPu9WRheJjoowP8fnTjJOGIFcB8qEwbP-qEGPDdAsY,68428
114
115
  regscale/integrations/integration_override.py,sha256=HjYBCuvNpU3t3FptaqYAkdexLFOZBAFrFE9xU0RD1Nc,5867
115
116
  regscale/integrations/jsonl_scanner_integration.py,sha256=l8nq_T3rE1XX-6HxrNHm3xzxCNWbIjxQvGMdtZWs7KQ,57003
116
- regscale/integrations/scanner_integration.py,sha256=gxSiwJtukI4MgICaPgGIX2UH1hSvqCanA5lV1XfOIIM,142841
117
+ regscale/integrations/scanner_integration.py,sha256=JpRr7LgzOdRdrncJ-wJrypgUTVWZ1j3Jbhl0zrNMvts,145540
117
118
  regscale/integrations/variables.py,sha256=MfQ34WuYVN5437A9sZ2ssHRkA3gFhMHfk1DVasceGmY,2336
118
- regscale/integrations/commercial/__init__.py,sha256=sVbzBnLbKRhnAmRsIw8kRvfbyJojPfVqzH3OlgoxvqM,13927
119
+ regscale/integrations/commercial/__init__.py,sha256=LZj1qV5f7RdHIOfedDVELV62ADe5gyNccWayHMF1aVc,14026
119
120
  regscale/integrations/commercial/ad.py,sha256=YXSmK8vRf6yi2GnREGa5GrE6GelhFrLj44SY8AO1pK0,15509
120
121
  regscale/integrations/commercial/burp.py,sha256=3BLNKLfwL1x7jfhd8MJD6hdHEpj58pOEtrtCkn2hcWA,3344
121
- regscale/integrations/commercial/cpe.py,sha256=eXZeDXicnp1yYgKuyKcthQUYxXi2Pgc__UD8lUqr5H0,4924
122
+ regscale/integrations/commercial/cpe.py,sha256=vUHKGdq0UlR38pZWqqHLLTdDfooLtE9zIiFHdoFcUr0,5735
122
123
  regscale/integrations/commercial/crowdstrike.py,sha256=6x7_GlYDRCZvPZwqgrDT5KMnXCa6H4RKO-FNkiYxHgU,40194
123
- regscale/integrations/commercial/defender.py,sha256=yoKFAj4N-kpkKJIjiVDnFv8JbMsXYdyYTtle0BajnZ8,66573
124
124
  regscale/integrations/commercial/dependabot.py,sha256=V4VbHbwrxHfe7eCilJ7U_MBeIO6X3wetGfIo2DJYe_c,7793
125
125
  regscale/integrations/commercial/ecr.py,sha256=oQafB_Lx4CbGDLb6fqNtY1oAWci6-XWsm39URNbqgrk,2687
126
126
  regscale/integrations/commercial/gitlab.py,sha256=dzfqJQ68QI1ee_BriNMyPuXLkzOhc2vR1hhVfq2j13Y,12496
@@ -132,17 +132,17 @@ regscale/integrations/commercial/prisma.py,sha256=oYS31HlI7GiShUy0r9Luv57Ex3cGqd
132
132
  regscale/integrations/commercial/salesforce.py,sha256=vvXWlXxhJMQj45tU7wz7o4YbkhqjPlaMx_6SWYkI3Bs,36671
133
133
  regscale/integrations/commercial/servicenow.py,sha256=nUVZwt8-G1rQhwACX6i2BKIAjkMtd46uskBznxgOOsA,64014
134
134
  regscale/integrations/commercial/snyk.py,sha256=CriDWqzZAT9OHYEUNnxBrluzW1C-S4XyoyW2kS4lv4s,3222
135
- regscale/integrations/commercial/sonarcloud.py,sha256=df_cjj-N8DkneZjc_Mna2hbV9rg49gUHX3JD5TVANhw,10069
135
+ regscale/integrations/commercial/sonarcloud.py,sha256=p_XfEa2MGUYP3qVF_CKgsAGPWsS2h__1INnK2jS7afY,11956
136
136
  regscale/integrations/commercial/sqlserver.py,sha256=PcDLmsZ9xU5NlFpwPZyMhhxCgX4JK2Ztn2S6kCG4mws,11614
137
137
  regscale/integrations/commercial/veracode.py,sha256=sKeGXvjqP8LfFP56xavAyx5CxfKxpJIEw-PTxrHJ8bc,3374
138
138
  regscale/integrations/commercial/xray.py,sha256=rsmlGqj4N7hzt6rW5UIKOBZD2maDVwXxOXiYKlI6F8c,2728
139
139
  regscale/integrations/commercial/amazon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
- regscale/integrations/commercial/amazon/common.py,sha256=qX0GkUzl0PSwOPTtEH94Qgixi8D5s_Xbo2yMmQhcWnY,3343
140
+ regscale/integrations/commercial/amazon/common.py,sha256=EHTu5YEceOsznZQTB7IF9K1oS-JDSYlFBBRMZDvMhaQ,6189
141
141
  regscale/integrations/commercial/aqua/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  regscale/integrations/commercial/aqua/aqua.py,sha256=bdwqyir9ztGRwqZlWBQIHjtBEo2utSy5HJoraAx823I,2656
143
143
  regscale/integrations/commercial/aws/__init__.py,sha256=Pii3CMGvIwZnTSenuvDvuybWXBtIRdGyvF02sykzg1A,203
144
- regscale/integrations/commercial/aws/cli.py,sha256=B_Ol7p5PmaNqQK4Y5GVyONZZBbtadTSJAq70YRD6hBs,9227
145
- regscale/integrations/commercial/aws/scanner.py,sha256=E3antyGd1HG0cMAM6hurKeij6li7mCstKFQTl3XZ_z4,33600
144
+ regscale/integrations/commercial/aws/cli.py,sha256=Q2QlUcbYRzZzg9VZ5RDOTdVkkWc4UFYX7f5cMNlOZMY,14853
145
+ regscale/integrations/commercial/aws/scanner.py,sha256=odN8nWhIlxGLBdVVVgfhp9wHq5yE32pzr9BK7OIjDkw,56770
146
146
  regscale/integrations/commercial/aws/inventory/__init__.py,sha256=nBWBRs_lTbp3tfCcnmN855qQpnXtwyJ5miTXlD7Uhcs,4302
147
147
  regscale/integrations/commercial/aws/inventory/base.py,sha256=KL1Ntz0h0WGDu84LQf3y92uLl9a0sl4yIFi6-ZIFAMI,2068
148
148
  regscale/integrations/commercial/aws/inventory/resources/__init__.py,sha256=wP8TMIixWGCn2rBNFW6XzhME-xO8kpxi9edMUJgpso4,523
@@ -172,21 +172,26 @@ regscale/integrations/commercial/grype/__init__.py,sha256=KRuTTlOokQjrkpOmhrefwd
172
172
  regscale/integrations/commercial/grype/commands.py,sha256=ELF1w0HC4Ps8xjAVn7MCGuoPLnt79oXArqf-lh39SH4,2338
173
173
  regscale/integrations/commercial/grype/scanner.py,sha256=Hue1iEKuFsDCvf22IGc9Yac2L1I11ODrS4J4TWvzJUU,16987
174
174
  regscale/integrations/commercial/import_all/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
- regscale/integrations/commercial/import_all/import_all_cmd.py,sha256=87OGCiOeMSAmEZEN4i8MhEK3qyOJUndk-d4i-Q-l_xc,18286
175
+ regscale/integrations/commercial/import_all/import_all_cmd.py,sha256=rOwykN0-kZYS-ABa4fR-hr5asYX8iBqMMe4qeci--dY,18308
176
176
  regscale/integrations/commercial/import_all/scan_file_fingerprints.json,sha256=8c_hnfwbq9bEHr3f14hzcnA9vrehQ-_ZsAIZ4YTPB6w,1981
177
177
  regscale/integrations/commercial/mappings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
178
  regscale/integrations/commercial/mappings/csf_controls.json,sha256=EHOLWrnFr0oRsHBx4LX6pLVoqLuX-Mn7O-CXuzpw-v4,57504
179
179
  regscale/integrations/commercial/mappings/nist_800_53_r5_controls.json,sha256=Vuh8RkKhX84U8VG2zoLG94QL7mvWIF28M-u8B4paxgw,123879
180
+ regscale/integrations/commercial/microsoft_defender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
+ regscale/integrations/commercial/microsoft_defender/defender.py,sha256=qBMeevsYwgXAUiYR2ZlYDHkpncbnfRL_MGCAi3Y5lVM,38181
182
+ regscale/integrations/commercial/microsoft_defender/defender_api.py,sha256=8vPcp7j4w89da9SRx2Hzfg2047sBb-2qhJVOhSXJVhI,12472
183
+ regscale/integrations/commercial/microsoft_defender/defender_constants.py,sha256=F41IcTchYSOWSl1LpUk_MzXGHK2cxa695hLlwVhGQ-E,3439
184
+ regscale/integrations/commercial/microsoft_defender/defender_scanner.py,sha256=gUTtbv-yB2gDa3xXZpx1Ygq0hqa77I28516UOrwvla4,10615
180
185
  regscale/integrations/commercial/nessus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
186
  regscale/integrations/commercial/nessus/nessus_utils.py,sha256=lP1_xVmYeyL17muy0jGMnJ5xdON3mi22BVAyDHa9WfU,13525
182
187
  regscale/integrations/commercial/nessus/scanner.py,sha256=sQWoO1qCEl43Ww1fjJ3v231AVNWco5bKmuzzUM-Ax4Q,17455
183
188
  regscale/integrations/commercial/opentext/__init__.py,sha256=zqCPb_4rYRZZPXfeKn4AoZyyYyQ6MU4C0lCs2ysOBhc,251
184
189
  regscale/integrations/commercial/opentext/commands.py,sha256=TTClFg16EzlXQOjdQQ6AdWuVuh7H2zO0V9rXd73-ni0,2572
185
190
  regscale/integrations/commercial/opentext/scanner.py,sha256=QAb9FPiYeQCEnqL3dnFBFe64LydwLaR8HWpYmabgcbE,22581
186
- regscale/integrations/commercial/qualys/__init__.py,sha256=wavc61vUdLTGyVmj3JKqv6dRs6HbZAVo2x-tc0U8PtQ,92060
187
- regscale/integrations/commercial/qualys/containers.py,sha256=UBLx37xU-pam544xnwr_nzFIvokDmLiB7mF9ZoMwU3c,12047
191
+ regscale/integrations/commercial/qualys/__init__.py,sha256=K9MfFXzLEmj3vRiQ6Mw7LpZa6AI6OugJaVYhyRKrGzA,89871
192
+ regscale/integrations/commercial/qualys/containers.py,sha256=KD9DJlE7E9y0_BM-HJtizr03p9dMEi-2uO4bwdwCP8M,12163
188
193
  regscale/integrations/commercial/qualys/qualys_error_handler.py,sha256=2nlxeNLQMOpkiTij39VTsZg-2AFQsM6-rwlBW2pVpKY,18594
189
- regscale/integrations/commercial/qualys/scanner.py,sha256=X-TvrDigfvSdJ-3GsDivlrEuVzZZwTQEF-PLSMsCvws,56554
194
+ regscale/integrations/commercial/qualys/scanner.py,sha256=fKtMo2IHyBHG0Y5xgATztr3fXjzNIBIeXEUP_87w2W4,56732
190
195
  regscale/integrations/commercial/qualys/variables.py,sha256=TPoIW5_yNmU6c0AlLOpHQdxp6OrH8jUmMJikqT7YYz8,962
191
196
  regscale/integrations/commercial/sap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
197
  regscale/integrations/commercial/sap/click.py,sha256=pWgjUOA_4WKkDUWcE8z4EshnJUdrTl15NKUfKpKyqzE,522
@@ -216,7 +221,7 @@ regscale/integrations/commercial/synqly/vulnerabilities.py,sha256=qPiw5oWOGQwZad
216
221
  regscale/integrations/commercial/tenablev2/__init__.py,sha256=UpSY_oww83kz9c7amdbptJKwDB1gAOBQDS-Q9WFp588,295
217
222
  regscale/integrations/commercial/tenablev2/authenticate.py,sha256=VPTmxaVCaah2gJYNeU9P1KoQ734ohGQ-wcVy6JfqDTE,1247
218
223
  regscale/integrations/commercial/tenablev2/commands.py,sha256=4pUfHv_a3ddbKiS_nQ0W6u86rKGzm9PQbEF67OfsE-4,27862
219
- regscale/integrations/commercial/tenablev2/jsonl_scanner.py,sha256=zNruS_Oi6ls6lJTUxwdD6jRiXCvVLuGI2nvpF29pvU4,83485
224
+ regscale/integrations/commercial/tenablev2/jsonl_scanner.py,sha256=6dv92JslX_p_N6vuwCj4hj1OPy935a-ZjPz0dsWaXuw,83577
220
225
  regscale/integrations/commercial/tenablev2/sc_scanner.py,sha256=WQ7ctneHz3fYOrR_GvVUJL3BuKNoN515y7pG8ATMjOM,24102
221
226
  regscale/integrations/commercial/tenablev2/scanner.py,sha256=bKm7MmZ_xAjKwNT0x16WvuRbQcip3pXg8xqPNHejgKs,21584
222
227
  regscale/integrations/commercial/tenablev2/stig_parsers.py,sha256=01h5ImYMUsjrVHaGgqj5JVBx6Jzlhg06ufu0SL_uBEs,5983
@@ -228,16 +233,19 @@ regscale/integrations/commercial/trivy/commands.py,sha256=YGQFtpQGkmcLT3X2OVp7lt
228
233
  regscale/integrations/commercial/trivy/scanner.py,sha256=iiwTvjqRlLRgQvCs_FP0j83B7ApOta0MSXyO0-iHfSk,11309
229
234
  regscale/integrations/commercial/wizv2/WizDataMixin.py,sha256=s7F_rVrP9IZa_x_vh3MswR7W_UBHRfd4kHGVsNX4ips,3606
230
235
  regscale/integrations/commercial/wizv2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
231
- regscale/integrations/commercial/wizv2/async_client.py,sha256=NOlR10XFnyZFGyYbex7Nw2pUMNteVH2M2pz3cJTQe6M,12485
232
- regscale/integrations/commercial/wizv2/click.py,sha256=DPis8cMST7zVXMzajYUGqI5WNg6nh08afiQhExm54_c,12276
233
- regscale/integrations/commercial/wizv2/constants.py,sha256=JSWbQ7CTqqzpotmgCFVgIlw6_PHoXTb2pd6BChi8igk,39387
234
- regscale/integrations/commercial/wizv2/issue.py,sha256=qj5_g-SoOz6f5QDgs34GdQEyxFwJLKAWl1EVx7vjrAw,13407
235
- regscale/integrations/commercial/wizv2/models.py,sha256=hZ6557LJfcp1_NRbMM0V_G1erz1jEFmsuKPn86kXE54,5667
236
- regscale/integrations/commercial/wizv2/parsers.py,sha256=BD0i-80NhfQAHYPk0EAbUClXfzxLT3aHzb2Gs2ObVAk,11811
236
+ regscale/integrations/commercial/wizv2/async_client.py,sha256=a_UVGKFpfmufZLaigFaWFQTS8xTrJF6NcNKQjG7pMcw,12819
237
+ regscale/integrations/commercial/wizv2/click.py,sha256=qTNLsl6ZRgN-O2Bnguav9ztaWaAgdTHFpiJVebpD5iM,15350
238
+ regscale/integrations/commercial/wizv2/constants.py,sha256=E7DDUhPVp372wZCVZZffdD7LRO6tGdxljaR_aHlzEx0,46910
239
+ regscale/integrations/commercial/wizv2/data_fetcher.py,sha256=tMdwWfaQCqLpZg9tGEPdl1eM56zU0RkEWi2Jm3-7A6Y,13804
240
+ regscale/integrations/commercial/wizv2/finding_processor.py,sha256=Rn2dYob4cz24_Ks-UTwNQe-KQ6hmFWS6GB8PQXV0ZPE,11361
241
+ regscale/integrations/commercial/wizv2/issue.py,sha256=PA_7BNpCnHGoAc1caU6COGHaIIvCBvIt6DLn3L7Bilo,13451
242
+ regscale/integrations/commercial/wizv2/parsers.py,sha256=dsSMiZaUrBXbuW7U-I5nLoF-TQlpvXys83sTSqT4Yks,11819
243
+ regscale/integrations/commercial/wizv2/policy_compliance.py,sha256=GjqgQu8o3Hajd17nXcPyU9qsM-6ZDzNt2pQs6ZONzbg,129874
244
+ regscale/integrations/commercial/wizv2/policy_compliance_helpers.py,sha256=-KAlDxMiojyUX2DtUi3uVbpmFhDLtGs7wj11MPBCaRE,22174
237
245
  regscale/integrations/commercial/wizv2/sbom.py,sha256=QcGaYiBGtZ3mBcbo-KGl-I2u6QHKAIinTk26LPy0Kng,4466
238
- regscale/integrations/commercial/wizv2/scanner.py,sha256=h4wr71sEha6eICdwbdzHdTz3_WZpZ9qz5Tnx1IuXnHU,74937
239
- regscale/integrations/commercial/wizv2/utils.py,sha256=7iRFt0iklU0VKnB63rhCmMqWocT78ul3AWUCfvO12QY,47868
240
- regscale/integrations/commercial/wizv2/variables.py,sha256=ukL1ul7EoV3Jh7eQW5kvSJkV3SoTfHxjTjxd5Z5J9wA,1903
246
+ regscale/integrations/commercial/wizv2/scanner.py,sha256=weSjSBFvvgHmMJp4lpjgomgvBIJ7rjpg_7W7JW-ds-A,74566
247
+ regscale/integrations/commercial/wizv2/utils.py,sha256=npdIwR_XG_5VZkr_YXgMe8cjhcYKncNndglD55qwWc8,55996
248
+ regscale/integrations/commercial/wizv2/variables.py,sha256=2DVIN4JPYX9hN6wTdEI9ZdHXYDPpYSu4mAC0yVibPLg,1992
241
249
  regscale/integrations/commercial/wizv2/wiz_auth.py,sha256=qGcUhpC9eRkJIngmv3i9yHdp0q9rv6AvA5gHkypYzCE,5549
242
250
  regscale/integrations/integration/__init__.py,sha256=WJgPLnEahD94QLE8NR8QCzlf8xk2ix76_WPDlf98ezU,70
243
251
  regscale/integrations/integration/integration.py,sha256=pr_fbqBieYbqp3PdBjuqKuZCYFf0kF4GkFdlViTKG54,586
@@ -259,12 +267,12 @@ regscale/integrations/public/fedramp/docx_parser.py,sha256=EA9g1iTlB6-GtOzV9JwGW
259
267
  regscale/integrations/public/fedramp/fedramp_cis_crm.py,sha256=IVASI6W0uEOg_SyxJSqyHev1KzSwEnF1RTWYT3qfViw,64576
260
268
  regscale/integrations/public/fedramp/fedramp_common.py,sha256=Mdy3_WdCEcTwSXEEKXiODmr2YJTWcTg6jfyWZJWfruQ,115406
261
269
  regscale/integrations/public/fedramp/fedramp_docx.py,sha256=eKkRwfcIi4aHJp4ajKDUGJECItwrZwYfCiKzmfB2W1Q,13703
262
- regscale/integrations/public/fedramp/fedramp_five.py,sha256=F4KIOdnYaRjJrJHJYsN9Bmf6i5s0nus-t_GaAh8A3ow,92645
270
+ regscale/integrations/public/fedramp/fedramp_five.py,sha256=A4ssNsdMrTTFGOEO8WnQhD-DQrfk74LASgFAaqii_S8,96730
263
271
  regscale/integrations/public/fedramp/fedramp_traversal.py,sha256=BkgwsFluZO5g0Rc0WujYgbc1_YLofamJzFP7Z5UYfao,4528
264
272
  regscale/integrations/public/fedramp/import_fedramp_r4_ssp.py,sha256=Opld0vEZ4b71cIDogu6ykTUL86tXZVTSnwQzjz8w_4U,9925
265
273
  regscale/integrations/public/fedramp/import_workbook.py,sha256=VFNBjBNLLRL3WjkJmE9CamizNsLgfdX5g8YolOr8lPY,19658
266
274
  regscale/integrations/public/fedramp/inventory_items.py,sha256=nBgVgigMyZ2C6fJ9QCvz-8KvSlGtqi1lqC3alBUlzyg,10080
267
- regscale/integrations/public/fedramp/markdown_parser.py,sha256=I2VI8NImOnHfB1eE3iLG_gK6uqqqImL7I_YEkzh6INE,5339
275
+ regscale/integrations/public/fedramp/markdown_parser.py,sha256=TwNFFRiXaoocNpjo8SfzBY8D6NTd7FsShnzE9V89kZw,5561
268
276
  regscale/integrations/public/fedramp/metadata.py,sha256=eh8AA5YNHUxHGnlbLRmhovINBKqkAJR98EUFDX1g5Z0,26543
269
277
  regscale/integrations/public/fedramp/parts_mapper.py,sha256=aBh1gWo-3-JFDDxHQaxrvqC7OFTxS6qWEFfoHlknomc,3787
270
278
  regscale/integrations/public/fedramp/properties.py,sha256=Yr9NGM9-vFTbnipl7TRNfo83HJ7FKkCJSECaLtT35eQ,7007
@@ -291,7 +299,7 @@ regscale/integrations/public/fedramp/poam/scanner.py,sha256=M15Mx6xC1IjSbJ4ZHXjF
291
299
  regscale/integrations/transformer/__init__.py,sha256=XFmkvjPjpZkQPknz0NEC0pQsWA2JNtPygbeUCf_b5jk,484
292
300
  regscale/integrations/transformer/data_transformer.py,sha256=J2FlY1vqPVzVafE4AwjJZvuN_rmsg4xP6qZjNqQtBt8,15407
293
301
  regscale/integrations/transformer/mappings/__init__.py,sha256=Pp6Qb0dVtr0ehIujmSbNLzQy2nVogLajiDfP4XY_7-w,247
294
- regscale/models/__init__.py,sha256=-0IaJGCvCkrSNqhv-l63hs1etqk3uJF278AKxvWjWxk,299
302
+ regscale/models/__init__.py,sha256=GiFSVSzrDHycgDfkyxBHPsnVgRFbO20jRri3YCeq604,320
295
303
  regscale/models/click_models.py,sha256=EI0HFFXQvGy53boZ473ayDJP-qpQsCdufD0xkUGqM3I,15295
296
304
  regscale/models/config.py,sha256=M_ftoZUgYL8x1CliDk8Pw6jMhPlz83_xh_Gi8lAabQ4,5420
297
305
  regscale/models/email_style.css,sha256=d8PlsCiOxmmkp2Qc7T4qI9Ha5mT12Jn9kRBMOk2xx2Q,2202
@@ -299,7 +307,7 @@ regscale/models/hierarchy.py,sha256=XnQ-pjE3LKViwRQpxdCEU0TWBGzMJo1MqWgbEJgumAU,
299
307
  regscale/models/inspect_models.py,sha256=oRJnLeeAUYIbYXsbPKNpMCyazxQnyH5r-2XxVc5Ih9c,2521
300
308
  regscale/models/locking.py,sha256=5GumeAP3SBChurTgWRvh0wgCVwfos32mn0OYDwxhUmg,3151
301
309
  regscale/models/platform.py,sha256=tTcnBZ-rr1n4X41OF9g3zGx-8ORS8BsOKjzSxwm6fZg,4242
302
- regscale/models/app_models/__init__.py,sha256=XmrkxwFJx49ofl5ICZniGmmJe8jO4RkKnHV01fMfrIQ,156
310
+ regscale/models/app_models/__init__.py,sha256=0V4Em8RqK83EZeMIa3tm_sDh9yOS7mzvKF01v-kJug0,219
303
311
  regscale/models/app_models/catalog_compare.py,sha256=gLD8ti933nW70FcGlx6gp0Lbdo8cFnKky7JkRFAKfOU,7557
304
312
  regscale/models/app_models/click.py,sha256=2kZuBOpHFjpFKtI7rT_ht26G9bjHL_EUUoYlLC-O3B4,9961
305
313
  regscale/models/app_models/datetime_encoder.py,sha256=AvKkXWhrd87jTfNnY5Q2gw5IdXkCQDnE_44Lay2ZUAA,518
@@ -312,7 +320,7 @@ regscale/models/integration_models/azure_alerts.py,sha256=2etrpvcxa7jVQrc98bJlVG
312
320
  regscale/models/integration_models/base64.py,sha256=sxV6O5qY1_TstJENX5jBPsSdQwmA83-NNhgJFunXiZE,570
313
321
  regscale/models/integration_models/burp.py,sha256=FBEBkH3U0Q8vq71FFoWnvgLRF5Hkr9GYmQFmNNHFrVk,16932
314
322
  regscale/models/integration_models/burp_models.py,sha256=UytDTAcCaxyu-knFkm_mEUH6UmWK3OTXKSC9Sc6OjVs,3669
315
- regscale/models/integration_models/cisa_kev_data.json,sha256=au0nG1gScjLv7evVJ9pqqtwEtqThCERCD9_9NtxUvAg,1246793
323
+ regscale/models/integration_models/cisa_kev_data.json,sha256=rS7XvjrNcm6PObHircKJqKgO01ZhN5XhqehYerDuphQ,1253951
316
324
  regscale/models/integration_models/defender_data.py,sha256=jsAcjKxiGmumGerj7xSWkFd6r__YpuKDnYX5o7xHDiE,2844
317
325
  regscale/models/integration_models/defenderimport.py,sha256=Ze4kgwns-IYPyO7sBjEzW8PXWlxwU-DAo2fIyRcTC3k,6242
318
326
  regscale/models/integration_models/drf.py,sha256=Aq7AdLa_CH97NrnR-CxaFI22JjVN9uCxVN7Z-BBUaNU,18896
@@ -328,6 +336,7 @@ regscale/models/integration_models/send_reminders.py,sha256=h9zOX5Hb7e4K7qFmG-Fi
328
336
  regscale/models/integration_models/snyk.py,sha256=uxPAKcfbMX6GyNaPmKOex1OHJIcSkXTdnLK2TKBkjO4,13986
329
337
  regscale/models/integration_models/trivy_import.py,sha256=R6aZXUaNKf5Gdo1kNxIKM-HMW95XDWVCG_gMrzDYNuQ,9210
330
338
  regscale/models/integration_models/veracode.py,sha256=kYwsIojZDMxeXdUCio7XyNob4DHM0x-c8jv4zQCWoS0,10147
339
+ regscale/models/integration_models/wizv2.py,sha256=mGcr9cUHo3I3388YnNG6MFSm0WvE33D1fdYqre281KU,5515
331
340
  regscale/models/integration_models/xray.py,sha256=U2XFPzBXrGhPiYNKSuderJ-ARf1-GcGuMJr2fcXZrs8,12755
332
341
  regscale/models/integration_models/amazon_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
333
342
  regscale/models/integration_models/amazon_models/inspector.py,sha256=AcV_Nk4ZJMJqmRMpmpbu8LDqp4F2D6GD_IcKsh9MYcs,12915
@@ -342,7 +351,7 @@ regscale/models/integration_models/flat_file_importer/__init__.py,sha256=IoM8SPj
342
351
  regscale/models/integration_models/sbom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
343
352
  regscale/models/integration_models/sbom/cyclone_dx.py,sha256=0pFR0BWBrF5c8_cC_8mj2MXvNOMHOdHbBYXvTVfFAh8,4058
344
353
  regscale/models/integration_models/synqly_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
345
- regscale/models/integration_models/synqly_models/capabilities.json,sha256=cNRDSSzgsKJM7QDh3VyvE2Sly9dRzbUTyMaGDy1jWNA,378892
354
+ regscale/models/integration_models/synqly_models/capabilities.json,sha256=GfJbg6I-_X1O7nyz1GkRMhvthJb6Zy09nisSdrE7UY4,392385
346
355
  regscale/models/integration_models/synqly_models/connector_types.py,sha256=8nxptkTexpskySnmL0obNAff_iu_fx6tJ7i1-4hJvao,461
347
356
  regscale/models/integration_models/synqly_models/ocsf_mapper.py,sha256=e2kTOhWSNRnzbgMchMx-7c21pCgSv2DqWnxvajKEKJM,16960
348
357
  regscale/models/integration_models/synqly_models/param.py,sha256=Xt5Zm6lC_VkLj7LF2qXo72TJZHysqttsp5ai0NCf1po,2643
@@ -389,7 +398,7 @@ regscale/models/regscale_models/email.py,sha256=kgEzXTUZr7uHksMOCextWbXJXYuRKyXO
389
398
  regscale/models/regscale_models/evidence.py,sha256=R78f3eWjmBgusZbv8i9cd5O8Is43KjvxiaJH_CLERqE,4316
390
399
  regscale/models/regscale_models/evidence_mapping.py,sha256=eovTJsl1cjZMvbhpOv70nILIHSXmURyU4mg_r09h4VQ,1444
391
400
  regscale/models/regscale_models/facility.py,sha256=J3gGv0Tf3zNdyKGhb0iM8WjgjWqJHZLKdcN9n-jDrTA,1059
392
- regscale/models/regscale_models/file.py,sha256=peAu78t-zLeMsP9tmeubGAyBL77XRkXyJLaruWzjLac,14413
401
+ regscale/models/regscale_models/file.py,sha256=zHIZvhgxMWTXX5ku98dRJcDSQ1VrRyUuorA6N9YEBzU,14711
393
402
  regscale/models/regscale_models/filetag.py,sha256=jd99xcQsGheLFfy7PYtZEzT-re_Dp_ZoUF3GWYMsi0Q,1138
394
403
  regscale/models/regscale_models/form_field_value.py,sha256=xKnbXWQl4xVuUQMbeRK23MbPO7SOMARBvvH2O98UOm4,5816
395
404
  regscale/models/regscale_models/functional_roles.py,sha256=Vm_j-UZBKoaiONO75VqqCKnDHE6ynP0X5XZmKXl8UT8,932
@@ -400,7 +409,7 @@ regscale/models/regscale_models/implementation_role.py,sha256=ZjJOhjM3dVlulsGx3l
400
409
  regscale/models/regscale_models/incident.py,sha256=jsS4MfigzjwFphvdIrBk62GfvbceQ8VL-AhfQSQM460,6028
401
410
  regscale/models/regscale_models/inherited_control.py,sha256=RuQJgVyZgfoIrUG_vvwQYHECb3wsFjDH-zPj-bIFBNU,2007
402
411
  regscale/models/regscale_models/interconnection.py,sha256=8Q9CGeHEX9TXQrim_NIAj9KuM4MwaUTpBLs_LKaXAlw,1256
403
- regscale/models/regscale_models/issue.py,sha256=kRHGzbCqVzsZme3Ytp8E3IuGmLbP4CHWvpyIKNk0Lkk,53092
412
+ regscale/models/regscale_models/issue.py,sha256=h88GRUD1YtC0-bVHXm3p9owDt1F0bJD48tzm03HkrOg,59248
404
413
  regscale/models/regscale_models/leveraged_authorization.py,sha256=OUrL8JQV3r7T3ldHlL6Y_ZLv6KuQIC-3eZW5wZ7XFUk,4192
405
414
  regscale/models/regscale_models/line_of_inquiry.py,sha256=Uu0lQEhif0W6yTSkJo27GyQGmExSngJvyqGBTr4Q8Fg,1713
406
415
  regscale/models/regscale_models/link.py,sha256=lAY4Ig3Menm1EqfcAbVJ7jsCsRO5tWtJIf-9-G9FXT8,6593
@@ -425,7 +434,7 @@ regscale/models/regscale_models/questionnaire.py,sha256=QMSXfNpSoaS8tkeo80C7OWLj
425
434
  regscale/models/regscale_models/questionnaire_instance.py,sha256=1LgGTwFACmWx2xOOqUKhAUOms4_3L6NZySzuteg0_sI,8241
426
435
  regscale/models/regscale_models/rbac.py,sha256=ulT9BzOpYNNVlBVfOmreGDTTAgzkAY5Si2rQhhIcUmY,5302
427
436
  regscale/models/regscale_models/reference.py,sha256=P_7jT6H-NZIa7TyH3j98N-ZHlB6FsjpZVRZCCpms-D4,3253
428
- regscale/models/regscale_models/regscale_model.py,sha256=5B5NOMS9b0Oz8CDoiyU5FDNRWIsYMm1KPeC98QNnKxk,69748
437
+ regscale/models/regscale_models/regscale_model.py,sha256=SU9CZXbtxBU6-hVW8jKlKWrJD7ypPG7wmATo7w8hSrw,69838
429
438
  regscale/models/regscale_models/requirement.py,sha256=-8PnMbuWAZHol5X1w-fzm-moD784Et0oevSVbz6xLhU,767
430
439
  regscale/models/regscale_models/risk.py,sha256=lZFDYPpTt0aEYCrYz5FBKk1Y4y2CKXYU1A8eEKT3zzg,8661
431
440
  regscale/models/regscale_models/risk_issue_mapping.py,sha256=j6uR0x6xymJ0BsIwgnadeUQDshHNhU3VnpyItZp4dc4,2393
@@ -434,7 +443,7 @@ regscale/models/regscale_models/sbom.py,sha256=UYS3lBizGqz7A7vNPYBYzpL8PWIaXLl7Z
434
443
  regscale/models/regscale_models/scan_history.py,sha256=o4e9P2rQlqlLj4mbgSPX44jutTJo1nocI1DDXyWyf6w,16741
435
444
  regscale/models/regscale_models/search.py,sha256=rPbFDCnnBRHY5JJv9Ev3_6GjMlkdhUAsaUzC97eE2Ys,1015
436
445
  regscale/models/regscale_models/security_control.py,sha256=GJEMkIh6IDX7Gs_z7ppmm0hqiXjC5qSbSYRYt85wOUg,6365
437
- regscale/models/regscale_models/security_plan.py,sha256=DtxGJHCIuzj_F_iaP9uuHY5sObKo3zk_8BeC2jUJF7U,8600
446
+ regscale/models/regscale_models/security_plan.py,sha256=D0QVU-_YtnvbUdwt90eSlxCS5ohMXbbpAo0D5GzRx7E,8604
438
447
  regscale/models/regscale_models/software_inventory.py,sha256=FRAIfoUlS0kaX1HQRDyV5q4yxwRHilXbS52NSj6exo0,5555
439
448
  regscale/models/regscale_models/stake_holder.py,sha256=JIuDTIky_3acDl-NOMwylTHkppN38JgPDZ1A6wM-BGE,1956
440
449
  regscale/models/regscale_models/stig.py,sha256=y-PQuGg3pwDTfsNZGW6anaNAjIZBQoNe7GOLMiT5zfw,26329
@@ -465,7 +474,7 @@ regscale/utils/decorators.py,sha256=3QLjZ4_QfUSdJYYMw4nGE7EPdo2P7P3AERZxHHVgXDI,
465
474
  regscale/utils/dict_utils.py,sha256=2iCUMUZP8urkmpzB3BpnaSMrEQtrT9u4HINLSXGiXyI,2468
466
475
  regscale/utils/files.py,sha256=LtOca6DK4yZxBE037fRi1lsJeHmBmXLBkDq_er3Uhmw,2410
467
476
  regscale/utils/fxns.py,sha256=dLmxVkeoYXljAs0JbWaehBqZ2BxrdZ9ilH9FGvWRWx4,914
468
- regscale/utils/graphql_client.py,sha256=IqN7IHSH8bE5w9SVRqib_9sLFDPCMp4hWAdkSS-tDZ8,4484
477
+ regscale/utils/graphql_client.py,sha256=ENbvJlhRvk5XIVAFbDwTGOS7g6AfOW-bZRoTfWGZYl4,4519
469
478
  regscale/utils/lists.py,sha256=CuxSVJNSFQ5TXtzXh5LQqL4yOZhuCmfcKbeQgjeBjok,459
470
479
  regscale/utils/numbers.py,sha256=0LkZvewuKXogk6_oWF90OAoGIuzK1fjWZ4gRCC9_TlQ,301
471
480
  regscale/utils/shell.py,sha256=H9Zzwt3zxyzWmfiH3tVrcIoAcEHtF_pXzM5ERd7PAGc,4176
@@ -493,8 +502,6 @@ tests/mocks/response.py,sha256=fUF2jrrxgmGUKXUcWWOSA457yrEyM1EB28G6RqPO9a0,1040
493
502
  tests/mocks/xml.py,sha256=WYeZRZfyYmOi4TTvF7I53l3gKF4x1DE1dqy08szPkfQ,261
494
503
  tests/regscale/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
495
504
  tests/regscale/test_about.py,sha256=32YZC8XJW5QkIYIfwEVGIdIxQNUIbyzn3OzVcX_5X24,635
496
- tests/regscale/test_authorization.py,sha256=fls5ODCYiu0DdkwXFepO_GM-BP6tRaPmMCZWX6VD2e8,1899
497
- tests/regscale/test_init.py,sha256=O_3Dh7s7ObycIZyd0-Y10NCTKdGnrnotcpU6CUB5pno,4180
498
505
  tests/regscale/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
499
506
  tests/regscale/core/test_api.py,sha256=25AsIT-jg8SrlkPeynUwwm4PvTOrHcRO2Ba_omnNLUY,7512
500
507
  tests/regscale/core/test_app.py,sha256=wvxpp5Wyag2T5-LmPZL02yrYiH8tedVSRle8RhrlB38,42380
@@ -503,7 +510,7 @@ tests/regscale/core/test_logz.py,sha256=Yf6tAthETLlYOEp3hee3ovDw-WnZ_6fTw3e1rjx4
503
510
  tests/regscale/core/test_sbom_generator.py,sha256=lgzo1HRbkNIIDZIeKiM2JbbIYQsak0BpU0GlvbrcexM,2935
504
511
  tests/regscale/core/test_validation_utils.py,sha256=5GHQfSVEr3f1HzEatI5CyCgGriyc-OPyKbc1YQ9zRjI,5464
505
512
  tests/regscale/core/test_version.py,sha256=q8F2ERXxdToXbYxfOcP9f6lkUYaxF4jEmsPUmduMo9U,3216
506
- tests/regscale/core/test_version_regscale.py,sha256=Amz4RfM6Xm8OnA9F4phAoJdrJMrsgU25b9Q6QxXOLTs,2013
513
+ tests/regscale/core/test_version_regscale.py,sha256=9DA1hFltt7pSWdFb3wP2bL3t4hAHsojoHvs1bolUjUw,2052
507
514
  tests/regscale/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
508
515
  tests/regscale/integrations/test_api_paginator.py,sha256=42-F8FMkJwkZ1Xlsj7YYVyOb6-rbxwI4F4H6Y4ZI9jA,18973
509
516
  tests/regscale/integrations/test_integration_mapping.py,sha256=cXfWuE1h5Wrs-Nb--d83v0fllMQOs_IxYxquBJ90YNg,22549
@@ -511,6 +518,7 @@ tests/regscale/integrations/test_issue_creation.py,sha256=L4Fjww16S6sst2kqLoE0PK
511
518
  tests/regscale/integrations/test_issue_due_date.py,sha256=Dh2JAxgOdbucIOGtxfefsYxGsNQlgx2Gk-g1Vguv_6A,1448
512
519
  tests/regscale/integrations/test_property_and_milestone_creation.py,sha256=2Rx2maM7-4DMYpOH4pV6vcx3NDA84wXfqMwGvaAMVBo,26555
513
520
  tests/regscale/integrations/test_update_finding_dates.py,sha256=2cyDpwnZUS965f84hNE4rb8BjuAYOLMK-zuLD6nai9k,13517
521
+ tests/regscale/integrations/test_wiz_policy_compliance_affected_controls.py,sha256=nFqOjr4-JRjZ0fJTQEhwsvnl56g4GRdX0yvS1wRpqUY,5845
514
522
  tests/regscale/integrations/transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
515
523
  tests/regscale/integrations/transformer/test_data_transformer.py,sha256=Na-trXL2n97b6H6V9CwVU4nvqkL8HMy7E2yvAuhKtSo,36584
516
524
  tests/regscale/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -525,9 +533,9 @@ tests/regscale/models/test_regscale_model.py,sha256=ZsrEZkC4EtdIsoQuayn1xv2gEGcV
525
533
  tests/regscale/models/test_report.py,sha256=IqUq7C__a1_q_mLaz0PE9Lq6fHggBsB14-AzEYNBxLw,4666
526
534
  tests/regscale/models/test_tenable_integrations.py,sha256=PNJC2Zu6lv1xj7y6e1yOsz5FktSU3PRKb5x3n5YG3w0,4072
527
535
  tests/regscale/models/test_user_model.py,sha256=e9olv28qBApgnvK6hFHOgXjUC-pkaV8aGDirEIWASL4,4427
528
- regscale_cli-6.21.0.0.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
529
- regscale_cli-6.21.0.0.dist-info/METADATA,sha256=dEQpH991O5ex_8-JIrcn7ZnjWJoRSVsLR0YTq9S7BBE,34955
530
- regscale_cli-6.21.0.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
531
- regscale_cli-6.21.0.0.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
532
- regscale_cli-6.21.0.0.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
533
- regscale_cli-6.21.0.0.dist-info/RECORD,,
536
+ regscale_cli-6.21.2.0.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
537
+ regscale_cli-6.21.2.0.dist-info/METADATA,sha256=MqoS0sl4OZ364E34R6tvMovjED3MWz63xJwSoipU1EQ,34955
538
+ regscale_cli-6.21.2.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
539
+ regscale_cli-6.21.2.0.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
540
+ regscale_cli-6.21.2.0.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
541
+ regscale_cli-6.21.2.0.dist-info/RECORD,,
@@ -1,9 +1,8 @@
1
1
  import os
2
+ from unittest import mock
3
+
2
4
  import pytest
3
5
  from click.testing import CliRunner
4
- from unittest import mock
5
- import warnings
6
- import regscale.regscale as regscale
7
6
 
8
7
 
9
8
  class TestRegscaleCLIVersion:
@@ -31,6 +30,8 @@ class TestRegscaleCLIVersion:
31
30
  """
32
31
  Test that the CLI 'version' command prints the local RegScale version and exits successfully.
33
32
  """
33
+ import regscale.regscale as regscale
34
+
34
35
  runner = CliRunner()
35
36
  result = runner.invoke(regscale.cli, ["version"])
36
37
  assert result.exit_code == 0
@@ -41,6 +42,7 @@ class TestRegscaleCLIVersion:
41
42
  Test that the CLI 'version --server' command prints the server version if available.
42
43
  Mocks the API call to return a dummy version.
43
44
  """
45
+ import regscale.regscale as regscale
44
46
 
45
47
  class DummyApi:
46
48
  def __init__(self):
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Test affected controls functionality in Wiz Policy Compliance Integration.
5
+ """
6
+
7
+ import pytest
8
+ from unittest.mock import patch, MagicMock
9
+
10
+ from regscale.integrations.commercial.wizv2.policy_compliance import WizPolicyComplianceIntegration
11
+ from regscale.integrations.compliance_integration import ComplianceItem
12
+ from regscale.models import regscale_models
13
+
14
+
15
+ class DummyItem(ComplianceItem):
16
+ """Dummy compliance item for testing."""
17
+
18
+ def __init__(self, rid: str, rname: str, cid: str, framework: str, result: str):
19
+ self._rid = rid
20
+ self._rname = rname
21
+ self._cid = cid
22
+ self._framework = framework
23
+ self._result = result
24
+
25
+ @property
26
+ def resource_id(self) -> str:
27
+ """Get resource ID."""
28
+ return self._rid
29
+
30
+ @property
31
+ def resource_name(self) -> str:
32
+ """Get resource name."""
33
+ return self._rname
34
+
35
+ @property
36
+ def control_id(self) -> str:
37
+ """Get control ID."""
38
+ return self._cid
39
+
40
+ @property
41
+ def compliance_result(self) -> str:
42
+ """Get compliance result."""
43
+ return self._result
44
+
45
+ @property
46
+ def severity(self):
47
+ """Get severity."""
48
+ return "HIGH"
49
+
50
+ @property
51
+ def description(self) -> str:
52
+ """Get description."""
53
+ return "desc"
54
+
55
+ @property
56
+ def framework(self) -> str:
57
+ """Get framework."""
58
+ return self._framework
59
+
60
+
61
+ @pytest.mark.parametrize("control_id", ["AC-2(1)", "ac-2 (1)", "AC-2-1"])
62
+ @patch("regscale.integrations.commercial.wizv2.policy_compliance.wiz_authenticate")
63
+ @patch("regscale.integrations.commercial.wizv2.policy_compliance.check_license")
64
+ def test_issue_affected_controls_from_external_id(mock_check_license, mock_wiz_auth, monkeypatch, control_id):
65
+ """Test that affected controls are properly set from normalized control IDs."""
66
+ # Mock authentication to prevent 401 errors - using same pattern as main test file
67
+ mock_app = MagicMock()
68
+ mock_app.config = {"wizUrl": "https://api.wiz.io/graphql"}
69
+ mock_check_license.return_value = mock_app
70
+ mock_wiz_auth.return_value = "test-token"
71
+
72
+ # Mock the base class methods that make API calls
73
+ with patch.object(WizPolicyComplianceIntegration, "_load_existing_records_cache"), patch.object(
74
+ WizPolicyComplianceIntegration, "get_asset_by_identifier", return_value=None
75
+ ), patch.object(WizPolicyComplianceIntegration, "_ensure_asset_for_finding", return_value=None):
76
+
77
+ integ = WizPolicyComplianceIntegration(
78
+ plan_id=999,
79
+ wiz_project_id="proj",
80
+ client_id="cid",
81
+ client_secret="secret",
82
+ framework_id="wf-id-4",
83
+ )
84
+ integ.parent_module = regscale_models.SecurityPlan.get_module_string()
85
+
86
+ # Create a minimal raw compliance node matching the selected framework
87
+ raw_node = {
88
+ "id": "node-1",
89
+ "result": "FAIL",
90
+ "policy": {
91
+ "name": "Policy X",
92
+ "securitySubCategories": [{"category": {"framework": {"id": "wf-id-4"}}}],
93
+ },
94
+ "resource": {"id": "asset-1", "name": "name", "type": "VM"},
95
+ }
96
+
97
+ comp_item = integ.create_compliance_item(raw_node)
98
+ # Monkeypatch control id onto the item to simulate parsed control
99
+ comp_item.policy = {
100
+ "name": "Policy X",
101
+ "securitySubCategories": [
102
+ {
103
+ "externalId": control_id,
104
+ "category": {"framework": {"id": "wf-id-4"}},
105
+ }
106
+ ],
107
+ }
108
+
109
+ finding = integ.create_finding_from_compliance_item(comp_item)
110
+ assert finding is not None
111
+
112
+ # Ensure affected_controls on finding is set to normalized control ID
113
+ expected_normalized = integ._normalize_control_id_string(control_id)
114
+ assert (
115
+ finding.affected_controls == expected_normalized
116
+ ), f"Expected {expected_normalized}, got {finding.affected_controls}"
117
+
118
+ # Mock the base class issue creation method more thoroughly
119
+ with patch.object(
120
+ WizPolicyComplianceIntegration, "_find_existing_issue_cached", return_value=None
121
+ ), patch.object(
122
+ WizPolicyComplianceIntegration, "_create_or_update_issue", return_value=None
123
+ ) as mock_base_create:
124
+
125
+ # Create a proper mock issue that behaves like the real Issue model
126
+ mock_issue = MagicMock(spec=regscale_models.Issue)
127
+ mock_issue.id = 123
128
+ mock_issue.affectedControls = None
129
+ mock_issue.assetIdentifier = finding.asset_identifier
130
+ mock_issue.controlId = None
131
+ mock_issue.assessmentId = None
132
+ mock_issue.isPoam = False
133
+ mock_issue.parentId = None
134
+ mock_issue.parentModule = None
135
+
136
+ # Make the base method return our mock issue
137
+ mock_base_create.return_value = mock_issue
138
+
139
+ # This should call the parent method and then apply post-processing
140
+ with patch.object(
141
+ WizPolicyComplianceIntegration.__bases__[0],
142
+ "create_or_update_issue_from_finding",
143
+ return_value=mock_issue,
144
+ ):
145
+ issue = integ.create_or_update_issue_from_finding(title=finding.title, finding=finding)
146
+
147
+ # Verify we got our mock issue back
148
+ assert issue is mock_issue
149
+
150
+ # Verify the issue's affectedControls was set to the normalized control ID
151
+ # (This gets set in the post-processing step of create_or_update_issue_from_finding)
152
+ assert (
153
+ issue.affectedControls == expected_normalized
154
+ ), f"Issue affectedControls should be {expected_normalized}, got {issue.affectedControls}"
@@ -1,65 +0,0 @@
1
- """Test the platform module."""
2
-
3
- import os
4
- from unittest.mock import patch
5
- from unittest import skip
6
-
7
- import pytest
8
-
9
- from regscale.core.app.application import Application
10
- from regscale.core.app.api import Api
11
- from regscale.core.login import get_regscale_token
12
- from regscale.models import platform
13
-
14
- PATH = "regscale.models.platform"
15
-
16
-
17
- @pytest.fixture
18
- def env_variables():
19
- os.environ["REGSCALE_USER"] = "testuser"
20
- os.environ["REGSCALE_PASSWORD"] = "testpassword"
21
- os.environ["REGSCALE_DOMAIN"] = "https://testdomain.com"
22
-
23
-
24
- @patch(f"{PATH}.get_regscale_token", return_value=("billy", "zane"))
25
- def test_RegScaleAuth_model_behaves(mock_get_regscale_token):
26
- api = Api()
27
- """The RegScaleAuth BaseModel class does lots of things, let's test them."""
28
- un = "funkenstein"
29
- pw = "groovin'tothewaveoftheflag"
30
- domain = "disinfo.org"
31
- model = platform.RegScaleAuth.authenticate(
32
- api=api,
33
- username=un,
34
- password=pw,
35
- domain=domain,
36
- )
37
- mock_get_regscale_token.assert_called_once()
38
- assert isinstance(model, platform.RegScaleAuth)
39
- assert model.token == "Bearer zane"
40
- assert model.user_id == "billy"
41
- assert model.username == un
42
- assert model.password.get_secret_value() == pw
43
- assert model.domain == domain
44
-
45
-
46
- @skip("Skipping this test because MFA is required to log into DEV")
47
- def test_RegScaleAuth_model():
48
- """The RegScaleAuth BaseModel class is based"""
49
- app = Application()
50
- api = Api()
51
- domain = app.config["domain"]
52
- model = platform.RegScaleAuth.authenticate(
53
- api=api,
54
- domain=domain,
55
- )
56
- assert model.token
57
-
58
-
59
- @skip("Skipping this test because MFA is required to log into DEV")
60
- def test_get_regscale_token(env_variables):
61
- api = Api()
62
- user_id, auth_token = get_regscale_token(api)
63
- print(auth_token)
64
- assert isinstance(user_id, str)
65
- assert isinstance(auth_token, str)
@@ -1,96 +0,0 @@
1
- import sys
2
- import types
3
- import unittest
4
- from unittest.mock import patch, mock_open, MagicMock
5
-
6
- airflow_exceptions = types.ModuleType("airflow.exceptions")
7
- airflow_exceptions.AirflowException = Exception
8
- sys.modules["airflow.exceptions"] = airflow_exceptions
9
-
10
- airflow_settings = types.ModuleType("airflow.settings")
11
- airflow_settings.initialize = lambda: None
12
- airflow_settings.LAZY_LOAD_PROVIDERS = True
13
- sys.modules["airflow.settings"] = airflow_settings
14
-
15
- sys.modules["airflow.configuration"] = types.ModuleType("airflow.configuration")
16
-
17
- airflow_operators = types.ModuleType("airflow.operators")
18
- airflow_operators_python = types.ModuleType("airflow.operators.python")
19
-
20
-
21
- class DummyPythonOperator:
22
- def __init__(self, *args, **kwargs):
23
- # This dummy operator is intentionally left empty because it is only used
24
- # to mock Airflow's PythonOperator for testing purposes. No initialization logic is needed.
25
- pass
26
-
27
-
28
- airflow_operators_python.PythonOperator = DummyPythonOperator
29
- sys.modules["airflow.operators"] = airflow_operators
30
- sys.modules["airflow.operators.python"] = airflow_operators_python
31
-
32
- from regscale.airflow.tasks.init import get_shared_keys, set_shared_config_values # noqa: E402
33
-
34
-
35
- class TestInitPy(unittest.TestCase):
36
- @patch("regscale.airflow.tasks.init.execute_click_command")
37
- @patch("yaml.safe_load", return_value={"foo": "bar"})
38
- @patch("pathlib.Path.open", new_callable=mock_open, read_data="foo: bar\n")
39
- def test_get_shared_keys(self, mock_file, mock_yaml, mock_exec):
40
- """
41
- If the YAML and dag_run.conf share a key, we should get that key back and execute the click command once.
42
- """
43
- dag_context = {"dag_run": MagicMock(conf={"foo": "baz"})}
44
- shared_keys = get_shared_keys("dummy.yaml", **dag_context)
45
- self.assertEqual(shared_keys, ["foo"])
46
- mock_exec.assert_called_once()
47
-
48
- @patch("regscale.airflow.tasks.init.execute_click_command")
49
- def test_set_shared_config_values(self, mock_exec):
50
- """
51
- When shared keys are found in xcom, set_shared_config_values should call execute_click_command for each.
52
- """
53
- dag_context = {
54
- "dag_run": MagicMock(conf={"foo": "bar", "op_kwargs": {"shared_keys_task": "task1"}}),
55
- "ti": MagicMock(xcom_pull=MagicMock(return_value=["foo"])),
56
- }
57
- set_shared_config_values(shared_keys_task=None, **dag_context)
58
- mock_exec.assert_called_once()
59
-
60
- def test_set_shared_config_values_raises(self):
61
- """
62
- If op_kwargs is missing from dag_run.conf, set_shared_config_values should raise an AirflowException.
63
- """
64
- from airflow.exceptions import AirflowException
65
-
66
- dag_context = {"dag_run": MagicMock(conf={})}
67
- with self.assertRaises(AirflowException):
68
- set_shared_config_values(shared_keys_task=None, **dag_context)
69
-
70
- @patch("regscale.airflow.tasks.init.execute_click_command")
71
- def test_set_shared_config_values_warns(self, mock_exec):
72
- """
73
- If xcom_pull returns None, set_shared_config_values should log a warning and not call execute_click_command.
74
- """
75
- dag_context = {
76
- "dag_run": MagicMock(conf={"foo": "bar", "op_kwargs": {"shared_keys_task": "task1"}}),
77
- "ti": MagicMock(xcom_pull=MagicMock(return_value=None)),
78
- }
79
- with self.assertLogs(level="WARNING") as log:
80
- set_shared_config_values(shared_keys_task=None, **dag_context)
81
- self.assertTrue(any("No shared keys found" in msg for msg in log.output))
82
- mock_exec.assert_not_called()
83
-
84
- @patch("yaml.safe_load", return_value={"foo": "bar"})
85
- @patch("pathlib.Path.open", new_callable=mock_open, read_data="foo: bar\n")
86
- def test_get_shared_keys_logs_error(self, mock_file, mock_yaml):
87
- """
88
- If dag_run is missing from the context, get_shared_keys should log an error and raise KeyError.
89
- """
90
- with self.assertLogs(level="ERROR") as log, self.assertRaises(KeyError):
91
- get_shared_keys("dummy.yaml")
92
- self.assertTrue(any("context contains" in msg for msg in log.output))
93
-
94
-
95
- if __name__ == "__main__":
96
- unittest.main()