ethyca-fides 2.69.1rc0__py2.py3-none-any.whl → 2.76.0rc2__py2.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.
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/METADATA +9 -6
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/RECORD +488 -361
- fides/_version.py +3 -3
- fides/api/alembic/alembic.ini +5 -1
- fides/api/alembic/migrations/env.py +7 -1
- fides/api/alembic/migrations/versions/0eef0016cf06_adding_oauth2_config_for_.py +69 -0
- fides/api/alembic/migrations/versions/303287c70600_migrate_resource_type_from_enum_to_.py +99 -0
- fides/api/alembic/migrations/versions/30369bb8ae01_add_webmonitorgroupjob_model.py +67 -0
- fides/api/alembic/migrations/versions/3efe14d4469a_adds_new_experience_configs_for_vendor_.py +79 -0
- fides/api/alembic/migrations/versions/4bfbeff34611_add_polling_status.py +68 -0
- fides/api/alembic/migrations/versions/4d8c0fcc5771_adding_default_system_groups.py +78 -0
- fides/api/alembic/migrations/versions/5fa78b1f324d_add_event_audit_table.py +82 -0
- fides/api/alembic/migrations/versions/65a1bc82ae09_adds_experience_config_for_delete_.py +53 -0
- fides/api/alembic/migrations/versions/67d0e389b003_update_consentstatus_enum.py +47 -0
- fides/api/alembic/migrations/versions/795f46f656c0_migrate_field_type_from_enum_to_string.py +61 -0
- fides/api/alembic/migrations/versions/7db29f9cd77b_create_new_sub_request_table.py +95 -0
- fides/api/alembic/migrations/versions/918aefc950c9_create_digest_conditional_dependencies.py +125 -0
- fides/api/alembic/migrations/versions/9caf76161e55_make_user_assigned_data_uses_nullable_.py +64 -0
- fides/api/alembic/migrations/versions/9e0dcbf67b9f_add_digest_config.py +84 -0
- fides/api/alembic/migrations/versions/a55e12c2c2df_add_tagging_instructions_to_data_.py +29 -0
- fides/api/alembic/migrations/versions/a8e0c016afd_add_classification_benchmark_table.py +126 -0
- fides/api/alembic/migrations/versions/b97e92b038d2_add_digest_execution_model.py +117 -0
- fides/api/alembic/migrations/versions/b9bfa12c167b_add_not_applicable_to_asset_consentstatus.py +46 -0
- fides/api/alembic/migrations/versions/c09e76282dd1_add_privacy_request_duplication_cols.py +64 -0
- fides/api/alembic/migrations/versions/cd8649be3a2b_add_classifications_and_user_assigned_.py +74 -0
- fides/api/alembic/migrations/versions/e2cda8d6abc3_add_dismissed_in_activity_view_to_.py +29 -0
- fides/api/alembic/migrations/versions/f108fa05c579_adds_optional_duration_field_to_assets.py +28 -0
- fides/api/alembic/migrations/versions/f36ce1bde293_add_system_groups.py +132 -0
- fides/api/alembic/migrations/versions/fd7571bef683_adds_new_fields_to_messagingconfig_for_.py +31 -0
- fides/api/alembic/migrations/versions/xx_2025_10_17_1603_5093e92e2a5a_add_consent_data_v3_to_the_database.py +72 -0
- fides/api/alembic/migrations/versions/xx_2025_10_27_1834_67f0f2f4748e_adding_identity_definition_model.py +45 -0
- fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
- fides/api/alembic/migrations/versions/xx_2025_11_05_0200_f1a2b3c4d5e6_create_staged_resource_error_table.py +82 -0
- fides/api/alembic/migrations/versions/xx_2025_11_07_1709_56fe6fad2d89_add_notice_display_order.py +47 -0
- fides/api/alembic/migrations/versions/xx_2025_11_10_1200_a1b2c3d4e5f6_add_test_datastore_to_connectiontype.py +53 -0
- fides/api/alembic/migrations/versions/xx_2025_11_11_1317_7d82c8fc4c34_store_saas_template_datasets.py +68 -0
- fides/api/alembic/migrations/versions/xx_2025_11_12_1430_b2c3d4e5f6a7_add_default_identity_definitions.py +81 -0
- fides/api/alembic/migrations/versions/xx_2025_11_25_1854_3ff6449c099e_add_index_on_providedidentity_privacy_.py +50 -0
- fides/api/api/v1/api.py +2 -0
- fides/api/api/v1/endpoints/admin.py +39 -0
- fides/api/api/v1/endpoints/connection_endpoints.py +191 -47
- fides/api/api/v1/endpoints/connector_template_endpoints.py +167 -0
- fides/api/api/v1/endpoints/generic_overrides.py +90 -15
- fides/api/api/v1/endpoints/messaging_endpoints.py +164 -34
- fides/api/api/v1/endpoints/pre_approval_webhook_endpoints.py +5 -5
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +231 -46
- fides/api/api/v1/endpoints/saas_config_endpoints.py +63 -92
- fides/api/api/v1/endpoints/storage_endpoints.py +5 -1
- fides/api/api/v1/endpoints/system.py +157 -100
- fides/api/api/v1/endpoints/user_endpoints.py +17 -4
- fides/api/app_setup.py +1 -3
- fides/api/common_exceptions.py +8 -0
- fides/api/db/base.py +8 -0
- fides/api/db/crud.py +30 -2
- fides/api/db/database.py +261 -4
- fides/api/db/safe_crud.py +377 -0
- fides/api/db/seed.py +35 -1
- fides/api/email_templates/get_email_template.py +3 -0
- fides/api/email_templates/template_names.py +1 -0
- fides/api/email_templates/templates/external_user_welcome.html +9 -5
- fides/api/email_templates/templates/manual_task_digest.html +316 -0
- fides/api/main.py +2 -0
- fides/api/migrations/post_upgrade_index_creation.py +20 -0
- fides/api/models/asset.py +17 -1
- fides/api/models/attachment.py +1 -0
- fides/api/models/conditional_dependency/__init__.py +0 -0
- fides/api/models/conditional_dependency/conditional_dependency_base.py +311 -0
- fides/api/models/connection_oauth_credentials.py +57 -0
- fides/api/models/connectionconfig.py +11 -1
- fides/api/models/detection_discovery/__init__.py +4 -0
- fides/api/models/detection_discovery/classification_benchmark.py +140 -0
- fides/api/models/detection_discovery/core.py +78 -3
- fides/api/models/detection_discovery/monitor_task.py +3 -1
- fides/api/models/detection_discovery/staged_resource_error.py +25 -0
- fides/api/models/detection_discovery/web_monitor.py +61 -0
- fides/api/models/digest/__init__.py +16 -0
- fides/api/models/digest/conditional_dependencies.py +275 -0
- fides/api/models/digest/digest_config.py +110 -0
- fides/api/models/digest/digest_execution.py +142 -0
- fides/api/models/event_audit.py +85 -0
- fides/api/models/experience_notices.py +6 -1
- fides/api/models/fides_user.py +9 -0
- fides/api/models/identity_definition.py +66 -0
- fides/api/models/location_regulation_selections.py +22 -0
- fides/api/models/manual_task/conditional_dependency.py +29 -87
- fides/api/models/manual_webhook.py +17 -6
- fides/api/models/messaging.py +30 -10
- fides/api/models/messaging_template.py +14 -0
- fides/api/models/policy.py +27 -0
- fides/api/models/privacy_experience.py +41 -0
- fides/api/models/privacy_notice.py +196 -13
- fides/api/models/privacy_preference.py +2 -0
- fides/api/models/privacy_request/duplicate_group.py +84 -0
- fides/api/models/privacy_request/privacy_request.py +154 -8
- fides/api/models/privacy_request/provided_identity.py +22 -1
- fides/api/models/privacy_request/request_task.py +98 -1
- fides/api/models/privacy_request/webhook.py +3 -1
- fides/api/models/saas_template_dataset.py +63 -0
- fides/api/models/sql_models.py +161 -7
- fides/api/models/system_group.py +85 -0
- fides/api/models/taxonomy.py +91 -9
- fides/api/models/v3/__init__.py +0 -0
- fides/api/models/v3/privacy_preferences.py +85 -0
- fides/api/models/worker_task.py +8 -0
- fides/api/oauth/roles.py +4 -0
- fides/api/schemas/application_config.py +32 -1
- fides/api/schemas/connection_configuration/connection_config.py +1 -30
- fides/api/schemas/connection_configuration/connection_oauth_config.py +42 -0
- fides/api/schemas/connection_configuration/connection_secrets_mongodb.py +15 -3
- fides/api/schemas/connection_configuration/connection_secrets_mssql.py +5 -0
- fides/api/schemas/messaging/messaging.py +49 -66
- fides/api/schemas/messaging/messaging_secrets_docs_only.py +1 -1
- fides/api/schemas/messaging/shared_schemas.py +102 -0
- fides/api/schemas/oauth.py +2 -1
- fides/api/schemas/privacy_center_config.py +29 -5
- fides/api/schemas/privacy_request.py +44 -7
- fides/api/schemas/saas/async_polling_configuration.py +81 -0
- fides/api/schemas/saas/connector_template.py +14 -0
- fides/api/schemas/saas/saas_config.py +12 -20
- fides/api/schemas/system.py +8 -0
- fides/api/schemas/taxonomy_extensions.py +8 -0
- fides/api/schemas/user.py +2 -2
- fides/api/service/async_dsr/handlers/__init__.py +0 -0
- fides/api/service/async_dsr/handlers/polling_attachment_handler.py +155 -0
- fides/api/service/async_dsr/handlers/polling_request_handler.py +88 -0
- fides/api/service/async_dsr/handlers/polling_response_handler.py +261 -0
- fides/api/service/async_dsr/handlers/polling_sub_request_handler.py +123 -0
- fides/api/service/async_dsr/strategies/__init__.py +0 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy.py +52 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_callback.py +199 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_factory.py +72 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +691 -0
- fides/api/service/async_dsr/utils.py +130 -0
- fides/api/service/connectors/base_erasure_email_connector.py +7 -0
- fides/api/service/connectors/bigquery_connector.py +34 -16
- fides/api/service/connectors/fides/fides_client.py +63 -1
- fides/api/service/connectors/http_connector.py +48 -12
- fides/api/service/connectors/microsoft_sql_server_connector.py +6 -1
- fides/api/service/connectors/mongodb_connector.py +74 -9
- fides/api/service/connectors/query_configs/saas_query_config.py +160 -79
- fides/api/service/connectors/saas/connector_registry_service.py +42 -135
- fides/api/service/connectors/saas_connector.py +116 -76
- fides/api/service/connectors/sql_connector.py +14 -4
- fides/api/service/deps.py +25 -2
- fides/api/service/messaging/message_dispatch_service.py +98 -20
- fides/api/service/messaging/messaging_crud_service.py +5 -9
- fides/api/service/privacy_request/attachment_handling.py +9 -2
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +17 -9
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +41 -30
- fides/api/service/privacy_request/dsr_package/templates/clickme.html +68 -0
- fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +30 -27
- fides/api/service/privacy_request/duplication_detection.py +439 -0
- fides/api/service/privacy_request/email_batch_service.py +2 -1
- fides/api/service/privacy_request/request_runner_service.py +92 -91
- fides/api/service/privacy_request/request_service.py +74 -90
- fides/api/service/saas_request/saas_request_override_factory.py +71 -1
- fides/api/service/storage/streaming/schemas.py +27 -19
- fides/api/service/storage/streaming/smart_open_client.py +2 -2
- fides/api/service/storage/streaming/smart_open_streaming_storage.py +238 -147
- fides/api/service/storage/util.py +20 -106
- fides/api/service/strategy.py +6 -3
- fides/api/task/conditional_dependencies/privacy_request/__init__.py +0 -0
- fides/api/task/conditional_dependencies/privacy_request/convenience_fields.py +155 -0
- fides/api/task/conditional_dependencies/privacy_request/privacy_request_data.py +140 -0
- fides/api/task/conditional_dependencies/privacy_request/schemas.py +212 -0
- fides/api/task/conditional_dependencies/sql_schemas.py +301 -0
- fides/api/task/conditional_dependencies/sql_translator.py +757 -0
- fides/api/task/conditional_dependencies/util.py +111 -0
- fides/api/task/execute_request_tasks.py +34 -13
- fides/api/task/filter_results.py +35 -2
- fides/api/task/graph_runners.py +2 -32
- fides/api/task/graph_task.py +42 -12
- fides/api/task/manual/manual_task_conditional_evaluation.py +33 -28
- fides/api/task/manual/manual_task_graph_task.py +4 -1
- fides/api/task/manual/manual_task_utils.py +68 -26
- fides/api/task/scheduler_utils.py +39 -0
- fides/api/tasks/__init__.py +15 -1
- fides/api/util/cache.py +5 -1
- fides/api/util/connection_util.py +101 -218
- fides/api/util/event_audit_util.py +230 -0
- fides/api/util/filter_utils.py +0 -3
- fides/api/util/fuzzy_search_utils.py +7 -1
- fides/api/util/lock.py +13 -3
- fides/api/util/logger.py +58 -4
- fides/api/util/logger_context_utils.py +3 -1
- fides/api/util/masking_util.py +31 -0
- fides/api/util/memory_watchdog.py +118 -0
- fides/api/util/rate_limit.py +25 -7
- fides/api/util/saas_config_updater.py +76 -0
- fides/api/util/saas_util.py +28 -1
- fides/api/worker/__init__.py +6 -0
- fides/common/api/scope_registry.py +6 -7
- fides/common/api/v1/urn_registry.py +15 -3
- fides/config/__init__.py +11 -2
- fides/config/celery_settings.py +42 -0
- fides/config/config_proxy.py +10 -0
- fides/config/duplicate_detection_settings.py +31 -0
- fides/config/execution_settings.py +6 -6
- fides/config/security_settings.py +4 -1
- fides/config/utils.py +5 -0
- fides/data/language/languages.yml +2 -0
- fides/service/connection/__init__.py +0 -0
- fides/service/connection/connection_service.py +651 -0
- fides/service/dataset/dataset_service.py +39 -0
- fides/service/event_audit_service.py +109 -0
- fides/service/messaging/aws_ses_service.py +2 -4
- fides/service/messaging/messaging_service.py +75 -74
- fides/service/privacy_request/privacy_request_service.py +345 -100
- fides/service/system/__init__.py +0 -0
- fides/service/system/system_service.py +153 -0
- fides/service/taxonomy/handlers/legacy_handler.py +3 -3
- fides/service/taxonomy/taxonomy_service.py +64 -18
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-688fa865621531cc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1115-7fd171dac1eb0e51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1276.deb10ae2643f8463.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1438-8a33b3834d6e43f3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6148-59a59d5c5925344f.js → 1533-84e250d1f26e6d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1821-c1daa160f492aacf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1840-359ee056e4cf6629.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1975.78e719130cfe3fd6.js → 1975.bef017bc80e2012c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2040-70972e15960d9afe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2121.321b0fd3932164d4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2397-3434603a97f3f5d6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2921-49ed0ed897832958.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3150-da5406b80d25fe6d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3214-90ce0a366b0f461a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3377-02bf9780fd383d94.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3655-5e1ba5dd68b5ec48.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3729-31ff8ba51491bf21.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-cff30ca0844fe2b1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3931-8bedde156fe83564.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-582d9970d89deefe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4093-7e47408c28de5375.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4259.d1507e0db19cbed7.js → 4259.05038c9b78467244.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/431-e01ee730c8ad9ece.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4322-f6aeff6880726c83.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4339-04a715ab07122744.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4496-ccbce2459174e0d6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/454-d5c2c84f1a14e4f1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4589-c1d83c6a8dab4d30.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4809-a8f4a108a42f53ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4903-19c0bc07a956dfa8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4910-d990773601f794c1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5185-96423702fba70ced.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5258-4e308cca01d59367.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5487-5c3501754bf027ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/549-1bdc3e6f3264c020.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5505-43b9c39491b88e08.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5698.2135391a128cc373.js +164 -0
- fides/ui-build/static/admin/_next/static/chunks/5783-016dfcee8e49bf61.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5826-4db99ea4e5077911.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/590-be447cacf12419dd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6084-91badbc6569a0efb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6344-026cb323c1d49926.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6362-ba0e12f2fc4cad94.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6853-882889659769d7b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6882-bb1b469d7d7f5335.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-0dcf22a9aabe39c5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7170-46db82bb5b55e856.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7218-2ace8c82e3e7eb74.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7245-1cdafb35f289861b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7630-7f75ab7b8df42eb3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7654-2e9a8be02e41769a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8212-348ddd2b6933db70.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5596-bb601cbf40e47a0f.js → 9195-da717d324917b049.js} +3 -3
- fides/ui-build/static/admin/_next/static/chunks/9450-b7b7bb1d755ecf57.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9676.9fd9552ef744c717.js → 9676.1f395eeb9cc34968.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9826-1078e46f3ac0b688.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9911-ece086f2230e34f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-471a6b18e712f050.js → 404-800be6996aaa999c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-fcdad91f6f66292b.js → _app-de4b578c904df772.js} +57 -220
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-f12020b82dd4bd1a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-a911b7990371704d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-ad585b79953c2753.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-406170eaae4329c6.js → add-vendors-bb263d394ca1c8fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-6907c368d8611c44.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-f80cf2d3966816fd.js → [id]-c32f381af358149b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-e74cb5ea87f15b40.js → new-6efb3c069d8b47dd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-1975c529905eea9b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-b378576cba255609.js → [id]-b05331178928ab52.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2ca1de7b88094ab0.js → new-516834e930bb0d0d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-985717f2565f9d9d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-226efa1dcd41437f.js → properties-2be773e08498e40c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-850afb74f4192e87.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-b63d1e395d879b86.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-5b28f0f674ea87bd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-04cfe2cfba7b7cd8.js → [projectUrn]-676177e2f3c9c2a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-794906929efb8e1d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-3ccbf7c0d06507b9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-1ea0b24d306b1e67.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-d4861a4a218bb65a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore-4498881c26f1458d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure/[monitorId]-66bd265044daf97d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure-c9c79fa8576a4f77.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-60cacc3232c2eead.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-437bd64a3016de36.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website-5b3e0009d442bc3f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8349248c2da970a6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6919a1d6cadaa46b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-8f736b078e9842da.js → [resourceUrn]-1a50d421897d3da1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-eb814e3c22807871.js → detection-49509414a15e8393.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6875b7783fcfda2f.js → [resourceUrn]-1a1bb80b586d0c0f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-172dbd7740e212ca.js → discovery-49de61df1e8e7fba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c2719f5cff20c0f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-dfd71c1e9c458b89.js → [...subfieldNames]-415015aebab60436.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-7cdc42ec5493b83d.js → [collectionName]-5accb09715b5122d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-aebecca1d8ec5f98.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-9551a82ddec9f909.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-72f8fe47beef0f09.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-3a8aa3f633528e88.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-87512616f35ec6da.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-2f1bf4eac7aa55fd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-1f4335dca5c09860.js → fides-js-docs-5235760b3e508d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-8d67cd2872cb682a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-7a631df29cd0e31a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-ea3bc43cdaf273de.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-5d8632bba1b81cd4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/[id]-92e01822ecde8fb8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/new-1256cf6d3f6794e0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-0daac00911d27617.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/[key]-2d976fe5e8ba0a3a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/new-7766ba497b863740.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-f2880d2ed4734270.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/[id]-669f585c3458faff.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/add-template-c79e7724e4bc3899.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-891654e8dc13965c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications-40c8148244c5d347.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-1e86f3e28bd23ed6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-9b7bd8c38f02c091.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-b18a53a940cf9e19.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-6d028d7450e77578.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-8399083ee2cd8cc2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-0a910125cdb2b3b8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-acc90b6f7fe915cb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-bbc42026f2685438.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-c08ca6ad21c99799.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-77c2db582f8823bc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-e784c05d056b2371.js → [id]-74ccea4868408e3d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-0a7a2db148a7561a.js → add-property-7d9f09bfe9d44dfc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-da734840e4f9d04b.js → properties-cd77bc30672bb1fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-cc3bd9540132d5ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-7ce7d720107ab4b5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-68eaac2d79133679.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-6c4904c157477285.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-ae789892343c24f5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13ee1b331ced0846.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-ee4e43692336a330.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-ca51d794abfcbf25.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ecd1dc5db8e81409.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-df06f7e2f668c540.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-da0c77bd510c6c51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-950b0c115bf673d8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-2e635dcd11b78224.js → locations-7e36cb4756973a9d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a0e5ed486d24ccf3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-3cdebafb6870d3ad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-7c02e469d8c5bd74.js → regulations-159aad34f1021320.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-dbd1a64090ad0946.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-7d042497a57a3788.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-21f1172e73dfc9f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-e553161e6338ee48.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-92f52c43f522a350.js → new-efc4af017723e57a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-64452dfae2c5e614.js → [id]-b152319d67372ee4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dba8692491f7935e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/webpack-09ca52bc7beb0b43.js +1 -0
- fides/ui-build/static/admin/_next/static/css/012b10627a654d5c.css +1 -0
- fides/ui-build/static/admin/_next/static/css/05d05fc31d09638b.css +1 -0
- fides/ui-build/static/admin/_next/static/css/0fd6e0884cfcc5f3.css +1 -0
- fides/ui-build/static/admin/_next/static/css/14ba79c49597d37a.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{34a7eb08b86ddb57.css → 3d6582469f7d56e0.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/3d66bb57ddcb0978.css +1 -0
- fides/ui-build/static/admin/_next/static/css/4861ca3e088f2d05.css +1 -0
- fides/ui-build/static/admin/_next/static/css/a1800714b486e230.css +1 -0
- fides/ui-build/static/admin/_next/static/css/a1e4be9466578ef1.css +1 -0
- fides/ui-build/static/admin/_next/static/css/af32fcac7a177a0e.css +1 -0
- fides/ui-build/static/admin/_next/static/css/cb417f0587918f85.css +1 -0
- fides/ui-build/static/admin/_next/static/css/dd15c278b964de80.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{5f393dea1c0d031c.css → f89607996ad54f4b.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/f9a2a44d3d34c904.css +1 -0
- fides/ui-build/static/admin/_next/static/l2vgGUHB04Fi4oEVlVMrc/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/infrastructure/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/infrastructure.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- fides/ui-build/static/admin/lib/fides.js +3 -3
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/new-privacy-requests.html +1 -0
- fides/ui-build/static/admin/notifications/digests/[id].html +1 -0
- fides/ui-build/static/admin/notifications/digests/new.html +1 -0
- fides/ui-build/static/admin/notifications/digests.html +1 -0
- fides/ui-build/static/admin/notifications/providers/[key].html +1 -0
- fides/ui-build/static/admin/notifications/providers/new.html +1 -0
- fides/ui-build/static/admin/notifications/providers.html +1 -0
- fides/ui-build/static/admin/notifications/templates/[id].html +1 -0
- fides/ui-build/static/admin/notifications/templates/add-template.html +1 -0
- fides/ui-build/static/admin/notifications/templates.html +1 -0
- fides/ui-build/static/admin/notifications.html +1 -0
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/sandbox/privacy-notices.html +1 -0
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -0
- fides/ui-build/static/admin/settings/custom-fields/new.html +1 -0
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/api/service/async_dsr/async_dsr_service.py +0 -75
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +0 -66
- fides/ui-build/static/admin/_next/static/OmXHlY9MvjoZH9jDkAytl/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-79646e64f26d62fa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1345-5e1c5b66e25c566e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-0ca16d288fad916d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2150-930ffaf2c4718edc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/255-1bc0cbef7a59cdc6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-52328140bc420d0f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3550-d04125c828d591a1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3620-602eb74dc896d556.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3729-c17ac8031a4c4fd1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3847-230bf61b053bc706.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-ef5194cdb228beb6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-f78dec02f0d959ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3923-bb2417b8dcade7a4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-4af0a912e249d30f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4164-355644b916ae0094.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-86ad2beeb93c95c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4608-be8cba73f5d7c326.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4786-61154adf88e448e1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4808-dd4157aa72648068.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4831-fd99c0b3784de128.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4844-46324c3d848b8b6a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-b0de22a8521686ab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5487-02d00bad7c6830e0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/549-38ea1d91ee2addaa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6084-c153669d5567e242.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6419-d0c00d661b01f8fa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6853-b17673391117c976.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-5296188c19d7d0ac.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7476-45c5088baa8b66af.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-7ed6c6117775dffe.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/787-a8c7eab617e2fceb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-65674011d455af4d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-9e1ca1a4030707c5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8002-24af20d679efc04e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9046-712156d461165f56.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9729-fcf6ff4e3534e4a8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9826-dbae8dee941a7fac.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9951-a88367a129b724ba.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-ace203dfacacbdc4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-920fb469e0dda1d2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-bd0d82078e67cac3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-7207ab23bdb36ce8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-9dda4de5ec580279.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-0d4844d0b808e6e4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-28b192e2c074b0f3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-3e8bdefe714254ec.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-2c29ff7a01198f30.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-5f2d7b24804f861f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-8eb581024bc0172f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-30108b00ac769fc3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-e1ba213fb666b3f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-6d133580045abdda.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9a81d42a474e1e48.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-b6ae7adb8ef0b525.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c7390e046b2e2b7f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e12b11ba15bc3fc1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-e32fccc4ca520d2b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-7c59a6abf6ba6207.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-927b7e476c4b47d0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-cbe100d50df34285.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cce20440b177050b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-6cd8708106331b8d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4c3c413a2668df53.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-95402b5001c07ef2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-3c6dc2f6e6bae960.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-4a6d4023a7791be8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-76b204c9b98d656f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-bc0e2adf6e0d3ac7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-86ffcc1ad3fa912e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-ec04f595465bdf69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-41d309754ff0c1de.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-cab1f78cec7808f9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-eb6058221403b156.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-48500551fd6a7602.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-0f25a76dd18c5e20.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-ad6ad3e5bd72765d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-6032d82f0fc2893d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-d83e5bd52a638234.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-baf31c3e4b081046.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-6903f42a0412bfa6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-a82f3df840d5c1b5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-d06fb16487705b9d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-9495e2eb506606c7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-93a978443bf299db.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-9ecb803099082bf4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-16fdd91a81074dd1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-4cdd6001e7cb9aee.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-1914de830ce5cfc4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-f547f1f33c12faf3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-2ecc073f41628f62.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-20b1193ed76c56b0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-6e15332935f6b538.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-fbc8761ef4d55516.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-4d7827fc9c46b6b8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-9cec020f89544426.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-678e89d68dbcd94f.js +0 -1
- fides/ui-build/static/admin/_next/static/css/073713cd1eddda79.css +0 -1
- fides/ui-build/static/admin/_next/static/css/23cf870196941c9a.css +0 -1
- fides/ui-build/static/admin/_next/static/css/304c6f148886a8d4.css +0 -1
- fides/ui-build/static/admin/_next/static/css/650df9c348000a26.css +0 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +0 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +0 -1
- fides/ui-build/static/admin/messaging/[id].html +0 -1
- fides/ui-build/static/admin/messaging/add-template.html +0 -1
- fides/ui-build/static/admin/messaging.html +0 -1
- fides/ui-build/static/admin/poc/table-migration.html +0 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +0 -1
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-de704de849960f01.js → resources-81d1b50585468fb0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{OmXHlY9MvjoZH9jDkAytl → l2vgGUHB04Fi4oEVlVMrc}/_ssgManifest.js +0 -0
|
@@ -6,30 +6,17 @@ from fideslang.validation import FidesKey
|
|
|
6
6
|
from loguru import logger
|
|
7
7
|
from pydantic import Field, ValidationError
|
|
8
8
|
from sqlalchemy.orm import Session
|
|
9
|
-
from starlette.status import
|
|
10
|
-
HTTP_400_BAD_REQUEST,
|
|
11
|
-
HTTP_404_NOT_FOUND,
|
|
12
|
-
HTTP_422_UNPROCESSABLE_ENTITY,
|
|
13
|
-
)
|
|
9
|
+
from starlette.status import HTTP_404_NOT_FOUND, HTTP_422_UNPROCESSABLE_ENTITY
|
|
14
10
|
|
|
15
11
|
from fides.api.api import deps
|
|
16
12
|
from fides.api.common_exceptions import (
|
|
17
|
-
|
|
18
|
-
ConnectionException,
|
|
13
|
+
ConnectionNotFoundException,
|
|
19
14
|
KeyOrNameAlreadyExists,
|
|
15
|
+
SaaSConfigNotFoundException,
|
|
20
16
|
)
|
|
21
17
|
from fides.api.common_exceptions import ValidationError as FidesValidationError
|
|
22
|
-
from fides.api.models.connectionconfig import
|
|
23
|
-
ConnectionConfig,
|
|
24
|
-
ConnectionTestStatus,
|
|
25
|
-
ConnectionType,
|
|
26
|
-
)
|
|
18
|
+
from fides.api.models.connectionconfig import ConnectionConfig, ConnectionType
|
|
27
19
|
from fides.api.models.datasetconfig import DatasetConfig
|
|
28
|
-
from fides.api.models.manual_task import (
|
|
29
|
-
ManualTask,
|
|
30
|
-
ManualTaskParentEntityType,
|
|
31
|
-
ManualTaskType,
|
|
32
|
-
)
|
|
33
20
|
from fides.api.models.manual_webhook import AccessManualWebhook
|
|
34
21
|
from fides.api.models.privacy_request import PrivacyRequest
|
|
35
22
|
from fides.api.models.sql_models import Dataset as CtlDataset # type: ignore
|
|
@@ -38,7 +25,6 @@ from fides.api.schemas.api import BulkUpdateFailed
|
|
|
38
25
|
from fides.api.schemas.connection_configuration import (
|
|
39
26
|
ConnectionConfigSecretsSchema,
|
|
40
27
|
connection_secrets_schemas,
|
|
41
|
-
get_connection_secrets_schema,
|
|
42
28
|
)
|
|
43
29
|
from fides.api.schemas.connection_configuration.connection_config import (
|
|
44
30
|
BulkPutConnectionConfiguration,
|
|
@@ -48,23 +34,13 @@ from fides.api.schemas.connection_configuration.connection_config import (
|
|
|
48
34
|
from fides.api.schemas.connection_configuration.connection_secrets import (
|
|
49
35
|
TestStatusMessage,
|
|
50
36
|
)
|
|
51
|
-
from fides.api.schemas.connection_configuration.connection_secrets_dynamic_erasure_email import (
|
|
52
|
-
validate_dynamic_erasure_email_dataset_references,
|
|
53
|
-
)
|
|
54
|
-
from fides.api.schemas.connection_configuration.connection_secrets_saas import (
|
|
55
|
-
validate_saas_secrets_external_references,
|
|
56
|
-
)
|
|
57
|
-
from fides.api.schemas.connection_configuration.saas_config_template_values import (
|
|
58
|
-
SaasConnectionTemplateValues,
|
|
59
|
-
)
|
|
60
37
|
from fides.api.schemas.privacy_request import PrivacyRequestStatus
|
|
61
|
-
from fides.api.
|
|
62
|
-
from fides.
|
|
63
|
-
|
|
64
|
-
|
|
38
|
+
from fides.common.api.v1.urn_registry import SAAS_CONFIG
|
|
39
|
+
from fides.service.connection.connection_service import (
|
|
40
|
+
ConnectionService,
|
|
41
|
+
ConnectorTemplateNotFound,
|
|
65
42
|
)
|
|
66
|
-
from fides.
|
|
67
|
-
from fides.common.api.v1.urn_registry import CONNECTION_TYPES, SAAS_CONFIG
|
|
43
|
+
from fides.service.event_audit_service import EventAuditService
|
|
68
44
|
from fides.service.privacy_request.privacy_request_service import queue_privacy_request
|
|
69
45
|
|
|
70
46
|
# pylint: disable=too-many-nested-blocks,too-many-branches,too-many-statements
|
|
@@ -79,9 +55,8 @@ def requeue_requires_input_requests(db: Session) -> None:
|
|
|
79
55
|
lingering in a "requires_input" state.
|
|
80
56
|
"""
|
|
81
57
|
if not AccessManualWebhook.get_enabled(db):
|
|
82
|
-
for pr in PrivacyRequest.filter(
|
|
83
|
-
|
|
84
|
-
conditions=(PrivacyRequest.status == PrivacyRequestStatus.requires_input),
|
|
58
|
+
for pr in PrivacyRequest.query_without_large_columns(db).filter(
|
|
59
|
+
PrivacyRequest.status == PrivacyRequestStatus.requires_input
|
|
85
60
|
):
|
|
86
61
|
logger.info(
|
|
87
62
|
"Queuing privacy request '{} with '{}' status now that manual inputs are no longer required.",
|
|
@@ -95,7 +70,7 @@ def requeue_requires_input_requests(db: Session) -> None:
|
|
|
95
70
|
)
|
|
96
71
|
|
|
97
72
|
|
|
98
|
-
def
|
|
73
|
+
def validate_secrets_error_message() -> str:
|
|
99
74
|
return f"A SaaS config to validate the secrets is unavailable for this connection config, please add one via {SAAS_CONFIG}"
|
|
100
75
|
|
|
101
76
|
|
|
@@ -106,56 +81,30 @@ def validate_secrets(
|
|
|
106
81
|
) -> ConnectionConfigSecretsSchema:
|
|
107
82
|
"""Validate incoming connection configuration secrets."""
|
|
108
83
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
if connection_type == ConnectionType.saas and saas_config is None:
|
|
112
|
-
raise HTTPException(
|
|
113
|
-
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
114
|
-
detail=_validate_secrets_error_message(),
|
|
115
|
-
)
|
|
84
|
+
event_audit_service = EventAuditService(db)
|
|
85
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
116
86
|
|
|
117
87
|
try:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
88
|
+
return connection_service.validate_secrets(request_body, connection_config)
|
|
89
|
+
except SaaSConfigNotFoundException:
|
|
90
|
+
raise HTTPException(
|
|
91
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
92
|
+
detail=validate_secrets_error_message(),
|
|
122
93
|
)
|
|
123
|
-
|
|
94
|
+
except FidesValidationError as e:
|
|
95
|
+
# Check if the exception has the original pydantic errors attached
|
|
96
|
+
raise HTTPException(status_code=HTTP_422_UNPROCESSABLE_ENTITY, detail=e.message)
|
|
124
97
|
except ValidationError as e:
|
|
125
|
-
# Intentionally excluding the pydantic url, input, and ctx fields from the error response to hide
|
|
126
|
-
# potentially sensitive information
|
|
127
98
|
errors = e.errors(include_url=False, include_input=False)
|
|
128
99
|
for err in errors:
|
|
129
100
|
# Additionally, manually remove the context from the error message -
|
|
130
101
|
# this may contain sensitive information
|
|
131
102
|
err.pop("ctx", None)
|
|
132
|
-
|
|
133
103
|
raise HTTPException(
|
|
134
104
|
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
135
105
|
detail=jsonable_encoder(errors),
|
|
136
106
|
)
|
|
137
107
|
|
|
138
|
-
# SaaS secrets with external references must go through extra validation
|
|
139
|
-
if connection_type == ConnectionType.saas:
|
|
140
|
-
try:
|
|
141
|
-
validate_saas_secrets_external_references(db, schema, connection_secrets) # type: ignore
|
|
142
|
-
|
|
143
|
-
except FidesValidationError as e:
|
|
144
|
-
raise HTTPException(
|
|
145
|
-
status_code=HTTP_422_UNPROCESSABLE_ENTITY, detail=e.message
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
# For dynamic erasure emails we must validate the recipient email address
|
|
149
|
-
if connection_type == ConnectionType.dynamic_erasure_email:
|
|
150
|
-
try:
|
|
151
|
-
validate_dynamic_erasure_email_dataset_references(db, connection_secrets)
|
|
152
|
-
except FidesValidationError as e:
|
|
153
|
-
raise HTTPException(
|
|
154
|
-
status_code=HTTP_422_UNPROCESSABLE_ENTITY, detail=e.message
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
return connection_secrets
|
|
158
|
-
|
|
159
108
|
|
|
160
109
|
def patch_connection_configs(
|
|
161
110
|
db: Session,
|
|
@@ -166,134 +115,20 @@ def patch_connection_configs(
|
|
|
166
115
|
failed: List[BulkUpdateFailed] = []
|
|
167
116
|
logger.info("Starting bulk upsert for {} connection configuration(s)", len(configs))
|
|
168
117
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if config.key:
|
|
173
|
-
existing_connection_config = ConnectionConfig.get_by(
|
|
174
|
-
db, field="key", value=config.key
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
if config.connection_type == "saas":
|
|
178
|
-
if config.secrets:
|
|
179
|
-
# This is here rather than with the get_connection_config_or_error because
|
|
180
|
-
# it will also throw an HTTPException if validation fails and we don't want
|
|
181
|
-
# to catch it in this case.
|
|
182
|
-
if existing_connection_config:
|
|
183
|
-
config.secrets = validate_secrets(
|
|
184
|
-
db, config.secrets, existing_connection_config
|
|
185
|
-
)
|
|
186
|
-
else:
|
|
187
|
-
if not config.saas_connector_type:
|
|
188
|
-
raise HTTPException(
|
|
189
|
-
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
190
|
-
detail="saas_connector_type is missing",
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
connector_template = ConnectorRegistry.get_connector_template(
|
|
194
|
-
config.saas_connector_type
|
|
195
|
-
)
|
|
196
|
-
if not connector_template:
|
|
197
|
-
raise HTTPException(
|
|
198
|
-
status_code=HTTP_404_NOT_FOUND,
|
|
199
|
-
detail=f"SaaS connector type '{config.saas_connector_type}' is not yet available in Fides. For a list of available SaaS connectors, refer to {CONNECTION_TYPES}.",
|
|
200
|
-
)
|
|
201
|
-
try:
|
|
202
|
-
template_values = SaasConnectionTemplateValues(
|
|
203
|
-
name=config.name,
|
|
204
|
-
key=config.key,
|
|
205
|
-
description=config.description,
|
|
206
|
-
secrets=config.secrets,
|
|
207
|
-
instance_key=config.key,
|
|
208
|
-
)
|
|
209
|
-
if system:
|
|
210
|
-
connection_config = (
|
|
211
|
-
create_connection_config_from_template_no_save(
|
|
212
|
-
db,
|
|
213
|
-
connector_template,
|
|
214
|
-
template_values,
|
|
215
|
-
system_id=system.id,
|
|
216
|
-
)
|
|
217
|
-
)
|
|
218
|
-
else:
|
|
219
|
-
connection_config = (
|
|
220
|
-
create_connection_config_from_template_no_save(
|
|
221
|
-
db,
|
|
222
|
-
connector_template,
|
|
223
|
-
template_values,
|
|
224
|
-
)
|
|
225
|
-
)
|
|
226
|
-
except KeyOrNameAlreadyExists as exc:
|
|
227
|
-
raise HTTPException(
|
|
228
|
-
status_code=HTTP_400_BAD_REQUEST,
|
|
229
|
-
detail=exc.args[0],
|
|
230
|
-
)
|
|
231
|
-
except ValidationError as e:
|
|
232
|
-
# The "input" potentially contains sensitive info and the Pydantic-specific "url" is not helpful
|
|
233
|
-
errors = e.errors(include_url=False, include_input=False)
|
|
234
|
-
for err in errors:
|
|
235
|
-
# Additionally, manually remove the context from the error message -
|
|
236
|
-
# this may contain sensitive information
|
|
237
|
-
err.pop("ctx", None)
|
|
238
|
-
|
|
239
|
-
raise HTTPException(
|
|
240
|
-
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
241
|
-
detail=jsonable_encoder(errors),
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
connection_config.secrets = validate_secrets(
|
|
245
|
-
db,
|
|
246
|
-
template_values.secrets,
|
|
247
|
-
connection_config,
|
|
248
|
-
).model_dump(mode="json")
|
|
249
|
-
connection_config.save(db=db)
|
|
250
|
-
created_or_updated.append(
|
|
251
|
-
ConnectionConfigurationResponse.model_validate(
|
|
252
|
-
connection_config
|
|
253
|
-
)
|
|
254
|
-
)
|
|
255
|
-
continue
|
|
118
|
+
# Initialize the connection service
|
|
119
|
+
event_audit_service = EventAuditService(db)
|
|
120
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
256
121
|
|
|
122
|
+
for config in configs:
|
|
257
123
|
orig_data = config.model_dump(serialize_as_any=True, mode="json").copy()
|
|
258
|
-
config_dict = config.model_dump(serialize_as_any=True, exclude_unset=True)
|
|
259
|
-
config_dict.pop("saas_connector_type", None)
|
|
260
|
-
|
|
261
|
-
if existing_connection_config:
|
|
262
|
-
config_dict = {
|
|
263
|
-
key: value
|
|
264
|
-
for key, value in {
|
|
265
|
-
**existing_connection_config.__dict__,
|
|
266
|
-
**config.model_dump(serialize_as_any=True, exclude_unset=True),
|
|
267
|
-
}.items()
|
|
268
|
-
if isinstance(value, bool) or value
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
if system:
|
|
272
|
-
config_dict["system_id"] = system.id
|
|
273
124
|
|
|
274
125
|
try:
|
|
275
|
-
|
|
276
|
-
|
|
126
|
+
# Use the service to handle individual connection config processing
|
|
127
|
+
connection_response = connection_service.create_or_update_connection_config(
|
|
128
|
+
config, system
|
|
277
129
|
)
|
|
130
|
+
created_or_updated.append(connection_response)
|
|
278
131
|
|
|
279
|
-
# Automatically create a ManualTask if this is a connection config of type manual_task
|
|
280
|
-
# and it doesn't already have one
|
|
281
|
-
if (
|
|
282
|
-
connection_config.connection_type == ConnectionType.manual_task
|
|
283
|
-
and not connection_config.manual_task
|
|
284
|
-
):
|
|
285
|
-
ManualTask.create(
|
|
286
|
-
db=db,
|
|
287
|
-
data={
|
|
288
|
-
"task_type": ManualTaskType.privacy_request,
|
|
289
|
-
"parent_entity_id": connection_config.id,
|
|
290
|
-
"parent_entity_type": ManualTaskParentEntityType.connection_config,
|
|
291
|
-
},
|
|
292
|
-
)
|
|
293
|
-
|
|
294
|
-
created_or_updated.append(
|
|
295
|
-
ConnectionConfigurationResponse.model_validate(connection_config)
|
|
296
|
-
)
|
|
297
132
|
except KeyOrNameAlreadyExists as exc:
|
|
298
133
|
logger.warning(
|
|
299
134
|
"Create/update failed for connection config with key '{}': {}",
|
|
@@ -309,6 +144,29 @@ def patch_connection_configs(
|
|
|
309
144
|
data=orig_data,
|
|
310
145
|
)
|
|
311
146
|
)
|
|
147
|
+
except ConnectorTemplateNotFound as exc:
|
|
148
|
+
raise HTTPException(
|
|
149
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
150
|
+
detail=str(exc),
|
|
151
|
+
)
|
|
152
|
+
except ValidationError as e:
|
|
153
|
+
# The "input" potentially contains sensitive info and the Pydantic-specific "url" is not helpful
|
|
154
|
+
errors = e.errors(include_url=False, include_input=False)
|
|
155
|
+
for err in errors:
|
|
156
|
+
# Additionally, manually remove the context from the error message -
|
|
157
|
+
# this may contain sensitive information
|
|
158
|
+
err.pop("ctx", None)
|
|
159
|
+
|
|
160
|
+
raise HTTPException(
|
|
161
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
162
|
+
detail=jsonable_encoder(errors),
|
|
163
|
+
)
|
|
164
|
+
except ValueError as exc:
|
|
165
|
+
# Handle missing saas_connector_type and other validation errors
|
|
166
|
+
raise HTTPException(
|
|
167
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
168
|
+
detail=str(exc),
|
|
169
|
+
)
|
|
312
170
|
except Exception as e:
|
|
313
171
|
logger.warning(
|
|
314
172
|
"Create/update failed for connection config with key '{}'.", config.key
|
|
@@ -327,6 +185,12 @@ def patch_connection_configs(
|
|
|
327
185
|
# Check if possibly disabling a manual webhook here causes us to need to queue affected privacy requests
|
|
328
186
|
requeue_requires_input_requests(db)
|
|
329
187
|
|
|
188
|
+
logger.info(
|
|
189
|
+
"Completed bulk upsert for {} connection configuration(s): {} succeeded, {} failed",
|
|
190
|
+
len(configs),
|
|
191
|
+
len(created_or_updated),
|
|
192
|
+
len(failed),
|
|
193
|
+
)
|
|
330
194
|
return BulkPutConnectionConfiguration(
|
|
331
195
|
succeeded=created_or_updated,
|
|
332
196
|
failed=failed,
|
|
@@ -352,6 +216,12 @@ def delete_connection_config(db: Session, connection_key: FidesKey) -> None:
|
|
|
352
216
|
connection_config = get_connection_config_or_error(db, connection_key)
|
|
353
217
|
connection_type = connection_config.connection_type
|
|
354
218
|
logger.info("Deleting connection config with key '{}'.", connection_key)
|
|
219
|
+
|
|
220
|
+
# Initialize services for audit logging
|
|
221
|
+
event_audit_service = EventAuditService(db)
|
|
222
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
223
|
+
|
|
224
|
+
# Handle SaaS-specific cleanup
|
|
355
225
|
if connection_config.saas_config:
|
|
356
226
|
saas_dataset_fides_key = connection_config.saas_config.get("fides_key")
|
|
357
227
|
|
|
@@ -369,7 +239,8 @@ def delete_connection_config(db: Session, connection_key: FidesKey) -> None:
|
|
|
369
239
|
)
|
|
370
240
|
saas_dataset.delete(db) # type: ignore[union-attr]
|
|
371
241
|
|
|
372
|
-
|
|
242
|
+
# Use connection service to delete with audit logging
|
|
243
|
+
connection_service.delete_connection_config(connection_key)
|
|
373
244
|
|
|
374
245
|
# Access Manual Webhooks are cascade deleted if their ConnectionConfig is deleted,
|
|
375
246
|
# so we queue any privacy requests that are no longer blocked by webhooks
|
|
@@ -382,30 +253,42 @@ def connection_status(
|
|
|
382
253
|
) -> TestStatusMessage:
|
|
383
254
|
"""Connect, verify with a trivial query or API request, and report the status."""
|
|
384
255
|
|
|
385
|
-
|
|
256
|
+
event_audit_service = EventAuditService(db)
|
|
257
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
258
|
+
return connection_service.connection_status(connection_config, msg)
|
|
386
259
|
|
|
387
|
-
try:
|
|
388
|
-
status: Optional[ConnectionTestStatus] = connector.test_connection()
|
|
389
260
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
261
|
+
def update_connection_secrets(
|
|
262
|
+
connection_service: ConnectionService,
|
|
263
|
+
connection_key: FidesKey,
|
|
264
|
+
unvalidated_secrets: connection_secrets_schemas,
|
|
265
|
+
verify: Optional[bool],
|
|
266
|
+
merge_with_existing: Optional[bool] = False,
|
|
267
|
+
) -> TestStatusMessage:
|
|
268
|
+
try:
|
|
269
|
+
return connection_service.update_secrets(
|
|
270
|
+
connection_key, unvalidated_secrets, verify, merge_with_existing
|
|
271
|
+
)
|
|
272
|
+
except ConnectionNotFoundException:
|
|
273
|
+
raise HTTPException(
|
|
274
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
275
|
+
detail=f"No connection config found with key {connection_key}",
|
|
395
276
|
)
|
|
396
|
-
|
|
397
|
-
|
|
277
|
+
except SaaSConfigNotFoundException:
|
|
278
|
+
raise HTTPException(
|
|
279
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
280
|
+
detail=validate_secrets_error_message(),
|
|
398
281
|
)
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
282
|
+
except ValidationError as e:
|
|
283
|
+
errors = e.errors(include_url=False, include_input=False)
|
|
284
|
+
for err in errors:
|
|
285
|
+
# Additionally, manually remove the context from the error message -
|
|
286
|
+
# this may contain sensitive information
|
|
287
|
+
err.pop("ctx", None)
|
|
288
|
+
raise HTTPException(
|
|
289
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
290
|
+
detail=jsonable_encoder(errors),
|
|
403
291
|
)
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
return TestStatusMessage(
|
|
409
|
-
msg=msg,
|
|
410
|
-
test_status=status,
|
|
411
|
-
)
|
|
292
|
+
except FidesValidationError as e:
|
|
293
|
+
# Check if the exception has the original pydantic errors attached
|
|
294
|
+
raise HTTPException(status_code=HTTP_422_UNPROCESSABLE_ENTITY, detail=e.message)
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Any, Dict, Optional, Tuple
|
|
4
|
+
|
|
5
|
+
from fides.api.common_exceptions import NoSuchConnectionTypeSecretSchemaError
|
|
6
|
+
from fides.api.models.connectionconfig import ConnectionConfig
|
|
7
|
+
from fides.api.models.event_audit import EventAuditType
|
|
8
|
+
from fides.api.schemas.connection_configuration.connection_oauth_config import (
|
|
9
|
+
OAuthConfigSchema,
|
|
10
|
+
)
|
|
11
|
+
from fides.api.util.connection_type import get_connection_type_secret_schema
|
|
12
|
+
from fides.api.util.masking_util import mask_sensitive_fields
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def normalize_value(value: Any) -> Any:
|
|
16
|
+
"""
|
|
17
|
+
Normalize values for consistent comparison and serialization.
|
|
18
|
+
|
|
19
|
+
- Converts datetime objects to ISO strings
|
|
20
|
+
- Converts enums to their string values
|
|
21
|
+
- Converts lists of enums to lists of string values
|
|
22
|
+
- Treats None and empty strings as equivalent (both become None)
|
|
23
|
+
"""
|
|
24
|
+
# Treat None and empty strings as equivalent
|
|
25
|
+
if value == "" or value is None:
|
|
26
|
+
return None
|
|
27
|
+
if isinstance(value, datetime):
|
|
28
|
+
return value.isoformat()
|
|
29
|
+
if isinstance(value, Enum):
|
|
30
|
+
return value.value
|
|
31
|
+
if (
|
|
32
|
+
isinstance(value, list) and value and hasattr(value[0], "value")
|
|
33
|
+
): # List of enums
|
|
34
|
+
return [item.value for item in value]
|
|
35
|
+
return value
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _get_saas_connector_type(connection_config: ConnectionConfig) -> Optional[str]:
|
|
39
|
+
"""
|
|
40
|
+
Helper function to extract SaaS connector type from connection config.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
connection_config: The connection configuration
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
SaaS connector type if available, None otherwise
|
|
47
|
+
"""
|
|
48
|
+
connection_type = connection_config.connection_type.value # type: ignore[attr-defined]
|
|
49
|
+
if connection_type == "saas" and connection_config.saas_config:
|
|
50
|
+
try:
|
|
51
|
+
saas_config = connection_config.get_saas_config()
|
|
52
|
+
if saas_config:
|
|
53
|
+
return saas_config.type
|
|
54
|
+
except Exception:
|
|
55
|
+
# If SaaS config is invalid, try to get type directly from raw config
|
|
56
|
+
if (
|
|
57
|
+
isinstance(connection_config.saas_config, dict)
|
|
58
|
+
and "type" in connection_config.saas_config
|
|
59
|
+
):
|
|
60
|
+
return connection_config.saas_config["type"]
|
|
61
|
+
return None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _create_connection_event_details(
|
|
65
|
+
connection_config: ConnectionConfig,
|
|
66
|
+
operation_type: str,
|
|
67
|
+
changed_fields: Optional[set] = None,
|
|
68
|
+
) -> Dict[str, Any]:
|
|
69
|
+
"""
|
|
70
|
+
Create standardized event details for connection audit events.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
connection_config: The connection configuration
|
|
74
|
+
operation_type: Type of operation (create, update, delete)
|
|
75
|
+
changed_fields: Set of field names that changed (None means include all fields)
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Standardized event details dictionary
|
|
79
|
+
"""
|
|
80
|
+
event_details: dict[str, Any] = {
|
|
81
|
+
"operation_type": operation_type,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Define fields to exclude from audit details
|
|
85
|
+
excluded_fields = {
|
|
86
|
+
"id",
|
|
87
|
+
"created_at",
|
|
88
|
+
"updated_at",
|
|
89
|
+
"secrets",
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# Dynamically add connection config fields (only changed fields if specified)
|
|
93
|
+
configuration_changes: dict[str, Any] = {}
|
|
94
|
+
for column in connection_config.__table__.columns:
|
|
95
|
+
field_name = column.name
|
|
96
|
+
if field_name not in excluded_fields:
|
|
97
|
+
# If changed_fields is specified, only include fields that changed
|
|
98
|
+
if changed_fields is not None and field_name not in changed_fields:
|
|
99
|
+
continue
|
|
100
|
+
|
|
101
|
+
value = getattr(connection_config, field_name)
|
|
102
|
+
|
|
103
|
+
configuration_changes[field_name] = normalize_value(value)
|
|
104
|
+
|
|
105
|
+
event_details["configuration_changes"] = configuration_changes
|
|
106
|
+
return event_details
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def generate_connection_audit_event_details(
|
|
110
|
+
event_type: EventAuditType,
|
|
111
|
+
connection_config: ConnectionConfig,
|
|
112
|
+
description: Optional[str] = None,
|
|
113
|
+
changed_fields: Optional[set] = None,
|
|
114
|
+
) -> Tuple[Dict[str, Any], str]:
|
|
115
|
+
"""
|
|
116
|
+
Create an audit event for connection operations.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
event_type: Type of audit event
|
|
120
|
+
connection_config: The connection configuration
|
|
121
|
+
description: Human-readable description
|
|
122
|
+
changed_fields: Set of field names that changed (None means include all fields)
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
Created EventAudit instance
|
|
126
|
+
"""
|
|
127
|
+
# Determine operation type from event type
|
|
128
|
+
operation_type = event_type.value.split(".")[
|
|
129
|
+
-1
|
|
130
|
+
] # e.g., "created", "updated", "deleted"
|
|
131
|
+
|
|
132
|
+
# Create standardized event details
|
|
133
|
+
if operation_type == "deleted":
|
|
134
|
+
event_details = {
|
|
135
|
+
"operation_type": operation_type,
|
|
136
|
+
}
|
|
137
|
+
else:
|
|
138
|
+
event_details = _create_connection_event_details(
|
|
139
|
+
connection_config,
|
|
140
|
+
operation_type,
|
|
141
|
+
changed_fields,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Generate description if not provided
|
|
145
|
+
connection_type = connection_config.connection_type.value # type: ignore[attr-defined]
|
|
146
|
+
connector_type = _get_saas_connector_type(connection_config)
|
|
147
|
+
|
|
148
|
+
description = f"Connection {operation_type}: {connector_type if connector_type else connection_type} connection '{connection_config.key}'"
|
|
149
|
+
|
|
150
|
+
return event_details, description
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def generate_connection_secrets_event_details(
|
|
154
|
+
event_type: EventAuditType,
|
|
155
|
+
connection_config: ConnectionConfig,
|
|
156
|
+
secrets_modified: Dict[str, Any],
|
|
157
|
+
) -> Tuple[Dict[str, Any], str]:
|
|
158
|
+
"""
|
|
159
|
+
Create an audit event for connection secrets operations.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
event_type: Type of audit event (should be a connection.secrets.* event)
|
|
163
|
+
connection_config: The connection configuration
|
|
164
|
+
secrets_modified: Dict of secret field names and values that were modified
|
|
165
|
+
changed_fields: Set of field names that changed (None means include all fields)
|
|
166
|
+
description: Human-readable description
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
Created EventAudit instance
|
|
170
|
+
"""
|
|
171
|
+
# Determine operation type from event type
|
|
172
|
+
operation_type = event_type.value.split(".")[
|
|
173
|
+
-1
|
|
174
|
+
] # e.g., "created", "updated", "deleted"
|
|
175
|
+
|
|
176
|
+
# Mask the secrets using the existing masking utility
|
|
177
|
+
saas_config = connection_config.get_saas_config()
|
|
178
|
+
connection_type = connection_config.connection_type.value # type: ignore[attr-defined]
|
|
179
|
+
connection_type = (
|
|
180
|
+
saas_config.type
|
|
181
|
+
if connection_type == "saas" and saas_config
|
|
182
|
+
else connection_type
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Get the secret schema for this connection type
|
|
186
|
+
try:
|
|
187
|
+
secret_schema = None
|
|
188
|
+
|
|
189
|
+
# For HTTPS connections with OAuth config, check if we should use OAuth schema
|
|
190
|
+
if connection_type == "https" and connection_config.oauth_config:
|
|
191
|
+
# Get OAuth fields dynamically from the schema
|
|
192
|
+
oauth_schema = OAuthConfigSchema.model_json_schema()
|
|
193
|
+
oauth_fields = set(oauth_schema.get("properties", {}).keys())
|
|
194
|
+
secrets_keys = set(secrets_modified.keys())
|
|
195
|
+
|
|
196
|
+
# If we're updating OAuth fields, use OAuth schema
|
|
197
|
+
if secrets_keys.intersection(oauth_fields):
|
|
198
|
+
secret_schema = oauth_schema
|
|
199
|
+
|
|
200
|
+
# If we haven't set a schema yet, use the connection type's secret schema
|
|
201
|
+
if secret_schema is None:
|
|
202
|
+
secret_schema = get_connection_type_secret_schema(
|
|
203
|
+
connection_type=connection_type
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# Use existing masking function
|
|
207
|
+
masked_secrets = mask_sensitive_fields(secrets_modified, secret_schema)
|
|
208
|
+
except NoSuchConnectionTypeSecretSchemaError:
|
|
209
|
+
# if there is no schema, mask every secret
|
|
210
|
+
masked_secrets = {key: "**********" for key in secrets_modified}
|
|
211
|
+
|
|
212
|
+
# Create event details with masked secret values
|
|
213
|
+
event_details: dict[str, Any] = {
|
|
214
|
+
"secrets": masked_secrets,
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
# Add SaaS connector type if applicable
|
|
218
|
+
connector_type = _get_saas_connector_type(connection_config)
|
|
219
|
+
if connector_type:
|
|
220
|
+
event_details["saas_connector_type"] = connector_type
|
|
221
|
+
|
|
222
|
+
# Generate description
|
|
223
|
+
secret_names = ", ".join(secrets_modified) if secrets_modified else "secrets"
|
|
224
|
+
|
|
225
|
+
if connector_type:
|
|
226
|
+
description = f"Connection secrets {operation_type}: {connector_type} connection '{connection_config.key}' - {secret_names}"
|
|
227
|
+
else:
|
|
228
|
+
description = f"Connection secrets {operation_type}: {connection_type} connection '{connection_config.key}' - {secret_names}"
|
|
229
|
+
|
|
230
|
+
return event_details, description
|
fides/api/util/filter_utils.py
CHANGED
|
@@ -12,9 +12,6 @@ class MissingTaxonomyField(ValueError):
|
|
|
12
12
|
pass
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
# FIXME: this code is basically the same as the one in filter_datamap_query
|
|
16
|
-
# in the fidesplus repo, but slightly more generic. Ideally we want to replace that with using this
|
|
17
|
-
# so we don't duplicate this logic in two different places
|
|
18
15
|
def apply_filters_to_query(
|
|
19
16
|
query: Select,
|
|
20
17
|
filter_params: FilterParams,
|
|
@@ -66,7 +66,13 @@ def build_automaton(
|
|
|
66
66
|
|
|
67
67
|
logger.debug("Creating new automaton...")
|
|
68
68
|
automaton = ahocorasick.Automaton() # pylint: disable=c-extension-no-member
|
|
69
|
-
|
|
69
|
+
# Use query_without_large_columns to prevent OOM errors when building automaton
|
|
70
|
+
# We only need identity data, not filtered results or access result URLs
|
|
71
|
+
all_privacy_requests: List[
|
|
72
|
+
PrivacyRequest
|
|
73
|
+
] = PrivacyRequest.query_without_large_columns(db).yield_per(
|
|
74
|
+
1000
|
|
75
|
+
) # type: ignore
|
|
70
76
|
for request in all_privacy_requests:
|
|
71
77
|
_add_decrypted_identities_to_automaton(request.get_persisted_identity().__dict__, request.id, automaton) # type: ignore
|
|
72
78
|
set_automaton_cache_signal()
|