regscale-cli 6.16.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of regscale-cli might be problematic. Click here for more details.

Files changed (481) hide show
  1. regscale/__init__.py +1 -0
  2. regscale/airflow/__init__.py +9 -0
  3. regscale/airflow/azure/__init__.py +9 -0
  4. regscale/airflow/azure/cli.py +89 -0
  5. regscale/airflow/azure/upload_dags.py +116 -0
  6. regscale/airflow/click_dags.py +127 -0
  7. regscale/airflow/click_mixins.py +82 -0
  8. regscale/airflow/config.py +25 -0
  9. regscale/airflow/factories/__init__.py +0 -0
  10. regscale/airflow/factories/connections.py +58 -0
  11. regscale/airflow/factories/workflows.py +78 -0
  12. regscale/airflow/hierarchy.py +88 -0
  13. regscale/airflow/operators/__init__.py +0 -0
  14. regscale/airflow/operators/click.py +36 -0
  15. regscale/airflow/sensors/__init__.py +0 -0
  16. regscale/airflow/sensors/sql.py +107 -0
  17. regscale/airflow/sessions/__init__.py +0 -0
  18. regscale/airflow/sessions/sql/__init__.py +3 -0
  19. regscale/airflow/sessions/sql/queries.py +64 -0
  20. regscale/airflow/sessions/sql/sql_server_queries.py +248 -0
  21. regscale/airflow/tasks/__init__.py +0 -0
  22. regscale/airflow/tasks/branches.py +22 -0
  23. regscale/airflow/tasks/cli.py +116 -0
  24. regscale/airflow/tasks/click.py +73 -0
  25. regscale/airflow/tasks/debugging.py +9 -0
  26. regscale/airflow/tasks/groups.py +116 -0
  27. regscale/airflow/tasks/init.py +60 -0
  28. regscale/airflow/tasks/states.py +47 -0
  29. regscale/airflow/tasks/workflows.py +36 -0
  30. regscale/ansible/__init__.py +9 -0
  31. regscale/core/__init__.py +0 -0
  32. regscale/core/app/__init__.py +3 -0
  33. regscale/core/app/api.py +571 -0
  34. regscale/core/app/application.py +665 -0
  35. regscale/core/app/internal/__init__.py +136 -0
  36. regscale/core/app/internal/admin_actions.py +230 -0
  37. regscale/core/app/internal/assessments_editor.py +873 -0
  38. regscale/core/app/internal/catalog.py +316 -0
  39. regscale/core/app/internal/comparison.py +459 -0
  40. regscale/core/app/internal/control_editor.py +571 -0
  41. regscale/core/app/internal/encrypt.py +79 -0
  42. regscale/core/app/internal/evidence.py +1240 -0
  43. regscale/core/app/internal/file_uploads.py +151 -0
  44. regscale/core/app/internal/healthcheck.py +66 -0
  45. regscale/core/app/internal/login.py +305 -0
  46. regscale/core/app/internal/migrations.py +240 -0
  47. regscale/core/app/internal/model_editor.py +1701 -0
  48. regscale/core/app/internal/poam_editor.py +632 -0
  49. regscale/core/app/internal/workflow.py +105 -0
  50. regscale/core/app/logz.py +74 -0
  51. regscale/core/app/utils/XMLIR.py +258 -0
  52. regscale/core/app/utils/__init__.py +0 -0
  53. regscale/core/app/utils/api_handler.py +358 -0
  54. regscale/core/app/utils/app_utils.py +1110 -0
  55. regscale/core/app/utils/catalog_utils/__init__.py +0 -0
  56. regscale/core/app/utils/catalog_utils/common.py +91 -0
  57. regscale/core/app/utils/catalog_utils/compare_catalog.py +193 -0
  58. regscale/core/app/utils/catalog_utils/diagnostic_catalog.py +97 -0
  59. regscale/core/app/utils/catalog_utils/download_catalog.py +103 -0
  60. regscale/core/app/utils/catalog_utils/update_catalog.py +718 -0
  61. regscale/core/app/utils/catalog_utils/update_catalog_v2.py +1378 -0
  62. regscale/core/app/utils/catalog_utils/update_catalog_v3.py +1272 -0
  63. regscale/core/app/utils/catalog_utils/update_plans.py +334 -0
  64. regscale/core/app/utils/file_utils.py +238 -0
  65. regscale/core/app/utils/parser_utils.py +81 -0
  66. regscale/core/app/utils/pickle_file_handler.py +57 -0
  67. regscale/core/app/utils/regscale_utils.py +319 -0
  68. regscale/core/app/utils/report_utils.py +119 -0
  69. regscale/core/app/utils/variables.py +226 -0
  70. regscale/core/decorators.py +31 -0
  71. regscale/core/lazy_group.py +65 -0
  72. regscale/core/login.py +63 -0
  73. regscale/core/server/__init__.py +0 -0
  74. regscale/core/server/flask_api.py +473 -0
  75. regscale/core/server/helpers.py +373 -0
  76. regscale/core/server/rest.py +64 -0
  77. regscale/core/server/static/css/bootstrap.css +6030 -0
  78. regscale/core/server/static/css/bootstrap.min.css +6 -0
  79. regscale/core/server/static/css/main.css +176 -0
  80. regscale/core/server/static/images/regscale-cli.svg +49 -0
  81. regscale/core/server/static/images/regscale.svg +38 -0
  82. regscale/core/server/templates/base.html +74 -0
  83. regscale/core/server/templates/index.html +43 -0
  84. regscale/core/server/templates/login.html +28 -0
  85. regscale/core/server/templates/make_base64.html +22 -0
  86. regscale/core/server/templates/upload_STIG.html +109 -0
  87. regscale/core/server/templates/upload_STIG_result.html +26 -0
  88. regscale/core/server/templates/upload_ssp.html +144 -0
  89. regscale/core/server/templates/upload_ssp_result.html +128 -0
  90. regscale/core/static/__init__.py +0 -0
  91. regscale/core/static/regex.py +14 -0
  92. regscale/core/utils/__init__.py +117 -0
  93. regscale/core/utils/click_utils.py +13 -0
  94. regscale/core/utils/date.py +238 -0
  95. regscale/core/utils/graphql.py +254 -0
  96. regscale/core/utils/urls.py +23 -0
  97. regscale/dev/__init__.py +6 -0
  98. regscale/dev/analysis.py +454 -0
  99. regscale/dev/cli.py +235 -0
  100. regscale/dev/code_gen.py +492 -0
  101. regscale/dev/dirs.py +69 -0
  102. regscale/dev/docs.py +384 -0
  103. regscale/dev/monitoring.py +26 -0
  104. regscale/dev/profiling.py +216 -0
  105. regscale/exceptions/__init__.py +4 -0
  106. regscale/exceptions/license_exception.py +7 -0
  107. regscale/exceptions/validation_exception.py +9 -0
  108. regscale/integrations/__init__.py +1 -0
  109. regscale/integrations/commercial/__init__.py +486 -0
  110. regscale/integrations/commercial/ad.py +433 -0
  111. regscale/integrations/commercial/amazon/__init__.py +0 -0
  112. regscale/integrations/commercial/amazon/common.py +106 -0
  113. regscale/integrations/commercial/aqua/__init__.py +0 -0
  114. regscale/integrations/commercial/aqua/aqua.py +91 -0
  115. regscale/integrations/commercial/aws/__init__.py +6 -0
  116. regscale/integrations/commercial/aws/cli.py +322 -0
  117. regscale/integrations/commercial/aws/inventory/__init__.py +110 -0
  118. regscale/integrations/commercial/aws/inventory/base.py +64 -0
  119. regscale/integrations/commercial/aws/inventory/resources/__init__.py +19 -0
  120. regscale/integrations/commercial/aws/inventory/resources/compute.py +234 -0
  121. regscale/integrations/commercial/aws/inventory/resources/containers.py +113 -0
  122. regscale/integrations/commercial/aws/inventory/resources/database.py +101 -0
  123. regscale/integrations/commercial/aws/inventory/resources/integration.py +237 -0
  124. regscale/integrations/commercial/aws/inventory/resources/networking.py +253 -0
  125. regscale/integrations/commercial/aws/inventory/resources/security.py +240 -0
  126. regscale/integrations/commercial/aws/inventory/resources/storage.py +91 -0
  127. regscale/integrations/commercial/aws/scanner.py +823 -0
  128. regscale/integrations/commercial/azure/__init__.py +0 -0
  129. regscale/integrations/commercial/azure/common.py +32 -0
  130. regscale/integrations/commercial/azure/intune.py +488 -0
  131. regscale/integrations/commercial/azure/scanner.py +49 -0
  132. regscale/integrations/commercial/burp.py +78 -0
  133. regscale/integrations/commercial/cpe.py +144 -0
  134. regscale/integrations/commercial/crowdstrike.py +1117 -0
  135. regscale/integrations/commercial/defender.py +1511 -0
  136. regscale/integrations/commercial/dependabot.py +210 -0
  137. regscale/integrations/commercial/durosuite/__init__.py +0 -0
  138. regscale/integrations/commercial/durosuite/api.py +1546 -0
  139. regscale/integrations/commercial/durosuite/process_devices.py +101 -0
  140. regscale/integrations/commercial/durosuite/scanner.py +637 -0
  141. regscale/integrations/commercial/durosuite/variables.py +21 -0
  142. regscale/integrations/commercial/ecr.py +90 -0
  143. regscale/integrations/commercial/gcp/__init__.py +237 -0
  144. regscale/integrations/commercial/gcp/auth.py +96 -0
  145. regscale/integrations/commercial/gcp/control_tests.py +238 -0
  146. regscale/integrations/commercial/gcp/variables.py +18 -0
  147. regscale/integrations/commercial/gitlab.py +332 -0
  148. regscale/integrations/commercial/grype.py +165 -0
  149. regscale/integrations/commercial/ibm.py +90 -0
  150. regscale/integrations/commercial/import_all/__init__.py +0 -0
  151. regscale/integrations/commercial/import_all/import_all_cmd.py +467 -0
  152. regscale/integrations/commercial/import_all/scan_file_fingerprints.json +27 -0
  153. regscale/integrations/commercial/jira.py +1046 -0
  154. regscale/integrations/commercial/mappings/__init__.py +0 -0
  155. regscale/integrations/commercial/mappings/csf_controls.json +713 -0
  156. regscale/integrations/commercial/mappings/nist_800_53_r5_controls.json +1516 -0
  157. regscale/integrations/commercial/nessus/__init__.py +0 -0
  158. regscale/integrations/commercial/nessus/nessus_utils.py +429 -0
  159. regscale/integrations/commercial/nessus/scanner.py +416 -0
  160. regscale/integrations/commercial/nexpose.py +90 -0
  161. regscale/integrations/commercial/okta.py +798 -0
  162. regscale/integrations/commercial/opentext/__init__.py +0 -0
  163. regscale/integrations/commercial/opentext/click.py +99 -0
  164. regscale/integrations/commercial/opentext/scanner.py +143 -0
  165. regscale/integrations/commercial/prisma.py +91 -0
  166. regscale/integrations/commercial/qualys.py +1462 -0
  167. regscale/integrations/commercial/salesforce.py +980 -0
  168. regscale/integrations/commercial/sap/__init__.py +0 -0
  169. regscale/integrations/commercial/sap/click.py +31 -0
  170. regscale/integrations/commercial/sap/sysdig/__init__.py +0 -0
  171. regscale/integrations/commercial/sap/sysdig/click.py +57 -0
  172. regscale/integrations/commercial/sap/sysdig/sysdig_scanner.py +190 -0
  173. regscale/integrations/commercial/sap/tenable/__init__.py +0 -0
  174. regscale/integrations/commercial/sap/tenable/click.py +49 -0
  175. regscale/integrations/commercial/sap/tenable/scanner.py +196 -0
  176. regscale/integrations/commercial/servicenow.py +1756 -0
  177. regscale/integrations/commercial/sicura/__init__.py +0 -0
  178. regscale/integrations/commercial/sicura/api.py +855 -0
  179. regscale/integrations/commercial/sicura/commands.py +73 -0
  180. regscale/integrations/commercial/sicura/scanner.py +481 -0
  181. regscale/integrations/commercial/sicura/variables.py +16 -0
  182. regscale/integrations/commercial/snyk.py +90 -0
  183. regscale/integrations/commercial/sonarcloud.py +260 -0
  184. regscale/integrations/commercial/sqlserver.py +369 -0
  185. regscale/integrations/commercial/stig_mapper_integration/__init__.py +0 -0
  186. regscale/integrations/commercial/stig_mapper_integration/click_commands.py +38 -0
  187. regscale/integrations/commercial/stig_mapper_integration/mapping_engine.py +353 -0
  188. regscale/integrations/commercial/stigv2/__init__.py +0 -0
  189. regscale/integrations/commercial/stigv2/ckl_parser.py +349 -0
  190. regscale/integrations/commercial/stigv2/click_commands.py +95 -0
  191. regscale/integrations/commercial/stigv2/stig_integration.py +202 -0
  192. regscale/integrations/commercial/synqly/__init__.py +0 -0
  193. regscale/integrations/commercial/synqly/assets.py +46 -0
  194. regscale/integrations/commercial/synqly/ticketing.py +132 -0
  195. regscale/integrations/commercial/synqly/vulnerabilities.py +223 -0
  196. regscale/integrations/commercial/synqly_jira.py +840 -0
  197. regscale/integrations/commercial/tenablev2/__init__.py +0 -0
  198. regscale/integrations/commercial/tenablev2/authenticate.py +31 -0
  199. regscale/integrations/commercial/tenablev2/click.py +1584 -0
  200. regscale/integrations/commercial/tenablev2/scanner.py +504 -0
  201. regscale/integrations/commercial/tenablev2/stig_parsers.py +140 -0
  202. regscale/integrations/commercial/tenablev2/utils.py +78 -0
  203. regscale/integrations/commercial/tenablev2/variables.py +17 -0
  204. regscale/integrations/commercial/trivy.py +162 -0
  205. regscale/integrations/commercial/veracode.py +96 -0
  206. regscale/integrations/commercial/wizv2/WizDataMixin.py +97 -0
  207. regscale/integrations/commercial/wizv2/__init__.py +0 -0
  208. regscale/integrations/commercial/wizv2/click.py +429 -0
  209. regscale/integrations/commercial/wizv2/constants.py +1001 -0
  210. regscale/integrations/commercial/wizv2/issue.py +361 -0
  211. regscale/integrations/commercial/wizv2/models.py +112 -0
  212. regscale/integrations/commercial/wizv2/parsers.py +339 -0
  213. regscale/integrations/commercial/wizv2/sbom.py +115 -0
  214. regscale/integrations/commercial/wizv2/scanner.py +416 -0
  215. regscale/integrations/commercial/wizv2/utils.py +796 -0
  216. regscale/integrations/commercial/wizv2/variables.py +39 -0
  217. regscale/integrations/commercial/wizv2/wiz_auth.py +159 -0
  218. regscale/integrations/commercial/xray.py +91 -0
  219. regscale/integrations/integration/__init__.py +2 -0
  220. regscale/integrations/integration/integration.py +26 -0
  221. regscale/integrations/integration/inventory.py +17 -0
  222. regscale/integrations/integration/issue.py +100 -0
  223. regscale/integrations/integration_override.py +149 -0
  224. regscale/integrations/public/__init__.py +103 -0
  225. regscale/integrations/public/cisa.py +641 -0
  226. regscale/integrations/public/criticality_updater.py +70 -0
  227. regscale/integrations/public/emass.py +411 -0
  228. regscale/integrations/public/emass_slcm_import.py +697 -0
  229. regscale/integrations/public/fedramp/__init__.py +0 -0
  230. regscale/integrations/public/fedramp/appendix_parser.py +548 -0
  231. regscale/integrations/public/fedramp/click.py +479 -0
  232. regscale/integrations/public/fedramp/components.py +714 -0
  233. regscale/integrations/public/fedramp/docx_parser.py +259 -0
  234. regscale/integrations/public/fedramp/fedramp_cis_crm.py +1124 -0
  235. regscale/integrations/public/fedramp/fedramp_common.py +3181 -0
  236. regscale/integrations/public/fedramp/fedramp_docx.py +388 -0
  237. regscale/integrations/public/fedramp/fedramp_five.py +2343 -0
  238. regscale/integrations/public/fedramp/fedramp_traversal.py +138 -0
  239. regscale/integrations/public/fedramp/import_fedramp_r4_ssp.py +279 -0
  240. regscale/integrations/public/fedramp/import_workbook.py +495 -0
  241. regscale/integrations/public/fedramp/inventory_items.py +244 -0
  242. regscale/integrations/public/fedramp/mappings/__init__.py +0 -0
  243. regscale/integrations/public/fedramp/mappings/fedramp_r4_parts.json +7388 -0
  244. regscale/integrations/public/fedramp/mappings/fedramp_r5_params.json +8636 -0
  245. regscale/integrations/public/fedramp/mappings/fedramp_r5_parts.json +9605 -0
  246. regscale/integrations/public/fedramp/mappings/system_roles.py +34 -0
  247. regscale/integrations/public/fedramp/mappings/user.py +175 -0
  248. regscale/integrations/public/fedramp/mappings/values.py +141 -0
  249. regscale/integrations/public/fedramp/markdown_parser.py +150 -0
  250. regscale/integrations/public/fedramp/metadata.py +689 -0
  251. regscale/integrations/public/fedramp/models/__init__.py +59 -0
  252. regscale/integrations/public/fedramp/models/leveraged_auth_new.py +168 -0
  253. regscale/integrations/public/fedramp/models/poam_importer.py +522 -0
  254. regscale/integrations/public/fedramp/parts_mapper.py +107 -0
  255. regscale/integrations/public/fedramp/poam/__init__.py +0 -0
  256. regscale/integrations/public/fedramp/poam/scanner.py +851 -0
  257. regscale/integrations/public/fedramp/properties.py +201 -0
  258. regscale/integrations/public/fedramp/reporting.py +84 -0
  259. regscale/integrations/public/fedramp/resources.py +496 -0
  260. regscale/integrations/public/fedramp/rosetta.py +110 -0
  261. regscale/integrations/public/fedramp/ssp_logger.py +87 -0
  262. regscale/integrations/public/fedramp/system_characteristics.py +922 -0
  263. regscale/integrations/public/fedramp/system_control_implementations.py +582 -0
  264. regscale/integrations/public/fedramp/system_implementation.py +190 -0
  265. regscale/integrations/public/fedramp/xml_utils.py +87 -0
  266. regscale/integrations/public/nist_catalog.py +275 -0
  267. regscale/integrations/public/oscal.py +1946 -0
  268. regscale/integrations/public/otx.py +169 -0
  269. regscale/integrations/scanner_integration.py +2692 -0
  270. regscale/integrations/variables.py +25 -0
  271. regscale/models/__init__.py +7 -0
  272. regscale/models/app_models/__init__.py +5 -0
  273. regscale/models/app_models/catalog_compare.py +213 -0
  274. regscale/models/app_models/click.py +252 -0
  275. regscale/models/app_models/datetime_encoder.py +21 -0
  276. regscale/models/app_models/import_validater.py +321 -0
  277. regscale/models/app_models/mapping.py +260 -0
  278. regscale/models/app_models/pipeline.py +37 -0
  279. regscale/models/click_models.py +413 -0
  280. regscale/models/config.py +154 -0
  281. regscale/models/email_style.css +67 -0
  282. regscale/models/hierarchy.py +8 -0
  283. regscale/models/inspect_models.py +79 -0
  284. regscale/models/integration_models/__init__.py +0 -0
  285. regscale/models/integration_models/amazon_models/__init__.py +0 -0
  286. regscale/models/integration_models/amazon_models/inspector.py +262 -0
  287. regscale/models/integration_models/amazon_models/inspector_scan.py +206 -0
  288. regscale/models/integration_models/aqua.py +247 -0
  289. regscale/models/integration_models/azure_alerts.py +255 -0
  290. regscale/models/integration_models/base64.py +23 -0
  291. regscale/models/integration_models/burp.py +433 -0
  292. regscale/models/integration_models/burp_models.py +128 -0
  293. regscale/models/integration_models/cisa_kev_data.json +19333 -0
  294. regscale/models/integration_models/defender_data.py +93 -0
  295. regscale/models/integration_models/defenderimport.py +143 -0
  296. regscale/models/integration_models/drf.py +443 -0
  297. regscale/models/integration_models/ecr_models/__init__.py +0 -0
  298. regscale/models/integration_models/ecr_models/data.py +69 -0
  299. regscale/models/integration_models/ecr_models/ecr.py +239 -0
  300. regscale/models/integration_models/flat_file_importer.py +1079 -0
  301. regscale/models/integration_models/grype_import.py +247 -0
  302. regscale/models/integration_models/ibm.py +126 -0
  303. regscale/models/integration_models/implementation_results.py +85 -0
  304. regscale/models/integration_models/nexpose.py +140 -0
  305. regscale/models/integration_models/prisma.py +202 -0
  306. regscale/models/integration_models/qualys.py +720 -0
  307. regscale/models/integration_models/qualys_scanner.py +160 -0
  308. regscale/models/integration_models/sbom/__init__.py +0 -0
  309. regscale/models/integration_models/sbom/cyclone_dx.py +139 -0
  310. regscale/models/integration_models/send_reminders.py +620 -0
  311. regscale/models/integration_models/snyk.py +155 -0
  312. regscale/models/integration_models/synqly_models/__init__.py +0 -0
  313. regscale/models/integration_models/synqly_models/capabilities.json +1 -0
  314. regscale/models/integration_models/synqly_models/connector_types.py +22 -0
  315. regscale/models/integration_models/synqly_models/connectors/__init__.py +7 -0
  316. regscale/models/integration_models/synqly_models/connectors/assets.py +97 -0
  317. regscale/models/integration_models/synqly_models/connectors/ticketing.py +583 -0
  318. regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +169 -0
  319. regscale/models/integration_models/synqly_models/ocsf_mapper.py +331 -0
  320. regscale/models/integration_models/synqly_models/param.py +72 -0
  321. regscale/models/integration_models/synqly_models/synqly_model.py +733 -0
  322. regscale/models/integration_models/synqly_models/tenants.py +39 -0
  323. regscale/models/integration_models/tenable_models/__init__.py +0 -0
  324. regscale/models/integration_models/tenable_models/integration.py +187 -0
  325. regscale/models/integration_models/tenable_models/models.py +513 -0
  326. regscale/models/integration_models/trivy_import.py +231 -0
  327. regscale/models/integration_models/veracode.py +217 -0
  328. regscale/models/integration_models/xray.py +135 -0
  329. regscale/models/locking.py +100 -0
  330. regscale/models/platform.py +110 -0
  331. regscale/models/regscale_models/__init__.py +67 -0
  332. regscale/models/regscale_models/assessment.py +570 -0
  333. regscale/models/regscale_models/assessment_plan.py +52 -0
  334. regscale/models/regscale_models/asset.py +567 -0
  335. regscale/models/regscale_models/asset_mapping.py +190 -0
  336. regscale/models/regscale_models/case.py +42 -0
  337. regscale/models/regscale_models/catalog.py +261 -0
  338. regscale/models/regscale_models/cci.py +46 -0
  339. regscale/models/regscale_models/change.py +167 -0
  340. regscale/models/regscale_models/checklist.py +372 -0
  341. regscale/models/regscale_models/comment.py +49 -0
  342. regscale/models/regscale_models/compliance_settings.py +112 -0
  343. regscale/models/regscale_models/component.py +412 -0
  344. regscale/models/regscale_models/component_mapping.py +65 -0
  345. regscale/models/regscale_models/control.py +38 -0
  346. regscale/models/regscale_models/control_implementation.py +1128 -0
  347. regscale/models/regscale_models/control_objective.py +261 -0
  348. regscale/models/regscale_models/control_parameter.py +100 -0
  349. regscale/models/regscale_models/control_test.py +34 -0
  350. regscale/models/regscale_models/control_test_plan.py +75 -0
  351. regscale/models/regscale_models/control_test_result.py +52 -0
  352. regscale/models/regscale_models/custom_field.py +245 -0
  353. regscale/models/regscale_models/data.py +109 -0
  354. regscale/models/regscale_models/data_center.py +40 -0
  355. regscale/models/regscale_models/deviation.py +203 -0
  356. regscale/models/regscale_models/email.py +97 -0
  357. regscale/models/regscale_models/evidence.py +47 -0
  358. regscale/models/regscale_models/evidence_mapping.py +40 -0
  359. regscale/models/regscale_models/facility.py +59 -0
  360. regscale/models/regscale_models/file.py +382 -0
  361. regscale/models/regscale_models/filetag.py +37 -0
  362. regscale/models/regscale_models/form_field_value.py +94 -0
  363. regscale/models/regscale_models/group.py +169 -0
  364. regscale/models/regscale_models/implementation_objective.py +335 -0
  365. regscale/models/regscale_models/implementation_option.py +275 -0
  366. regscale/models/regscale_models/implementation_role.py +33 -0
  367. regscale/models/regscale_models/incident.py +177 -0
  368. regscale/models/regscale_models/interconnection.py +43 -0
  369. regscale/models/regscale_models/issue.py +1176 -0
  370. regscale/models/regscale_models/leveraged_authorization.py +125 -0
  371. regscale/models/regscale_models/line_of_inquiry.py +52 -0
  372. regscale/models/regscale_models/link.py +205 -0
  373. regscale/models/regscale_models/meta_data.py +64 -0
  374. regscale/models/regscale_models/mixins/__init__.py +0 -0
  375. regscale/models/regscale_models/mixins/parent_cache.py +124 -0
  376. regscale/models/regscale_models/module.py +224 -0
  377. regscale/models/regscale_models/modules.py +191 -0
  378. regscale/models/regscale_models/objective.py +14 -0
  379. regscale/models/regscale_models/parameter.py +87 -0
  380. regscale/models/regscale_models/ports_protocol.py +81 -0
  381. regscale/models/regscale_models/privacy.py +89 -0
  382. regscale/models/regscale_models/profile.py +50 -0
  383. regscale/models/regscale_models/profile_link.py +68 -0
  384. regscale/models/regscale_models/profile_mapping.py +124 -0
  385. regscale/models/regscale_models/project.py +63 -0
  386. regscale/models/regscale_models/property.py +278 -0
  387. regscale/models/regscale_models/question.py +85 -0
  388. regscale/models/regscale_models/questionnaire.py +87 -0
  389. regscale/models/regscale_models/questionnaire_instance.py +177 -0
  390. regscale/models/regscale_models/rbac.py +132 -0
  391. regscale/models/regscale_models/reference.py +86 -0
  392. regscale/models/regscale_models/regscale_model.py +1643 -0
  393. regscale/models/regscale_models/requirement.py +29 -0
  394. regscale/models/regscale_models/risk.py +274 -0
  395. regscale/models/regscale_models/sbom.py +54 -0
  396. regscale/models/regscale_models/scan_history.py +436 -0
  397. regscale/models/regscale_models/search.py +53 -0
  398. regscale/models/regscale_models/security_control.py +132 -0
  399. regscale/models/regscale_models/security_plan.py +204 -0
  400. regscale/models/regscale_models/software_inventory.py +159 -0
  401. regscale/models/regscale_models/stake_holder.py +64 -0
  402. regscale/models/regscale_models/stig.py +647 -0
  403. regscale/models/regscale_models/supply_chain.py +152 -0
  404. regscale/models/regscale_models/system_role.py +188 -0
  405. regscale/models/regscale_models/system_role_external_assignment.py +40 -0
  406. regscale/models/regscale_models/tag.py +37 -0
  407. regscale/models/regscale_models/tag_mapping.py +19 -0
  408. regscale/models/regscale_models/task.py +133 -0
  409. regscale/models/regscale_models/threat.py +196 -0
  410. regscale/models/regscale_models/user.py +175 -0
  411. regscale/models/regscale_models/user_group.py +55 -0
  412. regscale/models/regscale_models/vulnerability.py +242 -0
  413. regscale/models/regscale_models/vulnerability_mapping.py +162 -0
  414. regscale/models/regscale_models/workflow.py +55 -0
  415. regscale/models/regscale_models/workflow_action.py +34 -0
  416. regscale/models/regscale_models/workflow_instance.py +269 -0
  417. regscale/models/regscale_models/workflow_instance_step.py +114 -0
  418. regscale/models/regscale_models/workflow_template.py +58 -0
  419. regscale/models/regscale_models/workflow_template_step.py +45 -0
  420. regscale/regscale.py +815 -0
  421. regscale/utils/__init__.py +7 -0
  422. regscale/utils/b64conversion.py +14 -0
  423. regscale/utils/click_utils.py +118 -0
  424. regscale/utils/decorators.py +48 -0
  425. regscale/utils/dict_utils.py +59 -0
  426. regscale/utils/files.py +79 -0
  427. regscale/utils/fxns.py +30 -0
  428. regscale/utils/graphql_client.py +113 -0
  429. regscale/utils/lists.py +16 -0
  430. regscale/utils/numbers.py +12 -0
  431. regscale/utils/shell.py +148 -0
  432. regscale/utils/string.py +121 -0
  433. regscale/utils/synqly_utils.py +165 -0
  434. regscale/utils/threading/__init__.py +8 -0
  435. regscale/utils/threading/threadhandler.py +131 -0
  436. regscale/utils/threading/threadsafe_counter.py +47 -0
  437. regscale/utils/threading/threadsafe_dict.py +242 -0
  438. regscale/utils/threading/threadsafe_list.py +83 -0
  439. regscale/utils/version.py +104 -0
  440. regscale/validation/__init__.py +0 -0
  441. regscale/validation/address.py +37 -0
  442. regscale/validation/record.py +48 -0
  443. regscale/visualization/__init__.py +5 -0
  444. regscale/visualization/click.py +34 -0
  445. regscale_cli-6.16.0.0.dist-info/LICENSE +21 -0
  446. regscale_cli-6.16.0.0.dist-info/METADATA +659 -0
  447. regscale_cli-6.16.0.0.dist-info/RECORD +481 -0
  448. regscale_cli-6.16.0.0.dist-info/WHEEL +5 -0
  449. regscale_cli-6.16.0.0.dist-info/entry_points.txt +6 -0
  450. regscale_cli-6.16.0.0.dist-info/top_level.txt +2 -0
  451. tests/fixtures/__init__.py +2 -0
  452. tests/fixtures/api.py +87 -0
  453. tests/fixtures/models.py +91 -0
  454. tests/fixtures/test_fixture.py +144 -0
  455. tests/mocks/__init__.py +0 -0
  456. tests/mocks/objects.py +3 -0
  457. tests/mocks/response.py +32 -0
  458. tests/mocks/xml.py +13 -0
  459. tests/regscale/__init__.py +0 -0
  460. tests/regscale/core/__init__.py +0 -0
  461. tests/regscale/core/test_api.py +232 -0
  462. tests/regscale/core/test_app.py +406 -0
  463. tests/regscale/core/test_login.py +37 -0
  464. tests/regscale/core/test_logz.py +66 -0
  465. tests/regscale/core/test_sbom_generator.py +87 -0
  466. tests/regscale/core/test_validation_utils.py +163 -0
  467. tests/regscale/core/test_version.py +78 -0
  468. tests/regscale/models/__init__.py +0 -0
  469. tests/regscale/models/test_asset.py +71 -0
  470. tests/regscale/models/test_config.py +26 -0
  471. tests/regscale/models/test_control_implementation.py +27 -0
  472. tests/regscale/models/test_import.py +97 -0
  473. tests/regscale/models/test_issue.py +36 -0
  474. tests/regscale/models/test_mapping.py +52 -0
  475. tests/regscale/models/test_platform.py +31 -0
  476. tests/regscale/models/test_regscale_model.py +346 -0
  477. tests/regscale/models/test_report.py +32 -0
  478. tests/regscale/models/test_tenable_integrations.py +118 -0
  479. tests/regscale/models/test_user_model.py +121 -0
  480. tests/regscale/test_about.py +19 -0
  481. tests/regscale/test_authorization.py +65 -0
@@ -0,0 +1,429 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """Integrates Wiz.io into RegScale"""
4
+
5
+ # standard python imports
6
+ import logging
7
+ import os
8
+ from typing import Optional
9
+
10
+ import click
11
+
12
+ from regscale.integrations.commercial.wizv2.variables import WizVariables
13
+ from regscale.models import regscale_id, regscale_module
14
+ from regscale.models.app_models.click import regscale_ssp_id
15
+
16
+ logger = logging.getLogger("regscale")
17
+
18
+
19
+ @click.group() # type: ignore
20
+ def wiz():
21
+ """Integrates continuous monitoring data from Wiz.io."""
22
+
23
+
24
+ @wiz.command()
25
+ @click.option("--client_id", default=None, hide_input=False, required=False) # type: ignore
26
+ @click.option("--client_secret", default=None, hide_input=True, required=False) # type: ignore
27
+ def authenticate(client_id, client_secret):
28
+ """Authenticate to Wiz."""
29
+ from regscale.integrations.commercial.wizv2.wiz_auth import wiz_authenticate
30
+
31
+ wiz_authenticate(client_id, client_secret)
32
+
33
+
34
+ @wiz.command()
35
+ @click.option( # type: ignore
36
+ "--wiz_project_id",
37
+ "-p",
38
+ required=False,
39
+ type=str,
40
+ help="Comma Seperated list of one or more Wiz project ids to pull inventory for.",
41
+ )
42
+ @click.option("--regscale_id", "-i", help="RegScale id to push inventory to in RegScale.") # type: ignore
43
+ @click.option( # type: ignore
44
+ "--regscale_module",
45
+ "-m",
46
+ help="Regscale module to push inventory to in RegScale.",
47
+ )
48
+ @click.option( # type: ignore
49
+ "--client_id",
50
+ "-ci",
51
+ help="Wiz Client ID, or can be set as environment variable wizClientId",
52
+ default="",
53
+ hide_input=False,
54
+ required=False,
55
+ )
56
+ @click.option( # type: ignore
57
+ "--client_secret",
58
+ "-cs",
59
+ help="Wiz Client Secret, or can be set as environment variable wizClientSecret",
60
+ default="",
61
+ hide_input=False,
62
+ required=False,
63
+ )
64
+ @click.option( # type: ignore
65
+ "--filter_by_override",
66
+ "-f",
67
+ default=None,
68
+ type=str,
69
+ required=False,
70
+ help="""Filter by override to use for pulling inventory you can use one or more of the following.
71
+ IE: --filter_by='{projectId: ["1234"], type: ["VIRTUAL_MACHINE"], subscriptionExternalId: ["1234"],
72
+ providerUniqueId: ["1234"], updatedAt: {after: "2023-06-14T14:07:06Z"}, search: "test-7"}' """,
73
+ )
74
+ @click.option( # type: ignore
75
+ "--full_inventory",
76
+ "-fi",
77
+ is_flag=True,
78
+ help="Pull full inventory list. this disregards the last pull date.",
79
+ required=False,
80
+ default=False,
81
+ )
82
+ def inventory(
83
+ wiz_project_id: str,
84
+ regscale_id: int,
85
+ regscale_module: str,
86
+ client_id: str,
87
+ client_secret: str,
88
+ filter_by_override: Optional[str] = None,
89
+ full_inventory: bool = False,
90
+ ) -> None:
91
+ """Process inventory from Wiz and create assets in RegScale."""
92
+ from regscale.integrations.commercial.wizv2.scanner import WizVulnerabilityIntegration
93
+
94
+ if not client_secret:
95
+ client_secret = WizVariables.wizClientSecret
96
+ if not client_id:
97
+ client_id = WizVariables.wizClientId
98
+
99
+ scanner = WizVulnerabilityIntegration(plan_id=regscale_id)
100
+ scanner.sync_assets(
101
+ plan_id=regscale_id,
102
+ filter_by_override=filter_by_override or WizVariables.wizInventoryFilterBy, # type: ignore
103
+ client_id=client_id, # type: ignore
104
+ client_secret=client_secret, # type: ignore
105
+ wiz_project_id=wiz_project_id,
106
+ )
107
+
108
+
109
+ @wiz.command() # type: ignore
110
+ @click.option( # type: ignore
111
+ "--wiz_project_id",
112
+ "-p",
113
+ prompt="Enter the project ID for Wiz",
114
+ default=None,
115
+ required=False,
116
+ )
117
+ @regscale_id(help="RegScale will create and update issues as children of this record.")
118
+ @click.option( # type: ignore
119
+ "--regscale_module",
120
+ "-m",
121
+ type=click.STRING, # type: ignore
122
+ help="Enter the RegScale module name. Default is 'securityplans'",
123
+ default="securityplans",
124
+ required=False,
125
+ )
126
+ @click.option( # type: ignore
127
+ "--client_id",
128
+ help="Wiz Client ID, or can be set as environment variable wizClientId",
129
+ default="",
130
+ hide_input=False,
131
+ required=False,
132
+ )
133
+ @click.option( # type: ignore
134
+ "--client_secret",
135
+ help="Wiz Client Secret, or can be set as environment variable wizClientSecret",
136
+ default="",
137
+ hide_input=True,
138
+ required=False,
139
+ )
140
+ @click.option( # type: ignore
141
+ "--filter_by_override",
142
+ "-f",
143
+ default=None,
144
+ type=str,
145
+ required=False,
146
+ help="""Filter by override to use for pulling inventory you can use one or more of the following.
147
+ IE: --filter_by='{projectId: ["1234"], type: ["VIRTUAL_MACHINE"], subscriptionExternalId: ["1234"],
148
+ providerUniqueId: ["1234"], updatedAt: {after: "2023-06-14T14:07:06Z"}, search: "test-7"}' """,
149
+ )
150
+ def issues(
151
+ wiz_project_id: str,
152
+ regscale_id: int,
153
+ client_id: str,
154
+ client_secret: str,
155
+ regscale_module: str = "securityplans",
156
+ filter_by_override: Optional[str] = None,
157
+ ) -> None:
158
+ """
159
+ Process Issues from Wiz into RegScale
160
+ """
161
+ from regscale.core.app.utils.app_utils import check_license
162
+ from regscale.integrations.commercial.wizv2.wiz_auth import wiz_authenticate
163
+ from regscale.integrations.commercial.wizv2.issue import WizIssue
164
+ import json
165
+
166
+ if not client_secret:
167
+ client_secret = WizVariables.wizClientSecret
168
+ if not client_id:
169
+ client_id = WizVariables.wizClientId
170
+
171
+ check_license()
172
+ wiz_authenticate(client_id, client_secret)
173
+ filter_by = json.loads(filter_by_override or WizVariables.wizIssueFilterBy.replace("\n", ""))
174
+
175
+ filter_by["project"] = wiz_project_id
176
+
177
+ scanner = WizIssue(plan_id=regscale_id)
178
+ scanner.sync_findings(
179
+ plan_id=regscale_id,
180
+ filter_by_override=filter_by_override, # type: ignore
181
+ client_id=client_id, # type: ignore
182
+ client_secret=client_secret, # type: ignore
183
+ wiz_project_id=wiz_project_id,
184
+ )
185
+
186
+
187
+ @wiz.command(name="attach_sbom")
188
+ @click.option( # type: ignore
189
+ "--client_id",
190
+ "-ci",
191
+ help="Wiz Client ID, or can be set as environment variable wizClientId",
192
+ default="",
193
+ hide_input=False,
194
+ required=False,
195
+ )
196
+ @click.option( # type: ignore
197
+ "--client_secret",
198
+ "-cs",
199
+ help="Wiz Client Secret, or can be set as environment variable wizClientSecret",
200
+ default="",
201
+ hide_input=True,
202
+ required=False,
203
+ )
204
+ @regscale_ssp_id(help="RegScale will create and update issues as children of this record.")
205
+ @click.option("--report_id", "-r", help="Wiz Report ID", required=True) # type: ignore
206
+ @click.option( # type: ignore
207
+ "--standard", "-s", help="SBOM standard CycloneDX or SPDX default is CycloneDX", default="CycloneDX", required=False
208
+ )
209
+ def attach_sbom(
210
+ client_id,
211
+ client_secret,
212
+ regscale_ssp_id: str,
213
+ report_id: str,
214
+ standard="CycloneDX",
215
+ ):
216
+ """Download SBOMs from a Wiz report by ID and add them to the corresponding RegScale assets."""
217
+ from regscale.integrations.commercial.wizv2.wiz_auth import wiz_authenticate
218
+ from regscale.integrations.commercial.wizv2.utils import fetch_sbom_report
219
+
220
+ if not client_secret:
221
+ client_secret = WizVariables.wizClientSecret
222
+ if not client_id:
223
+ client_id = WizVariables.wizClientId
224
+
225
+ wiz_authenticate(
226
+ client_id=client_id,
227
+ client_secret=client_secret,
228
+ )
229
+ fetch_sbom_report(
230
+ report_id,
231
+ parent_id=regscale_ssp_id,
232
+ report_file_name="sbom_report",
233
+ report_file_extension="zip",
234
+ standard=standard,
235
+ )
236
+
237
+
238
+ @wiz.command()
239
+ def threats():
240
+ """Process threats from Wiz -> Coming soon"""
241
+ from regscale.core.app.utils.app_utils import check_license
242
+
243
+ check_license()
244
+ logger.info("Threats - COMING SOON")
245
+
246
+
247
+ @wiz.command()
248
+ @click.option( # type: ignore
249
+ "--wiz_project_id",
250
+ "-p",
251
+ prompt="Enter the project ID for Wiz",
252
+ default=None,
253
+ required=False,
254
+ )
255
+ @regscale_ssp_id(help="RegScale will create and update issues as children of this record.")
256
+ @click.option( # type: ignore
257
+ "--client_id",
258
+ "-ci",
259
+ help="Wiz Client ID, or can be set as environment variable wizClientId",
260
+ default="",
261
+ hide_input=False,
262
+ required=False,
263
+ )
264
+ @click.option( # type: ignore
265
+ "--client_secret",
266
+ "-cs",
267
+ help="Wiz Client Secret, or can be set as environment variable wizClientSecret",
268
+ default="",
269
+ hide_input=True,
270
+ required=False,
271
+ )
272
+ @click.option( # type: ignore
273
+ "--filter_by_override",
274
+ "-f",
275
+ default=None,
276
+ type=str,
277
+ required=False,
278
+ help="""Filter by override to use for pulling inventory you can use one or more of the following.
279
+ IE: --filter_by='{projectId: ["1234"], type: ["VIRTUAL_MACHINE"], subscriptionExternalId: ["1234"],
280
+ providerUniqueId: ["1234"], updatedAt: {after: "2023-06-14T14:07:06Z"}, search: "test-7"}' """,
281
+ )
282
+ def vulnerabilities(
283
+ wiz_project_id: str,
284
+ regscale_ssp_id: int,
285
+ client_id: str,
286
+ client_secret: str,
287
+ filter_by_override: Optional[str] = None,
288
+ ):
289
+ """Process vulnerabilities from Wiz"""
290
+ from regscale.integrations.commercial.wizv2.scanner import WizVulnerabilityIntegration
291
+
292
+ if not client_secret:
293
+ client_secret = WizVariables.wizClientSecret
294
+ if not client_id:
295
+ client_id = WizVariables.wizClientId
296
+
297
+ scanner = WizVulnerabilityIntegration(plan_id=regscale_ssp_id)
298
+ scanner.sync_findings(
299
+ plan_id=regscale_ssp_id,
300
+ filter_by_override=filter_by_override, # type: ignore
301
+ client_id=client_id, # type: ignore
302
+ client_secret=client_secret, # type: ignore
303
+ wiz_project_id=wiz_project_id,
304
+ )
305
+
306
+
307
+ @wiz.command(name="add_report_evidence")
308
+ @click.option( # type: ignore
309
+ "--client_id",
310
+ "-ci",
311
+ help="Wiz Client ID, or can be set as environment variable wizClientId",
312
+ default="",
313
+ hide_input=False,
314
+ required=False,
315
+ )
316
+ @click.option( # type: ignore
317
+ "--client_secret",
318
+ "-cs",
319
+ help="Wiz Client Secret, or can be set as environment variable wizClientSecret",
320
+ default="",
321
+ hide_input=True,
322
+ required=False,
323
+ )
324
+ @click.option("--evidence_id", "-e", help="Wiz Evidence ID", required=True, type=int) # type: ignore
325
+ @click.option("--report_id", "-r", help="Wiz Report ID", required=True) # type: ignore
326
+ @click.option("--report_file_name", "-n", help="Report file name", default="evidence_report", required=False) # type: ignore
327
+ @click.option("--report_file_extension", "-e", help="Report file extension", default="csv", required=False) # type: ignore
328
+ def add_report_evidence(
329
+ client_id,
330
+ client_secret,
331
+ evidence_id: int,
332
+ report_id: str,
333
+ report_file_name: str = "evidence_report",
334
+ report_file_extension: str = "csv",
335
+ ):
336
+ """Download a Wiz report by ID and Attach to Evidence locker"""
337
+ from regscale.integrations.commercial.wizv2.wiz_auth import wiz_authenticate
338
+ from regscale.integrations.commercial.wizv2.utils import fetch_report_by_id
339
+
340
+ if not client_secret:
341
+ client_secret = WizVariables.wizClientSecret
342
+ if not client_id:
343
+ client_id = WizVariables.wizClientId
344
+
345
+ wiz_authenticate(
346
+ client_id=client_id,
347
+ client_secret=client_secret,
348
+ )
349
+ fetch_report_by_id(
350
+ report_id, parent_id=evidence_id, report_file_name=report_file_name, report_file_extension=report_file_extension
351
+ )
352
+
353
+
354
+ @wiz.command("sync_compliance")
355
+ @click.option( # type: ignore
356
+ "--wiz_project_id",
357
+ "-p",
358
+ prompt="Enter the Wiz project ID",
359
+ help="Enter the Wiz Project ID. Options include: projects, \
360
+ policies, supplychain, securityplans, components.",
361
+ required=True,
362
+ )
363
+ @regscale_id(help="RegScale will create and update issues as children of this record.")
364
+ @regscale_module()
365
+ @click.option( # type: ignore
366
+ "--client_id",
367
+ "-i",
368
+ help="Wiz Client ID. Can also be set as an environment variable: WIZ_CLIENT_ID",
369
+ default=os.environ.get("WIZ_CLIENT_ID"),
370
+ hide_input=False,
371
+ required=False,
372
+ )
373
+ @click.option( # type: ignore
374
+ "--client_secret",
375
+ "-s",
376
+ help="Wiz Client Secret. Can also be set as an environment variable: WIZ_CLIENT_SECRET",
377
+ default=os.environ.get("WIZ_CLIENT_SECRET"),
378
+ hide_input=True,
379
+ required=False,
380
+ )
381
+ @click.option( # type: ignore
382
+ "--catalog_id",
383
+ "-c",
384
+ help="RegScale Catalog ID for the selected framework.",
385
+ prompt="RegScale Catalog ID",
386
+ hide_input=False,
387
+ required=True,
388
+ )
389
+ @click.option( # type: ignore
390
+ "--framework",
391
+ "-f",
392
+ type=click.Choice(["CSF", "NIST800-53R5", "NIST800-53R4"], case_sensitive=False), # type: ignore
393
+ help="Choose either one of the Frameworks",
394
+ default="NIST800-53R5",
395
+ required=True,
396
+ )
397
+ @click.option( # type: ignore
398
+ "--include_not_implemented",
399
+ "-n",
400
+ is_flag=True,
401
+ help="Include not implemented controls",
402
+ default=False,
403
+ )
404
+ def sync_compliance(
405
+ wiz_project_id,
406
+ regscale_id,
407
+ regscale_module,
408
+ client_id,
409
+ client_secret,
410
+ catalog_id,
411
+ framework,
412
+ include_not_implemented,
413
+ ):
414
+ """Sync compliance posture from Wiz to RegScale"""
415
+ from regscale.core.app.utils.app_utils import create_progress_object
416
+ from regscale.integrations.commercial.wizv2.utils import _sync_compliance
417
+
418
+ compliance_job_progress = create_progress_object()
419
+ with compliance_job_progress:
420
+ _sync_compliance(
421
+ wiz_project_id=wiz_project_id,
422
+ regscale_id=regscale_id,
423
+ regscale_module=regscale_module,
424
+ include_not_implemented=include_not_implemented,
425
+ client_id=client_id,
426
+ client_secret=client_secret,
427
+ catalog_id=catalog_id,
428
+ framework=framework,
429
+ )