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.
- regscale/__init__.py +1 -0
- regscale/airflow/__init__.py +9 -0
- regscale/airflow/azure/__init__.py +9 -0
- regscale/airflow/azure/cli.py +89 -0
- regscale/airflow/azure/upload_dags.py +116 -0
- regscale/airflow/click_dags.py +127 -0
- regscale/airflow/click_mixins.py +82 -0
- regscale/airflow/config.py +25 -0
- regscale/airflow/factories/__init__.py +0 -0
- regscale/airflow/factories/connections.py +58 -0
- regscale/airflow/factories/workflows.py +78 -0
- regscale/airflow/hierarchy.py +88 -0
- regscale/airflow/operators/__init__.py +0 -0
- regscale/airflow/operators/click.py +36 -0
- regscale/airflow/sensors/__init__.py +0 -0
- regscale/airflow/sensors/sql.py +107 -0
- regscale/airflow/sessions/__init__.py +0 -0
- regscale/airflow/sessions/sql/__init__.py +3 -0
- regscale/airflow/sessions/sql/queries.py +64 -0
- regscale/airflow/sessions/sql/sql_server_queries.py +248 -0
- regscale/airflow/tasks/__init__.py +0 -0
- regscale/airflow/tasks/branches.py +22 -0
- regscale/airflow/tasks/cli.py +116 -0
- regscale/airflow/tasks/click.py +73 -0
- regscale/airflow/tasks/debugging.py +9 -0
- regscale/airflow/tasks/groups.py +116 -0
- regscale/airflow/tasks/init.py +60 -0
- regscale/airflow/tasks/states.py +47 -0
- regscale/airflow/tasks/workflows.py +36 -0
- regscale/ansible/__init__.py +9 -0
- regscale/core/__init__.py +0 -0
- regscale/core/app/__init__.py +3 -0
- regscale/core/app/api.py +571 -0
- regscale/core/app/application.py +665 -0
- regscale/core/app/internal/__init__.py +136 -0
- regscale/core/app/internal/admin_actions.py +230 -0
- regscale/core/app/internal/assessments_editor.py +873 -0
- regscale/core/app/internal/catalog.py +316 -0
- regscale/core/app/internal/comparison.py +459 -0
- regscale/core/app/internal/control_editor.py +571 -0
- regscale/core/app/internal/encrypt.py +79 -0
- regscale/core/app/internal/evidence.py +1240 -0
- regscale/core/app/internal/file_uploads.py +151 -0
- regscale/core/app/internal/healthcheck.py +66 -0
- regscale/core/app/internal/login.py +305 -0
- regscale/core/app/internal/migrations.py +240 -0
- regscale/core/app/internal/model_editor.py +1701 -0
- regscale/core/app/internal/poam_editor.py +632 -0
- regscale/core/app/internal/workflow.py +105 -0
- regscale/core/app/logz.py +74 -0
- regscale/core/app/utils/XMLIR.py +258 -0
- regscale/core/app/utils/__init__.py +0 -0
- regscale/core/app/utils/api_handler.py +358 -0
- regscale/core/app/utils/app_utils.py +1110 -0
- regscale/core/app/utils/catalog_utils/__init__.py +0 -0
- regscale/core/app/utils/catalog_utils/common.py +91 -0
- regscale/core/app/utils/catalog_utils/compare_catalog.py +193 -0
- regscale/core/app/utils/catalog_utils/diagnostic_catalog.py +97 -0
- regscale/core/app/utils/catalog_utils/download_catalog.py +103 -0
- regscale/core/app/utils/catalog_utils/update_catalog.py +718 -0
- regscale/core/app/utils/catalog_utils/update_catalog_v2.py +1378 -0
- regscale/core/app/utils/catalog_utils/update_catalog_v3.py +1272 -0
- regscale/core/app/utils/catalog_utils/update_plans.py +334 -0
- regscale/core/app/utils/file_utils.py +238 -0
- regscale/core/app/utils/parser_utils.py +81 -0
- regscale/core/app/utils/pickle_file_handler.py +57 -0
- regscale/core/app/utils/regscale_utils.py +319 -0
- regscale/core/app/utils/report_utils.py +119 -0
- regscale/core/app/utils/variables.py +226 -0
- regscale/core/decorators.py +31 -0
- regscale/core/lazy_group.py +65 -0
- regscale/core/login.py +63 -0
- regscale/core/server/__init__.py +0 -0
- regscale/core/server/flask_api.py +473 -0
- regscale/core/server/helpers.py +373 -0
- regscale/core/server/rest.py +64 -0
- regscale/core/server/static/css/bootstrap.css +6030 -0
- regscale/core/server/static/css/bootstrap.min.css +6 -0
- regscale/core/server/static/css/main.css +176 -0
- regscale/core/server/static/images/regscale-cli.svg +49 -0
- regscale/core/server/static/images/regscale.svg +38 -0
- regscale/core/server/templates/base.html +74 -0
- regscale/core/server/templates/index.html +43 -0
- regscale/core/server/templates/login.html +28 -0
- regscale/core/server/templates/make_base64.html +22 -0
- regscale/core/server/templates/upload_STIG.html +109 -0
- regscale/core/server/templates/upload_STIG_result.html +26 -0
- regscale/core/server/templates/upload_ssp.html +144 -0
- regscale/core/server/templates/upload_ssp_result.html +128 -0
- regscale/core/static/__init__.py +0 -0
- regscale/core/static/regex.py +14 -0
- regscale/core/utils/__init__.py +117 -0
- regscale/core/utils/click_utils.py +13 -0
- regscale/core/utils/date.py +238 -0
- regscale/core/utils/graphql.py +254 -0
- regscale/core/utils/urls.py +23 -0
- regscale/dev/__init__.py +6 -0
- regscale/dev/analysis.py +454 -0
- regscale/dev/cli.py +235 -0
- regscale/dev/code_gen.py +492 -0
- regscale/dev/dirs.py +69 -0
- regscale/dev/docs.py +384 -0
- regscale/dev/monitoring.py +26 -0
- regscale/dev/profiling.py +216 -0
- regscale/exceptions/__init__.py +4 -0
- regscale/exceptions/license_exception.py +7 -0
- regscale/exceptions/validation_exception.py +9 -0
- regscale/integrations/__init__.py +1 -0
- regscale/integrations/commercial/__init__.py +486 -0
- regscale/integrations/commercial/ad.py +433 -0
- regscale/integrations/commercial/amazon/__init__.py +0 -0
- regscale/integrations/commercial/amazon/common.py +106 -0
- regscale/integrations/commercial/aqua/__init__.py +0 -0
- regscale/integrations/commercial/aqua/aqua.py +91 -0
- regscale/integrations/commercial/aws/__init__.py +6 -0
- regscale/integrations/commercial/aws/cli.py +322 -0
- regscale/integrations/commercial/aws/inventory/__init__.py +110 -0
- regscale/integrations/commercial/aws/inventory/base.py +64 -0
- regscale/integrations/commercial/aws/inventory/resources/__init__.py +19 -0
- regscale/integrations/commercial/aws/inventory/resources/compute.py +234 -0
- regscale/integrations/commercial/aws/inventory/resources/containers.py +113 -0
- regscale/integrations/commercial/aws/inventory/resources/database.py +101 -0
- regscale/integrations/commercial/aws/inventory/resources/integration.py +237 -0
- regscale/integrations/commercial/aws/inventory/resources/networking.py +253 -0
- regscale/integrations/commercial/aws/inventory/resources/security.py +240 -0
- regscale/integrations/commercial/aws/inventory/resources/storage.py +91 -0
- regscale/integrations/commercial/aws/scanner.py +823 -0
- regscale/integrations/commercial/azure/__init__.py +0 -0
- regscale/integrations/commercial/azure/common.py +32 -0
- regscale/integrations/commercial/azure/intune.py +488 -0
- regscale/integrations/commercial/azure/scanner.py +49 -0
- regscale/integrations/commercial/burp.py +78 -0
- regscale/integrations/commercial/cpe.py +144 -0
- regscale/integrations/commercial/crowdstrike.py +1117 -0
- regscale/integrations/commercial/defender.py +1511 -0
- regscale/integrations/commercial/dependabot.py +210 -0
- regscale/integrations/commercial/durosuite/__init__.py +0 -0
- regscale/integrations/commercial/durosuite/api.py +1546 -0
- regscale/integrations/commercial/durosuite/process_devices.py +101 -0
- regscale/integrations/commercial/durosuite/scanner.py +637 -0
- regscale/integrations/commercial/durosuite/variables.py +21 -0
- regscale/integrations/commercial/ecr.py +90 -0
- regscale/integrations/commercial/gcp/__init__.py +237 -0
- regscale/integrations/commercial/gcp/auth.py +96 -0
- regscale/integrations/commercial/gcp/control_tests.py +238 -0
- regscale/integrations/commercial/gcp/variables.py +18 -0
- regscale/integrations/commercial/gitlab.py +332 -0
- regscale/integrations/commercial/grype.py +165 -0
- regscale/integrations/commercial/ibm.py +90 -0
- regscale/integrations/commercial/import_all/__init__.py +0 -0
- regscale/integrations/commercial/import_all/import_all_cmd.py +467 -0
- regscale/integrations/commercial/import_all/scan_file_fingerprints.json +27 -0
- regscale/integrations/commercial/jira.py +1046 -0
- regscale/integrations/commercial/mappings/__init__.py +0 -0
- regscale/integrations/commercial/mappings/csf_controls.json +713 -0
- regscale/integrations/commercial/mappings/nist_800_53_r5_controls.json +1516 -0
- regscale/integrations/commercial/nessus/__init__.py +0 -0
- regscale/integrations/commercial/nessus/nessus_utils.py +429 -0
- regscale/integrations/commercial/nessus/scanner.py +416 -0
- regscale/integrations/commercial/nexpose.py +90 -0
- regscale/integrations/commercial/okta.py +798 -0
- regscale/integrations/commercial/opentext/__init__.py +0 -0
- regscale/integrations/commercial/opentext/click.py +99 -0
- regscale/integrations/commercial/opentext/scanner.py +143 -0
- regscale/integrations/commercial/prisma.py +91 -0
- regscale/integrations/commercial/qualys.py +1462 -0
- regscale/integrations/commercial/salesforce.py +980 -0
- regscale/integrations/commercial/sap/__init__.py +0 -0
- regscale/integrations/commercial/sap/click.py +31 -0
- regscale/integrations/commercial/sap/sysdig/__init__.py +0 -0
- regscale/integrations/commercial/sap/sysdig/click.py +57 -0
- regscale/integrations/commercial/sap/sysdig/sysdig_scanner.py +190 -0
- regscale/integrations/commercial/sap/tenable/__init__.py +0 -0
- regscale/integrations/commercial/sap/tenable/click.py +49 -0
- regscale/integrations/commercial/sap/tenable/scanner.py +196 -0
- regscale/integrations/commercial/servicenow.py +1756 -0
- regscale/integrations/commercial/sicura/__init__.py +0 -0
- regscale/integrations/commercial/sicura/api.py +855 -0
- regscale/integrations/commercial/sicura/commands.py +73 -0
- regscale/integrations/commercial/sicura/scanner.py +481 -0
- regscale/integrations/commercial/sicura/variables.py +16 -0
- regscale/integrations/commercial/snyk.py +90 -0
- regscale/integrations/commercial/sonarcloud.py +260 -0
- regscale/integrations/commercial/sqlserver.py +369 -0
- regscale/integrations/commercial/stig_mapper_integration/__init__.py +0 -0
- regscale/integrations/commercial/stig_mapper_integration/click_commands.py +38 -0
- regscale/integrations/commercial/stig_mapper_integration/mapping_engine.py +353 -0
- regscale/integrations/commercial/stigv2/__init__.py +0 -0
- regscale/integrations/commercial/stigv2/ckl_parser.py +349 -0
- regscale/integrations/commercial/stigv2/click_commands.py +95 -0
- regscale/integrations/commercial/stigv2/stig_integration.py +202 -0
- regscale/integrations/commercial/synqly/__init__.py +0 -0
- regscale/integrations/commercial/synqly/assets.py +46 -0
- regscale/integrations/commercial/synqly/ticketing.py +132 -0
- regscale/integrations/commercial/synqly/vulnerabilities.py +223 -0
- regscale/integrations/commercial/synqly_jira.py +840 -0
- regscale/integrations/commercial/tenablev2/__init__.py +0 -0
- regscale/integrations/commercial/tenablev2/authenticate.py +31 -0
- regscale/integrations/commercial/tenablev2/click.py +1584 -0
- regscale/integrations/commercial/tenablev2/scanner.py +504 -0
- regscale/integrations/commercial/tenablev2/stig_parsers.py +140 -0
- regscale/integrations/commercial/tenablev2/utils.py +78 -0
- regscale/integrations/commercial/tenablev2/variables.py +17 -0
- regscale/integrations/commercial/trivy.py +162 -0
- regscale/integrations/commercial/veracode.py +96 -0
- regscale/integrations/commercial/wizv2/WizDataMixin.py +97 -0
- regscale/integrations/commercial/wizv2/__init__.py +0 -0
- regscale/integrations/commercial/wizv2/click.py +429 -0
- regscale/integrations/commercial/wizv2/constants.py +1001 -0
- regscale/integrations/commercial/wizv2/issue.py +361 -0
- regscale/integrations/commercial/wizv2/models.py +112 -0
- regscale/integrations/commercial/wizv2/parsers.py +339 -0
- regscale/integrations/commercial/wizv2/sbom.py +115 -0
- regscale/integrations/commercial/wizv2/scanner.py +416 -0
- regscale/integrations/commercial/wizv2/utils.py +796 -0
- regscale/integrations/commercial/wizv2/variables.py +39 -0
- regscale/integrations/commercial/wizv2/wiz_auth.py +159 -0
- regscale/integrations/commercial/xray.py +91 -0
- regscale/integrations/integration/__init__.py +2 -0
- regscale/integrations/integration/integration.py +26 -0
- regscale/integrations/integration/inventory.py +17 -0
- regscale/integrations/integration/issue.py +100 -0
- regscale/integrations/integration_override.py +149 -0
- regscale/integrations/public/__init__.py +103 -0
- regscale/integrations/public/cisa.py +641 -0
- regscale/integrations/public/criticality_updater.py +70 -0
- regscale/integrations/public/emass.py +411 -0
- regscale/integrations/public/emass_slcm_import.py +697 -0
- regscale/integrations/public/fedramp/__init__.py +0 -0
- regscale/integrations/public/fedramp/appendix_parser.py +548 -0
- regscale/integrations/public/fedramp/click.py +479 -0
- regscale/integrations/public/fedramp/components.py +714 -0
- regscale/integrations/public/fedramp/docx_parser.py +259 -0
- regscale/integrations/public/fedramp/fedramp_cis_crm.py +1124 -0
- regscale/integrations/public/fedramp/fedramp_common.py +3181 -0
- regscale/integrations/public/fedramp/fedramp_docx.py +388 -0
- regscale/integrations/public/fedramp/fedramp_five.py +2343 -0
- regscale/integrations/public/fedramp/fedramp_traversal.py +138 -0
- regscale/integrations/public/fedramp/import_fedramp_r4_ssp.py +279 -0
- regscale/integrations/public/fedramp/import_workbook.py +495 -0
- regscale/integrations/public/fedramp/inventory_items.py +244 -0
- regscale/integrations/public/fedramp/mappings/__init__.py +0 -0
- regscale/integrations/public/fedramp/mappings/fedramp_r4_parts.json +7388 -0
- regscale/integrations/public/fedramp/mappings/fedramp_r5_params.json +8636 -0
- regscale/integrations/public/fedramp/mappings/fedramp_r5_parts.json +9605 -0
- regscale/integrations/public/fedramp/mappings/system_roles.py +34 -0
- regscale/integrations/public/fedramp/mappings/user.py +175 -0
- regscale/integrations/public/fedramp/mappings/values.py +141 -0
- regscale/integrations/public/fedramp/markdown_parser.py +150 -0
- regscale/integrations/public/fedramp/metadata.py +689 -0
- regscale/integrations/public/fedramp/models/__init__.py +59 -0
- regscale/integrations/public/fedramp/models/leveraged_auth_new.py +168 -0
- regscale/integrations/public/fedramp/models/poam_importer.py +522 -0
- regscale/integrations/public/fedramp/parts_mapper.py +107 -0
- regscale/integrations/public/fedramp/poam/__init__.py +0 -0
- regscale/integrations/public/fedramp/poam/scanner.py +851 -0
- regscale/integrations/public/fedramp/properties.py +201 -0
- regscale/integrations/public/fedramp/reporting.py +84 -0
- regscale/integrations/public/fedramp/resources.py +496 -0
- regscale/integrations/public/fedramp/rosetta.py +110 -0
- regscale/integrations/public/fedramp/ssp_logger.py +87 -0
- regscale/integrations/public/fedramp/system_characteristics.py +922 -0
- regscale/integrations/public/fedramp/system_control_implementations.py +582 -0
- regscale/integrations/public/fedramp/system_implementation.py +190 -0
- regscale/integrations/public/fedramp/xml_utils.py +87 -0
- regscale/integrations/public/nist_catalog.py +275 -0
- regscale/integrations/public/oscal.py +1946 -0
- regscale/integrations/public/otx.py +169 -0
- regscale/integrations/scanner_integration.py +2692 -0
- regscale/integrations/variables.py +25 -0
- regscale/models/__init__.py +7 -0
- regscale/models/app_models/__init__.py +5 -0
- regscale/models/app_models/catalog_compare.py +213 -0
- regscale/models/app_models/click.py +252 -0
- regscale/models/app_models/datetime_encoder.py +21 -0
- regscale/models/app_models/import_validater.py +321 -0
- regscale/models/app_models/mapping.py +260 -0
- regscale/models/app_models/pipeline.py +37 -0
- regscale/models/click_models.py +413 -0
- regscale/models/config.py +154 -0
- regscale/models/email_style.css +67 -0
- regscale/models/hierarchy.py +8 -0
- regscale/models/inspect_models.py +79 -0
- regscale/models/integration_models/__init__.py +0 -0
- regscale/models/integration_models/amazon_models/__init__.py +0 -0
- regscale/models/integration_models/amazon_models/inspector.py +262 -0
- regscale/models/integration_models/amazon_models/inspector_scan.py +206 -0
- regscale/models/integration_models/aqua.py +247 -0
- regscale/models/integration_models/azure_alerts.py +255 -0
- regscale/models/integration_models/base64.py +23 -0
- regscale/models/integration_models/burp.py +433 -0
- regscale/models/integration_models/burp_models.py +128 -0
- regscale/models/integration_models/cisa_kev_data.json +19333 -0
- regscale/models/integration_models/defender_data.py +93 -0
- regscale/models/integration_models/defenderimport.py +143 -0
- regscale/models/integration_models/drf.py +443 -0
- regscale/models/integration_models/ecr_models/__init__.py +0 -0
- regscale/models/integration_models/ecr_models/data.py +69 -0
- regscale/models/integration_models/ecr_models/ecr.py +239 -0
- regscale/models/integration_models/flat_file_importer.py +1079 -0
- regscale/models/integration_models/grype_import.py +247 -0
- regscale/models/integration_models/ibm.py +126 -0
- regscale/models/integration_models/implementation_results.py +85 -0
- regscale/models/integration_models/nexpose.py +140 -0
- regscale/models/integration_models/prisma.py +202 -0
- regscale/models/integration_models/qualys.py +720 -0
- regscale/models/integration_models/qualys_scanner.py +160 -0
- regscale/models/integration_models/sbom/__init__.py +0 -0
- regscale/models/integration_models/sbom/cyclone_dx.py +139 -0
- regscale/models/integration_models/send_reminders.py +620 -0
- regscale/models/integration_models/snyk.py +155 -0
- regscale/models/integration_models/synqly_models/__init__.py +0 -0
- regscale/models/integration_models/synqly_models/capabilities.json +1 -0
- regscale/models/integration_models/synqly_models/connector_types.py +22 -0
- regscale/models/integration_models/synqly_models/connectors/__init__.py +7 -0
- regscale/models/integration_models/synqly_models/connectors/assets.py +97 -0
- regscale/models/integration_models/synqly_models/connectors/ticketing.py +583 -0
- regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +169 -0
- regscale/models/integration_models/synqly_models/ocsf_mapper.py +331 -0
- regscale/models/integration_models/synqly_models/param.py +72 -0
- regscale/models/integration_models/synqly_models/synqly_model.py +733 -0
- regscale/models/integration_models/synqly_models/tenants.py +39 -0
- regscale/models/integration_models/tenable_models/__init__.py +0 -0
- regscale/models/integration_models/tenable_models/integration.py +187 -0
- regscale/models/integration_models/tenable_models/models.py +513 -0
- regscale/models/integration_models/trivy_import.py +231 -0
- regscale/models/integration_models/veracode.py +217 -0
- regscale/models/integration_models/xray.py +135 -0
- regscale/models/locking.py +100 -0
- regscale/models/platform.py +110 -0
- regscale/models/regscale_models/__init__.py +67 -0
- regscale/models/regscale_models/assessment.py +570 -0
- regscale/models/regscale_models/assessment_plan.py +52 -0
- regscale/models/regscale_models/asset.py +567 -0
- regscale/models/regscale_models/asset_mapping.py +190 -0
- regscale/models/regscale_models/case.py +42 -0
- regscale/models/regscale_models/catalog.py +261 -0
- regscale/models/regscale_models/cci.py +46 -0
- regscale/models/regscale_models/change.py +167 -0
- regscale/models/regscale_models/checklist.py +372 -0
- regscale/models/regscale_models/comment.py +49 -0
- regscale/models/regscale_models/compliance_settings.py +112 -0
- regscale/models/regscale_models/component.py +412 -0
- regscale/models/regscale_models/component_mapping.py +65 -0
- regscale/models/regscale_models/control.py +38 -0
- regscale/models/regscale_models/control_implementation.py +1128 -0
- regscale/models/regscale_models/control_objective.py +261 -0
- regscale/models/regscale_models/control_parameter.py +100 -0
- regscale/models/regscale_models/control_test.py +34 -0
- regscale/models/regscale_models/control_test_plan.py +75 -0
- regscale/models/regscale_models/control_test_result.py +52 -0
- regscale/models/regscale_models/custom_field.py +245 -0
- regscale/models/regscale_models/data.py +109 -0
- regscale/models/regscale_models/data_center.py +40 -0
- regscale/models/regscale_models/deviation.py +203 -0
- regscale/models/regscale_models/email.py +97 -0
- regscale/models/regscale_models/evidence.py +47 -0
- regscale/models/regscale_models/evidence_mapping.py +40 -0
- regscale/models/regscale_models/facility.py +59 -0
- regscale/models/regscale_models/file.py +382 -0
- regscale/models/regscale_models/filetag.py +37 -0
- regscale/models/regscale_models/form_field_value.py +94 -0
- regscale/models/regscale_models/group.py +169 -0
- regscale/models/regscale_models/implementation_objective.py +335 -0
- regscale/models/regscale_models/implementation_option.py +275 -0
- regscale/models/regscale_models/implementation_role.py +33 -0
- regscale/models/regscale_models/incident.py +177 -0
- regscale/models/regscale_models/interconnection.py +43 -0
- regscale/models/regscale_models/issue.py +1176 -0
- regscale/models/regscale_models/leveraged_authorization.py +125 -0
- regscale/models/regscale_models/line_of_inquiry.py +52 -0
- regscale/models/regscale_models/link.py +205 -0
- regscale/models/regscale_models/meta_data.py +64 -0
- regscale/models/regscale_models/mixins/__init__.py +0 -0
- regscale/models/regscale_models/mixins/parent_cache.py +124 -0
- regscale/models/regscale_models/module.py +224 -0
- regscale/models/regscale_models/modules.py +191 -0
- regscale/models/regscale_models/objective.py +14 -0
- regscale/models/regscale_models/parameter.py +87 -0
- regscale/models/regscale_models/ports_protocol.py +81 -0
- regscale/models/regscale_models/privacy.py +89 -0
- regscale/models/regscale_models/profile.py +50 -0
- regscale/models/regscale_models/profile_link.py +68 -0
- regscale/models/regscale_models/profile_mapping.py +124 -0
- regscale/models/regscale_models/project.py +63 -0
- regscale/models/regscale_models/property.py +278 -0
- regscale/models/regscale_models/question.py +85 -0
- regscale/models/regscale_models/questionnaire.py +87 -0
- regscale/models/regscale_models/questionnaire_instance.py +177 -0
- regscale/models/regscale_models/rbac.py +132 -0
- regscale/models/regscale_models/reference.py +86 -0
- regscale/models/regscale_models/regscale_model.py +1643 -0
- regscale/models/regscale_models/requirement.py +29 -0
- regscale/models/regscale_models/risk.py +274 -0
- regscale/models/regscale_models/sbom.py +54 -0
- regscale/models/regscale_models/scan_history.py +436 -0
- regscale/models/regscale_models/search.py +53 -0
- regscale/models/regscale_models/security_control.py +132 -0
- regscale/models/regscale_models/security_plan.py +204 -0
- regscale/models/regscale_models/software_inventory.py +159 -0
- regscale/models/regscale_models/stake_holder.py +64 -0
- regscale/models/regscale_models/stig.py +647 -0
- regscale/models/regscale_models/supply_chain.py +152 -0
- regscale/models/regscale_models/system_role.py +188 -0
- regscale/models/regscale_models/system_role_external_assignment.py +40 -0
- regscale/models/regscale_models/tag.py +37 -0
- regscale/models/regscale_models/tag_mapping.py +19 -0
- regscale/models/regscale_models/task.py +133 -0
- regscale/models/regscale_models/threat.py +196 -0
- regscale/models/regscale_models/user.py +175 -0
- regscale/models/regscale_models/user_group.py +55 -0
- regscale/models/regscale_models/vulnerability.py +242 -0
- regscale/models/regscale_models/vulnerability_mapping.py +162 -0
- regscale/models/regscale_models/workflow.py +55 -0
- regscale/models/regscale_models/workflow_action.py +34 -0
- regscale/models/regscale_models/workflow_instance.py +269 -0
- regscale/models/regscale_models/workflow_instance_step.py +114 -0
- regscale/models/regscale_models/workflow_template.py +58 -0
- regscale/models/regscale_models/workflow_template_step.py +45 -0
- regscale/regscale.py +815 -0
- regscale/utils/__init__.py +7 -0
- regscale/utils/b64conversion.py +14 -0
- regscale/utils/click_utils.py +118 -0
- regscale/utils/decorators.py +48 -0
- regscale/utils/dict_utils.py +59 -0
- regscale/utils/files.py +79 -0
- regscale/utils/fxns.py +30 -0
- regscale/utils/graphql_client.py +113 -0
- regscale/utils/lists.py +16 -0
- regscale/utils/numbers.py +12 -0
- regscale/utils/shell.py +148 -0
- regscale/utils/string.py +121 -0
- regscale/utils/synqly_utils.py +165 -0
- regscale/utils/threading/__init__.py +8 -0
- regscale/utils/threading/threadhandler.py +131 -0
- regscale/utils/threading/threadsafe_counter.py +47 -0
- regscale/utils/threading/threadsafe_dict.py +242 -0
- regscale/utils/threading/threadsafe_list.py +83 -0
- regscale/utils/version.py +104 -0
- regscale/validation/__init__.py +0 -0
- regscale/validation/address.py +37 -0
- regscale/validation/record.py +48 -0
- regscale/visualization/__init__.py +5 -0
- regscale/visualization/click.py +34 -0
- regscale_cli-6.16.0.0.dist-info/LICENSE +21 -0
- regscale_cli-6.16.0.0.dist-info/METADATA +659 -0
- regscale_cli-6.16.0.0.dist-info/RECORD +481 -0
- regscale_cli-6.16.0.0.dist-info/WHEEL +5 -0
- regscale_cli-6.16.0.0.dist-info/entry_points.txt +6 -0
- regscale_cli-6.16.0.0.dist-info/top_level.txt +2 -0
- tests/fixtures/__init__.py +2 -0
- tests/fixtures/api.py +87 -0
- tests/fixtures/models.py +91 -0
- tests/fixtures/test_fixture.py +144 -0
- tests/mocks/__init__.py +0 -0
- tests/mocks/objects.py +3 -0
- tests/mocks/response.py +32 -0
- tests/mocks/xml.py +13 -0
- tests/regscale/__init__.py +0 -0
- tests/regscale/core/__init__.py +0 -0
- tests/regscale/core/test_api.py +232 -0
- tests/regscale/core/test_app.py +406 -0
- tests/regscale/core/test_login.py +37 -0
- tests/regscale/core/test_logz.py +66 -0
- tests/regscale/core/test_sbom_generator.py +87 -0
- tests/regscale/core/test_validation_utils.py +163 -0
- tests/regscale/core/test_version.py +78 -0
- tests/regscale/models/__init__.py +0 -0
- tests/regscale/models/test_asset.py +71 -0
- tests/regscale/models/test_config.py +26 -0
- tests/regscale/models/test_control_implementation.py +27 -0
- tests/regscale/models/test_import.py +97 -0
- tests/regscale/models/test_issue.py +36 -0
- tests/regscale/models/test_mapping.py +52 -0
- tests/regscale/models/test_platform.py +31 -0
- tests/regscale/models/test_regscale_model.py +346 -0
- tests/regscale/models/test_report.py +32 -0
- tests/regscale/models/test_tenable_integrations.py +118 -0
- tests/regscale/models/test_user_model.py +121 -0
- tests/regscale/test_about.py +19 -0
- tests/regscale/test_authorization.py +65 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""standard python imports"""
|
|
4
|
+
import glob
|
|
5
|
+
import logging
|
|
6
|
+
from datetime import datetime, date
|
|
7
|
+
from typing import Literal, Optional
|
|
8
|
+
|
|
9
|
+
import click
|
|
10
|
+
from dateutil.relativedelta import relativedelta
|
|
11
|
+
|
|
12
|
+
from regscale.core.app.utils.regscale_utils import check_module_id
|
|
13
|
+
from regscale.models import regscale_id, regscale_module
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger("regscale")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@click.group()
|
|
19
|
+
def fedramp():
|
|
20
|
+
"""Performs bulk processing of FedRAMP files (Upload trusted data only)."""
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# FedRAMP Docx Support
|
|
24
|
+
@fedramp.command(context_settings={"show_default": True})
|
|
25
|
+
@click.option(
|
|
26
|
+
"--file_path",
|
|
27
|
+
"-f",
|
|
28
|
+
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
29
|
+
required=True,
|
|
30
|
+
prompt="Enter the full file path of the FedRAMP (.docx) document to ingest to RegScale.",
|
|
31
|
+
help="RegScale will process and load the FedRAMP document.",
|
|
32
|
+
)
|
|
33
|
+
@click.option(
|
|
34
|
+
"--base_fedramp_profile",
|
|
35
|
+
"-pn",
|
|
36
|
+
type=click.STRING,
|
|
37
|
+
required=False,
|
|
38
|
+
help="Enter the name of the RegScale FedRAMP profile to use.",
|
|
39
|
+
default="FedRAMP - High",
|
|
40
|
+
)
|
|
41
|
+
@click.option(
|
|
42
|
+
"--base_fedramp_profile_id",
|
|
43
|
+
"-p",
|
|
44
|
+
type=click.INT,
|
|
45
|
+
required=False,
|
|
46
|
+
help="Enter the ID of the RegScale FedRAMP profile to use.",
|
|
47
|
+
)
|
|
48
|
+
@click.option(
|
|
49
|
+
"--appendix_a_file_path",
|
|
50
|
+
"-a",
|
|
51
|
+
type=click.Path(exists=True),
|
|
52
|
+
required=False,
|
|
53
|
+
prompt="Enter the full file path of the FedRAMP Appendix A (.docx) document to ingest to RegScale.",
|
|
54
|
+
help="RegScale will process and load the FedRAMP Appendix A document, used during Rev5 version import.",
|
|
55
|
+
)
|
|
56
|
+
@click.option(
|
|
57
|
+
"--save_data",
|
|
58
|
+
type=click.BOOL,
|
|
59
|
+
default=False,
|
|
60
|
+
required=False,
|
|
61
|
+
help="Whether to save the data as a JSON file.",
|
|
62
|
+
)
|
|
63
|
+
@click.option(
|
|
64
|
+
"--add_missing",
|
|
65
|
+
type=click.BOOL,
|
|
66
|
+
default=False,
|
|
67
|
+
required=False,
|
|
68
|
+
help="Whether to create missing controls from profile in the SSP.",
|
|
69
|
+
)
|
|
70
|
+
@click.option(
|
|
71
|
+
"--version",
|
|
72
|
+
"-rev",
|
|
73
|
+
type=click.Choice(["rev4", "rev5", "4", "5"], case_sensitive=False),
|
|
74
|
+
help="FedRAMP revision version.",
|
|
75
|
+
prompt="Rev4 or Rev5",
|
|
76
|
+
required=True,
|
|
77
|
+
)
|
|
78
|
+
def load_fedramp_docx(
|
|
79
|
+
file_path: click.Path,
|
|
80
|
+
base_fedramp_profile: click.STRING,
|
|
81
|
+
base_fedramp_profile_id: Optional[click.STRING],
|
|
82
|
+
save_data: click.BOOL,
|
|
83
|
+
add_missing: click.BOOL,
|
|
84
|
+
appendix_a_file_path: click.Path,
|
|
85
|
+
version: Literal["rev4", "rev5", "4", "5"],
|
|
86
|
+
):
|
|
87
|
+
"""
|
|
88
|
+
Convert a FedRAMP docx file to a RegScale SSP.
|
|
89
|
+
"""
|
|
90
|
+
if "4" in version:
|
|
91
|
+
from regscale.integrations.public.fedramp.fedramp_docx import process_fedramp_docx
|
|
92
|
+
|
|
93
|
+
logger.info(f"Processing FedRAMP document {file_path}.")
|
|
94
|
+
process_fedramp_docx(file_path, base_fedramp_profile, base_fedramp_profile_id, save_data, add_missing)
|
|
95
|
+
elif "5" in version:
|
|
96
|
+
from regscale.integrations.public.fedramp.fedramp_five import process_fedramp_docx_v5
|
|
97
|
+
|
|
98
|
+
if not base_fedramp_profile_id:
|
|
99
|
+
from regscale.integrations.public.fedramp.fedramp_common import find_profile_by_name
|
|
100
|
+
|
|
101
|
+
profile = find_profile_by_name(base_fedramp_profile) or {}
|
|
102
|
+
base_fedramp_profile_id = profile.get("id")
|
|
103
|
+
if not base_fedramp_profile_id:
|
|
104
|
+
from regscale.core.app.utils.app_utils import error_and_exit
|
|
105
|
+
|
|
106
|
+
error_and_exit(
|
|
107
|
+
f"Unable to find profile with name {base_fedramp_profile}. Please provide a profile ID "
|
|
108
|
+
"by using the -p flag."
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
process_fedramp_docx_v5(file_path, base_fedramp_profile_id, save_data, add_missing, appendix_a_file_path) # type: ignore
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@fedramp.command()
|
|
115
|
+
@click.option(
|
|
116
|
+
"--file_path",
|
|
117
|
+
"-f",
|
|
118
|
+
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
119
|
+
required=True,
|
|
120
|
+
prompt="Enter the file name of the FedRAMP JSON document to process.",
|
|
121
|
+
help="RegScale will process and load the FedRAMP document.",
|
|
122
|
+
)
|
|
123
|
+
@click.option(
|
|
124
|
+
"--submission_date",
|
|
125
|
+
type=click.DateTime(formats=["%Y-%m-%d"]),
|
|
126
|
+
default=str(date.today()),
|
|
127
|
+
required=True,
|
|
128
|
+
prompt="Enter the submission date of this FedRAMP document.",
|
|
129
|
+
help=f"Submission date, default is today: {date.today()}.",
|
|
130
|
+
)
|
|
131
|
+
@click.option(
|
|
132
|
+
"--expiration_date",
|
|
133
|
+
type=click.DateTime(formats=["%Y-%m-%d"]),
|
|
134
|
+
default=str((datetime.now() + relativedelta(years=3)).date()),
|
|
135
|
+
required=True,
|
|
136
|
+
prompt="Enter the expiration date of this FedRAMP document.",
|
|
137
|
+
help=f"Expiration date, default is {str((datetime.now() + relativedelta(years=3)).date())}.",
|
|
138
|
+
)
|
|
139
|
+
def load_fedramp_oscal(file_path, submission_date, expiration_date):
|
|
140
|
+
"""
|
|
141
|
+
[BETA] Convert a FedRAMP OSCAL SSP json file to a RegScale SSP.
|
|
142
|
+
"""
|
|
143
|
+
from regscale.integrations.public.fedramp.fedramp_common import process_fedramp_oscal_ssp
|
|
144
|
+
|
|
145
|
+
if not expiration_date:
|
|
146
|
+
today_dt = date.today()
|
|
147
|
+
expiration_date = date(today_dt.year + 3, today_dt.month, today_dt.day)
|
|
148
|
+
|
|
149
|
+
process_fedramp_oscal_ssp(file_path, submission_date, expiration_date)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@fedramp.command()
|
|
153
|
+
@click.option(
|
|
154
|
+
"--file-path",
|
|
155
|
+
"-f",
|
|
156
|
+
type=click.Path(exists=True),
|
|
157
|
+
help="File to upload to RegScale.",
|
|
158
|
+
required=True,
|
|
159
|
+
)
|
|
160
|
+
@click.option(
|
|
161
|
+
"--catalogue_id",
|
|
162
|
+
"-c",
|
|
163
|
+
type=click.INT,
|
|
164
|
+
help="The RegScale ID # of the catalogue to use for controls in the profile.",
|
|
165
|
+
required=True,
|
|
166
|
+
)
|
|
167
|
+
def import_fedramp_ssp_xml(file_path: click.Path, catalogue_id: click.INT):
|
|
168
|
+
"""
|
|
169
|
+
Import FedRAMP Revision 4/5 SSP XML into RegScale
|
|
170
|
+
"""
|
|
171
|
+
from collections import deque
|
|
172
|
+
|
|
173
|
+
from regscale.integrations.public.fedramp.import_fedramp_r4_ssp import parse_and_load_xml_rev4
|
|
174
|
+
from regscale.integrations.public.fedramp.ssp_logger import SSPLogger
|
|
175
|
+
|
|
176
|
+
logger = SSPLogger()
|
|
177
|
+
logger.info(event_msg="Importing FedRAMP SSP XML into RegScale")
|
|
178
|
+
parse_generator = parse_and_load_xml_rev4(None, str(file_path), catalogue_id)
|
|
179
|
+
deque(parse_generator, maxlen=1)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
@fedramp.command(context_settings={"show_default": True})
|
|
183
|
+
@click.option(
|
|
184
|
+
"--appendix_a_file_path",
|
|
185
|
+
"-a",
|
|
186
|
+
type=click.Path(exists=True),
|
|
187
|
+
required=False,
|
|
188
|
+
prompt="Enter the full file path of the FedRAMP Appendix A (.docx) document to ingest to RegScale.",
|
|
189
|
+
help="RegScale will process and load the FedRAMP Appendix A document.",
|
|
190
|
+
)
|
|
191
|
+
@click.option(
|
|
192
|
+
"--base_fedramp_profile_id",
|
|
193
|
+
"-p",
|
|
194
|
+
type=click.INT,
|
|
195
|
+
required=True,
|
|
196
|
+
help="The RegScale FedRAMP profile ID to use.",
|
|
197
|
+
)
|
|
198
|
+
@click.option(
|
|
199
|
+
"--add_missing",
|
|
200
|
+
type=click.BOOL,
|
|
201
|
+
default=False,
|
|
202
|
+
required=False,
|
|
203
|
+
help="Whether to create missing controls from profile in the SSP.",
|
|
204
|
+
)
|
|
205
|
+
@click.option("--regscale_id", "-i", help="Regscale id to push inventory to in RegScale.", required=True)
|
|
206
|
+
def load_fedramp_appendix_a(
|
|
207
|
+
appendix_a_file_path: str, base_fedramp_profile_id: int, add_missing: click.BOOL, regscale_id: int # noqa
|
|
208
|
+
):
|
|
209
|
+
"""
|
|
210
|
+
Convert a FedRAMP Appendix A docx file to a RegScale SSP.
|
|
211
|
+
"""
|
|
212
|
+
from regscale.integrations.public.fedramp.fedramp_five import load_appendix_a as _load_appendix_a
|
|
213
|
+
|
|
214
|
+
_load_appendix_a(
|
|
215
|
+
appendix_a_file_name=appendix_a_file_path,
|
|
216
|
+
parent_id=regscale_id,
|
|
217
|
+
profile_id=base_fedramp_profile_id,
|
|
218
|
+
add_missing=add_missing,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
@fedramp.command(name="import_fedramp_inventory")
|
|
223
|
+
@click.option(
|
|
224
|
+
"--path",
|
|
225
|
+
"-f",
|
|
226
|
+
type=click.Path(exists=True, dir_okay=True),
|
|
227
|
+
help="The File OR Folder Path to the inventory .xlsx files.",
|
|
228
|
+
prompt="Inventory .xlsx folder location",
|
|
229
|
+
required=True,
|
|
230
|
+
)
|
|
231
|
+
@click.option(
|
|
232
|
+
"--sheet_name",
|
|
233
|
+
"-s",
|
|
234
|
+
type=click.STRING,
|
|
235
|
+
help="Sheet name in the inventory .xlsx file to parse.",
|
|
236
|
+
default="Inventory",
|
|
237
|
+
required=False,
|
|
238
|
+
)
|
|
239
|
+
@click.option(
|
|
240
|
+
"--regscale_id",
|
|
241
|
+
"-i",
|
|
242
|
+
type=click.INT,
|
|
243
|
+
help="RegScale Record ID to update.",
|
|
244
|
+
prompt="RegScale Record ID",
|
|
245
|
+
required=True,
|
|
246
|
+
)
|
|
247
|
+
@click.option(
|
|
248
|
+
"--regscale_module",
|
|
249
|
+
"-m",
|
|
250
|
+
type=click.STRING,
|
|
251
|
+
help="RegScale Module for the provided ID.",
|
|
252
|
+
prompt="RegScale Record Module",
|
|
253
|
+
required=True,
|
|
254
|
+
)
|
|
255
|
+
@click.option(
|
|
256
|
+
"--version",
|
|
257
|
+
"-rev",
|
|
258
|
+
type=click.Choice(["rev4", "rev5", "4", "5"], case_sensitive=False),
|
|
259
|
+
help="FedRAMP revision version.",
|
|
260
|
+
prompt="Rev4 or Rev5",
|
|
261
|
+
required=True,
|
|
262
|
+
)
|
|
263
|
+
def import_fedramp_inventory(
|
|
264
|
+
path: click.Path,
|
|
265
|
+
sheet_name: str,
|
|
266
|
+
regscale_id: int,
|
|
267
|
+
regscale_module: str,
|
|
268
|
+
version: Literal["rev4", "rev5", "4", "5"],
|
|
269
|
+
): # noqa
|
|
270
|
+
"""
|
|
271
|
+
Import FedRAMP rev4 or rev5 Inventory Workbook into RegScale
|
|
272
|
+
"""
|
|
273
|
+
import os
|
|
274
|
+
from pathlib import Path
|
|
275
|
+
|
|
276
|
+
from regscale.integrations.public.fedramp.import_workbook import upload
|
|
277
|
+
|
|
278
|
+
link_path = Path(path)
|
|
279
|
+
if link_path.is_dir():
|
|
280
|
+
files = glob.glob(str(link_path) + os.sep + "*.xlsx")
|
|
281
|
+
if not files:
|
|
282
|
+
logger.warning("No files found in the folder.")
|
|
283
|
+
return
|
|
284
|
+
for file in files:
|
|
285
|
+
try:
|
|
286
|
+
upload(
|
|
287
|
+
inventory=file,
|
|
288
|
+
sheet_name=sheet_name,
|
|
289
|
+
record_id=regscale_id,
|
|
290
|
+
module=regscale_module,
|
|
291
|
+
version=version,
|
|
292
|
+
)
|
|
293
|
+
except Exception as e:
|
|
294
|
+
logger.error(f"Failed to parse inventory from {file}: {e}")
|
|
295
|
+
continue
|
|
296
|
+
elif link_path.is_file():
|
|
297
|
+
try:
|
|
298
|
+
upload(
|
|
299
|
+
inventory=str(link_path),
|
|
300
|
+
sheet_name=sheet_name,
|
|
301
|
+
record_id=regscale_id,
|
|
302
|
+
module=regscale_module,
|
|
303
|
+
version=version,
|
|
304
|
+
)
|
|
305
|
+
except Exception as e:
|
|
306
|
+
logger.error(f"Failed to parse inventory from {link_path}: {e}")
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
@fedramp.command(name="import-poam")
|
|
310
|
+
@click.option(
|
|
311
|
+
"--file_path",
|
|
312
|
+
"-f",
|
|
313
|
+
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
314
|
+
required=True,
|
|
315
|
+
prompt="Enter the file path containing FedRAMP (.xlsx) POAM workbook to ingest to RegScale.",
|
|
316
|
+
help="RegScale will process and load the FedRAMP POAMs as RegScale issues.",
|
|
317
|
+
)
|
|
318
|
+
@regscale_id()
|
|
319
|
+
@regscale_module()
|
|
320
|
+
@click.option(
|
|
321
|
+
"--poam_id_column",
|
|
322
|
+
"-pc",
|
|
323
|
+
type=click.STRING,
|
|
324
|
+
help="The column name containing the POAM ID.",
|
|
325
|
+
required=False,
|
|
326
|
+
default="POAM ID",
|
|
327
|
+
)
|
|
328
|
+
@click.option(
|
|
329
|
+
"--resolve_empty_status_date",
|
|
330
|
+
"-rs",
|
|
331
|
+
type=click.Choice(["CURRENT_DATE", "USE_NEIGHBOR"], case_sensitive=False),
|
|
332
|
+
default="CURRENT_DATE",
|
|
333
|
+
help="Choose between 'CURRENT_DATE' (default) or 'USE_NEIGHBOR'.",
|
|
334
|
+
)
|
|
335
|
+
def import_fedramp_poam_template(
|
|
336
|
+
file_path: click.Path, regscale_id: int, regscale_module: str, poam_id_column: str, resolve_empty_status_date: str
|
|
337
|
+
) -> None:
|
|
338
|
+
"""
|
|
339
|
+
Import a FedRamp POA&M document to RegScale issues.
|
|
340
|
+
"""
|
|
341
|
+
# suppress UserWarnings from openpyxl
|
|
342
|
+
import warnings
|
|
343
|
+
|
|
344
|
+
from regscale.integrations.public.fedramp.poam.scanner import FedrampPoamIntegration
|
|
345
|
+
|
|
346
|
+
warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl")
|
|
347
|
+
|
|
348
|
+
if not check_module_id(parent_id=regscale_id, parent_module=regscale_module):
|
|
349
|
+
raise ValueError(f"RegScale ID {regscale_id} is not a valid member of {regscale_module}.")
|
|
350
|
+
|
|
351
|
+
# Initialize the FedRAMP integration
|
|
352
|
+
integration = FedrampPoamIntegration(plan_id=regscale_id, file_path=str(file_path))
|
|
353
|
+
integration.poam_id_header = poam_id_column
|
|
354
|
+
integration.file_path = str(file_path)
|
|
355
|
+
|
|
356
|
+
# First sync assets
|
|
357
|
+
integration.sync_assets(
|
|
358
|
+
plan_id=regscale_id,
|
|
359
|
+
file_path=str(file_path),
|
|
360
|
+
poam_sheets=integration.poam_sheets,
|
|
361
|
+
workbook=integration.workbook,
|
|
362
|
+
validators=integration.validators,
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
# Then process the POAM findings
|
|
366
|
+
integration.sync_findings(
|
|
367
|
+
plan_id=regscale_id,
|
|
368
|
+
file_path=str(file_path),
|
|
369
|
+
poam_sheets=integration.poam_sheets,
|
|
370
|
+
workbook=integration.workbook,
|
|
371
|
+
validators=integration.validators,
|
|
372
|
+
resolve_empty_status_date=resolve_empty_status_date,
|
|
373
|
+
close_outdated_findings=False,
|
|
374
|
+
)
|
|
375
|
+
|
|
376
|
+
# Ensure workbook is closed
|
|
377
|
+
if integration.workbook:
|
|
378
|
+
integration.workbook.close()
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
@fedramp.command(name="import-drf")
|
|
382
|
+
@click.option(
|
|
383
|
+
"--file_path",
|
|
384
|
+
"-f",
|
|
385
|
+
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
386
|
+
required=True,
|
|
387
|
+
prompt="Enter the file path containing FedRAMP (.xlsx) POAM workbook to ingest to RegScale.",
|
|
388
|
+
help="RegScale will process and load the FedRAMP POAMs as RegScale issues.",
|
|
389
|
+
)
|
|
390
|
+
@regscale_id()
|
|
391
|
+
@regscale_module()
|
|
392
|
+
def import_drf(file_path: click.Path, regscale_id: int, regscale_module: str) -> None:
|
|
393
|
+
"""
|
|
394
|
+
Import a FedRamp DRF document to RegScale issues.
|
|
395
|
+
"""
|
|
396
|
+
# suppress UserWarnings from openpyxl
|
|
397
|
+
import warnings
|
|
398
|
+
|
|
399
|
+
from regscale.models.integration_models.drf import DRF
|
|
400
|
+
|
|
401
|
+
warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl")
|
|
402
|
+
|
|
403
|
+
if not check_module_id(parent_id=regscale_id, parent_module=regscale_module):
|
|
404
|
+
raise ValueError(f"RegScale ID {regscale_id} is not a valid member of {regscale_module}.")
|
|
405
|
+
DRF(file_path=file_path, module_id=regscale_id, module=regscale_module)
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
@fedramp.command(name="import-cis-crm")
|
|
409
|
+
@click.option(
|
|
410
|
+
"--file_path",
|
|
411
|
+
"-f",
|
|
412
|
+
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
413
|
+
help="The file path to the FedRAMP CIS CRM .xlsx file.",
|
|
414
|
+
prompt="FedRAMP CIS CRM .xlsx file location",
|
|
415
|
+
required=True,
|
|
416
|
+
)
|
|
417
|
+
@click.option(
|
|
418
|
+
"--version",
|
|
419
|
+
"-rev",
|
|
420
|
+
type=click.Choice(["rev4", "rev5", "4", "5"], case_sensitive=False),
|
|
421
|
+
help="FedRAMP revision version.",
|
|
422
|
+
prompt="Rev4 or Rev5",
|
|
423
|
+
required=True,
|
|
424
|
+
)
|
|
425
|
+
@click.option(
|
|
426
|
+
"--cis_sheet_name",
|
|
427
|
+
"-cis",
|
|
428
|
+
type=click.STRING,
|
|
429
|
+
help="CIS sheet name in the FedRAMP CIS CRM .xlsx to parse.",
|
|
430
|
+
prompt="CIS Sheet Name",
|
|
431
|
+
default="CIS Worksheet",
|
|
432
|
+
required=True,
|
|
433
|
+
)
|
|
434
|
+
@click.option(
|
|
435
|
+
"--regscale_ssp_id",
|
|
436
|
+
"-i",
|
|
437
|
+
type=click.INT,
|
|
438
|
+
help="The ID number from RegScale of the System Security Plan.",
|
|
439
|
+
prompt="Enter RegScale System Security Plan ID",
|
|
440
|
+
required=True,
|
|
441
|
+
)
|
|
442
|
+
@click.option(
|
|
443
|
+
"--crm_sheet_name",
|
|
444
|
+
"-crm",
|
|
445
|
+
type=click.STRING,
|
|
446
|
+
help="CRM sheet name in the FedRAMP CIS CRM .xlsx to parse.",
|
|
447
|
+
required=False,
|
|
448
|
+
)
|
|
449
|
+
@click.option(
|
|
450
|
+
"--leveraged_auth_id",
|
|
451
|
+
"-l",
|
|
452
|
+
type=click.INT,
|
|
453
|
+
help="RegScale Leveraged Authorization ID #, if none provided, one will be created.",
|
|
454
|
+
required=False,
|
|
455
|
+
default=0,
|
|
456
|
+
)
|
|
457
|
+
def import_ciscrm(
|
|
458
|
+
file_path: click.Path,
|
|
459
|
+
version: str,
|
|
460
|
+
cis_sheet_name: str,
|
|
461
|
+
crm_sheet_name: Optional[click.STRING],
|
|
462
|
+
regscale_ssp_id: int,
|
|
463
|
+
leveraged_auth_id: int = 0,
|
|
464
|
+
):
|
|
465
|
+
"""
|
|
466
|
+
[BETA] Import FedRAMP Rev5 CIS/CRM Workbook into a RegScale System Security Plan.
|
|
467
|
+
"""
|
|
468
|
+
|
|
469
|
+
from regscale.integrations.public.fedramp.fedramp_cis_crm import parse_and_import_ciscrm
|
|
470
|
+
|
|
471
|
+
version_literal: Literal["rev4", "rev5", "4", "5"] = version # type: ignore
|
|
472
|
+
parse_and_import_ciscrm(
|
|
473
|
+
file_path=file_path,
|
|
474
|
+
version=version_literal, # type: ignore
|
|
475
|
+
cis_sheet_name=cis_sheet_name,
|
|
476
|
+
crm_sheet_name=crm_sheet_name,
|
|
477
|
+
regscale_ssp_id=regscale_ssp_id,
|
|
478
|
+
leveraged_auth_id=leveraged_auth_id,
|
|
479
|
+
)
|