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.
- regscale/_version.py +1 -1
- regscale/core/app/application.py +7 -0
- regscale/integrations/commercial/__init__.py +9 -10
- regscale/integrations/commercial/amazon/common.py +79 -2
- regscale/integrations/commercial/aws/cli.py +183 -9
- regscale/integrations/commercial/aws/scanner.py +544 -9
- regscale/integrations/commercial/cpe.py +18 -1
- regscale/integrations/commercial/import_all/import_all_cmd.py +2 -2
- regscale/integrations/commercial/microsoft_defender/__init__.py +0 -0
- regscale/integrations/commercial/{defender.py → microsoft_defender/defender.py} +38 -612
- regscale/integrations/commercial/microsoft_defender/defender_api.py +286 -0
- regscale/integrations/commercial/microsoft_defender/defender_constants.py +80 -0
- regscale/integrations/commercial/microsoft_defender/defender_scanner.py +168 -0
- regscale/integrations/commercial/qualys/__init__.py +24 -86
- regscale/integrations/commercial/qualys/containers.py +2 -0
- regscale/integrations/commercial/qualys/scanner.py +7 -2
- regscale/integrations/commercial/sonarcloud.py +110 -71
- regscale/integrations/commercial/tenablev2/jsonl_scanner.py +2 -1
- regscale/integrations/commercial/wizv2/async_client.py +10 -3
- regscale/integrations/commercial/wizv2/click.py +105 -26
- regscale/integrations/commercial/wizv2/constants.py +249 -1
- regscale/integrations/commercial/wizv2/data_fetcher.py +401 -0
- regscale/integrations/commercial/wizv2/finding_processor.py +295 -0
- regscale/integrations/commercial/wizv2/issue.py +2 -2
- regscale/integrations/commercial/wizv2/parsers.py +3 -2
- regscale/integrations/commercial/wizv2/policy_compliance.py +3057 -0
- regscale/integrations/commercial/wizv2/policy_compliance_helpers.py +564 -0
- regscale/integrations/commercial/wizv2/scanner.py +19 -25
- regscale/integrations/commercial/wizv2/utils.py +258 -85
- regscale/integrations/commercial/wizv2/variables.py +4 -3
- regscale/integrations/compliance_integration.py +1607 -0
- regscale/integrations/public/fedramp/fedramp_five.py +93 -8
- regscale/integrations/public/fedramp/markdown_parser.py +7 -1
- regscale/integrations/scanner_integration.py +57 -6
- regscale/models/__init__.py +1 -1
- regscale/models/app_models/__init__.py +1 -0
- regscale/models/integration_models/cisa_kev_data.json +103 -4
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/{integrations/commercial/wizv2/models.py → models/integration_models/wizv2.py} +4 -12
- regscale/models/regscale_models/file.py +4 -0
- regscale/models/regscale_models/issue.py +151 -8
- regscale/models/regscale_models/regscale_model.py +4 -2
- regscale/models/regscale_models/security_plan.py +1 -1
- regscale/utils/graphql_client.py +3 -1
- {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/METADATA +9 -9
- {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/RECORD +52 -44
- tests/regscale/core/test_version_regscale.py +5 -3
- tests/regscale/integrations/test_wiz_policy_compliance_affected_controls.py +154 -0
- tests/regscale/test_authorization.py +0 -65
- tests/regscale/test_init.py +0 -96
- {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/LICENSE +0 -0
- {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/WHEEL +0 -0
- {regscale_cli-6.21.0.0.dist-info → regscale_cli-6.21.2.0.dist-info}/entry_points.txt +0 -0
- {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=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
145
|
-
regscale/integrations/commercial/aws/scanner.py,sha256=
|
|
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=
|
|
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=
|
|
187
|
-
regscale/integrations/commercial/qualys/containers.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
232
|
-
regscale/integrations/commercial/wizv2/click.py,sha256=
|
|
233
|
-
regscale/integrations/commercial/wizv2/constants.py,sha256=
|
|
234
|
-
regscale/integrations/commercial/wizv2/
|
|
235
|
-
regscale/integrations/commercial/wizv2/
|
|
236
|
-
regscale/integrations/commercial/wizv2/
|
|
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=
|
|
239
|
-
regscale/integrations/commercial/wizv2/utils.py,sha256=
|
|
240
|
-
regscale/integrations/commercial/wizv2/variables.py,sha256=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
529
|
-
regscale_cli-6.21.
|
|
530
|
-
regscale_cli-6.21.
|
|
531
|
-
regscale_cli-6.21.
|
|
532
|
-
regscale_cli-6.21.
|
|
533
|
-
regscale_cli-6.21.
|
|
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)
|
tests/regscale/test_init.py
DELETED
|
@@ -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()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|