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
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Annotated, Any, Dict, List, Optional
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import sqlalchemy
|
|
6
|
+
from fastapi import Depends, HTTPException
|
|
6
7
|
from fastapi.params import Query, Security
|
|
7
8
|
from fastapi_pagination import Page, Params
|
|
8
9
|
from fastapi_pagination.bases import AbstractPage
|
|
@@ -13,10 +14,17 @@ from pydantic import Field
|
|
|
13
14
|
from sqlalchemy import null, or_
|
|
14
15
|
from sqlalchemy.orm import Session
|
|
15
16
|
from sqlalchemy_utils import escape_like
|
|
16
|
-
from starlette.status import
|
|
17
|
+
from starlette.status import (
|
|
18
|
+
HTTP_200_OK,
|
|
19
|
+
HTTP_204_NO_CONTENT,
|
|
20
|
+
HTTP_404_NOT_FOUND,
|
|
21
|
+
HTTP_422_UNPROCESSABLE_ENTITY,
|
|
22
|
+
)
|
|
17
23
|
|
|
18
24
|
from fides.api.api import deps
|
|
25
|
+
from fides.api.models.connection_oauth_credentials import OAuthConfig
|
|
19
26
|
from fides.api.models.connectionconfig import ConnectionConfig, ConnectionType
|
|
27
|
+
from fides.api.models.event_audit import EventAuditType
|
|
20
28
|
from fides.api.oauth.utils import verify_oauth_client
|
|
21
29
|
from fides.api.schemas.connection_configuration import connection_secrets_schemas
|
|
22
30
|
from fides.api.schemas.connection_configuration.connection_config import (
|
|
@@ -25,18 +33,22 @@ from fides.api.schemas.connection_configuration.connection_config import (
|
|
|
25
33
|
ConnectionConfigurationResponseWithSystemKey,
|
|
26
34
|
CreateConnectionConfigurationWithSecrets,
|
|
27
35
|
)
|
|
36
|
+
from fides.api.schemas.connection_configuration.connection_oauth_config import (
|
|
37
|
+
OAuthConfigSchema,
|
|
38
|
+
)
|
|
28
39
|
from fides.api.schemas.connection_configuration.connection_secrets import (
|
|
29
40
|
TestStatusMessage,
|
|
30
41
|
)
|
|
31
42
|
from fides.api.schemas.connection_configuration.enums.system_type import SystemType
|
|
32
43
|
from fides.api.schemas.connection_configuration.enums.test_status import TestStatus
|
|
44
|
+
from fides.api.service.deps import get_connection_service
|
|
33
45
|
from fides.api.util.api_router import APIRouter
|
|
34
46
|
from fides.api.util.connection_util import (
|
|
35
47
|
connection_status,
|
|
36
48
|
delete_connection_config,
|
|
37
49
|
get_connection_config_or_error,
|
|
38
50
|
patch_connection_configs,
|
|
39
|
-
|
|
51
|
+
update_connection_secrets,
|
|
40
52
|
)
|
|
41
53
|
from fides.common.api.scope_registry import (
|
|
42
54
|
CONNECTION_CREATE_OR_UPDATE,
|
|
@@ -45,11 +57,14 @@ from fides.common.api.scope_registry import (
|
|
|
45
57
|
)
|
|
46
58
|
from fides.common.api.v1.urn_registry import (
|
|
47
59
|
CONNECTION_BY_KEY,
|
|
60
|
+
CONNECTION_OAUTH,
|
|
48
61
|
CONNECTION_SECRETS,
|
|
49
62
|
CONNECTION_TEST,
|
|
50
63
|
CONNECTIONS,
|
|
51
64
|
V1_URL_PREFIX,
|
|
52
65
|
)
|
|
66
|
+
from fides.service.connection.connection_service import ConnectionService
|
|
67
|
+
from fides.service.event_audit_service import EventAuditService
|
|
53
68
|
|
|
54
69
|
router = APIRouter(tags=["Connections"], prefix=V1_URL_PREFIX)
|
|
55
70
|
|
|
@@ -209,28 +224,6 @@ def delete_connection(
|
|
|
209
224
|
delete_connection_config(db, connection_key)
|
|
210
225
|
|
|
211
226
|
|
|
212
|
-
def validate_and_update_secrets(
|
|
213
|
-
connection_key: FidesKey,
|
|
214
|
-
connection_config: ConnectionConfig,
|
|
215
|
-
db: Session,
|
|
216
|
-
unvalidated_secrets: connection_secrets_schemas,
|
|
217
|
-
verify: Optional[bool],
|
|
218
|
-
) -> TestStatusMessage:
|
|
219
|
-
connection_config.secrets = validate_secrets(
|
|
220
|
-
db, unvalidated_secrets, connection_config
|
|
221
|
-
).model_dump(mode="json")
|
|
222
|
-
# Save validated secrets, regardless of whether they've been verified.
|
|
223
|
-
logger.info("Updating connection config secrets for '{}'", connection_key)
|
|
224
|
-
connection_config.save(db=db)
|
|
225
|
-
|
|
226
|
-
msg = f"Secrets updated for ConnectionConfig with key: {connection_key}."
|
|
227
|
-
|
|
228
|
-
if verify:
|
|
229
|
-
return connection_status(connection_config, msg, db)
|
|
230
|
-
|
|
231
|
-
return TestStatusMessage(msg=msg, test_status=None)
|
|
232
|
-
|
|
233
|
-
|
|
234
227
|
@router.put(
|
|
235
228
|
CONNECTION_SECRETS,
|
|
236
229
|
status_code=HTTP_200_OK,
|
|
@@ -240,7 +233,7 @@ def validate_and_update_secrets(
|
|
|
240
233
|
def put_connection_config_secrets(
|
|
241
234
|
connection_key: FidesKey,
|
|
242
235
|
*,
|
|
243
|
-
|
|
236
|
+
connection_service: ConnectionService = Depends(get_connection_service),
|
|
244
237
|
unvalidated_secrets: connection_secrets_schemas,
|
|
245
238
|
verify: Optional[bool] = True,
|
|
246
239
|
) -> TestStatusMessage:
|
|
@@ -250,10 +243,8 @@ def put_connection_config_secrets(
|
|
|
250
243
|
The specific secrets will be connection-dependent. For example, the components needed to connect to a Postgres DB
|
|
251
244
|
will differ from Dynamo DB.
|
|
252
245
|
"""
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return validate_and_update_secrets(
|
|
256
|
-
connection_key, connection_config, db, unvalidated_secrets, verify
|
|
246
|
+
return update_connection_secrets(
|
|
247
|
+
connection_service, connection_key, unvalidated_secrets, verify
|
|
257
248
|
)
|
|
258
249
|
|
|
259
250
|
|
|
@@ -266,7 +257,7 @@ def put_connection_config_secrets(
|
|
|
266
257
|
def patch_connection_config_secrets(
|
|
267
258
|
connection_key: FidesKey,
|
|
268
259
|
*,
|
|
269
|
-
|
|
260
|
+
connection_service: ConnectionService = Depends(get_connection_service),
|
|
270
261
|
unvalidated_secrets: connection_secrets_schemas,
|
|
271
262
|
verify: Optional[bool] = True,
|
|
272
263
|
) -> TestStatusMessage:
|
|
@@ -276,22 +267,12 @@ def patch_connection_config_secrets(
|
|
|
276
267
|
The specific secrets will be connection-dependent. For example, the components needed to connect to a Postgres DB
|
|
277
268
|
will differ from Dynamo DB.
|
|
278
269
|
"""
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if existing_secrets:
|
|
286
|
-
patched_secrets = {**existing_secrets}
|
|
287
|
-
|
|
288
|
-
patched_secrets = {
|
|
289
|
-
**patched_secrets,
|
|
290
|
-
**unvalidated_secrets, # type: ignore[dict-item]
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return validate_and_update_secrets(
|
|
294
|
-
connection_key, connection_config, db, patched_secrets, verify # type: ignore[arg-type]
|
|
270
|
+
return update_connection_secrets(
|
|
271
|
+
connection_service,
|
|
272
|
+
connection_key,
|
|
273
|
+
unvalidated_secrets,
|
|
274
|
+
verify,
|
|
275
|
+
merge_with_existing=True,
|
|
295
276
|
)
|
|
296
277
|
|
|
297
278
|
|
|
@@ -312,3 +293,166 @@ def test_connection_config_secrets(
|
|
|
312
293
|
connection_config = get_connection_config_or_error(db, connection_key)
|
|
313
294
|
msg = f"Test completed for ConnectionConfig with key: {connection_key}."
|
|
314
295
|
return connection_status(connection_config, msg, db)
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
@router.put(
|
|
299
|
+
CONNECTION_OAUTH,
|
|
300
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_CREATE_OR_UPDATE])],
|
|
301
|
+
status_code=HTTP_200_OK,
|
|
302
|
+
)
|
|
303
|
+
def put_connection_oauth_config(
|
|
304
|
+
connection_key: FidesKey,
|
|
305
|
+
*,
|
|
306
|
+
oauth_config: OAuthConfigSchema,
|
|
307
|
+
db: Session = Depends(deps.get_db),
|
|
308
|
+
verify: Optional[bool] = True,
|
|
309
|
+
) -> TestStatusMessage:
|
|
310
|
+
"""
|
|
311
|
+
Create or update the OAuth2 configuration for a given connection.
|
|
312
|
+
"""
|
|
313
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
|
314
|
+
|
|
315
|
+
if connection_config.connection_type != ConnectionType.https:
|
|
316
|
+
raise HTTPException(
|
|
317
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
318
|
+
detail="OAuth2 configuration can only be set for HTTPS connections.",
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
logger.info("Updating OAuth2 config for '{}'", connection_key)
|
|
322
|
+
connection_config.oauth_config = OAuthConfig(
|
|
323
|
+
**oauth_config.model_dump(mode="json") # type: ignore[arg-type]
|
|
324
|
+
)
|
|
325
|
+
connection_config.save(db=db)
|
|
326
|
+
|
|
327
|
+
event_audit_service = EventAuditService(db)
|
|
328
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
329
|
+
|
|
330
|
+
# Create secrets audit event for OAuth credential changes
|
|
331
|
+
connection_service.create_secrets_audit_event(
|
|
332
|
+
EventAuditType.connection_secrets_updated,
|
|
333
|
+
connection_config,
|
|
334
|
+
oauth_config.model_dump(exclude_unset=True), # The OAuth secrets being updated
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
msg = (
|
|
338
|
+
f"OAuth2 configuration updated for ConnectionConfig with key: {connection_key}."
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
if verify:
|
|
342
|
+
return connection_status(connection_config, msg, db)
|
|
343
|
+
|
|
344
|
+
return TestStatusMessage(msg=msg, test_status=None)
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
@router.delete(
|
|
348
|
+
CONNECTION_OAUTH,
|
|
349
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_CREATE_OR_UPDATE])],
|
|
350
|
+
status_code=HTTP_204_NO_CONTENT,
|
|
351
|
+
response_model=None,
|
|
352
|
+
)
|
|
353
|
+
def delete_connection_oauth_config(
|
|
354
|
+
connection_key: FidesKey,
|
|
355
|
+
*,
|
|
356
|
+
db: Session = Depends(deps.get_db),
|
|
357
|
+
) -> None:
|
|
358
|
+
"""
|
|
359
|
+
Delete the OAuth2 configuration for a given connection.
|
|
360
|
+
"""
|
|
361
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
|
362
|
+
|
|
363
|
+
if connection_config.connection_type != ConnectionType.https:
|
|
364
|
+
raise HTTPException(
|
|
365
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
366
|
+
detail="OAuth2 configuration can only be deleted for HTTPS connections",
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
if not connection_config.oauth_config:
|
|
370
|
+
raise HTTPException(
|
|
371
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
372
|
+
detail="No OAuth2 configuration found to delete.",
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
logger.info("Deleting OAuth2 config for '{}'", connection_key)
|
|
376
|
+
connection_config.oauth_config = None
|
|
377
|
+
connection_config.save(db=db)
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
@router.patch(
|
|
381
|
+
CONNECTION_OAUTH,
|
|
382
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_CREATE_OR_UPDATE])],
|
|
383
|
+
status_code=HTTP_200_OK,
|
|
384
|
+
)
|
|
385
|
+
def patch_connection_oauth_config(
|
|
386
|
+
connection_key: FidesKey,
|
|
387
|
+
*,
|
|
388
|
+
oauth_config: OAuthConfigSchema,
|
|
389
|
+
db: Session = Depends(deps.get_db),
|
|
390
|
+
verify: Optional[bool] = True,
|
|
391
|
+
) -> TestStatusMessage:
|
|
392
|
+
"""
|
|
393
|
+
Partially update the OAuth2 configuration for a given connection.
|
|
394
|
+
"""
|
|
395
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
|
396
|
+
|
|
397
|
+
if connection_config.connection_type != ConnectionType.https:
|
|
398
|
+
raise HTTPException(
|
|
399
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
400
|
+
detail="OAuth2 configuration can only be set for HTTPS connections.",
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
existing_oauth_config: Optional[Dict[str, Any]] = (
|
|
404
|
+
{
|
|
405
|
+
"grant_type": connection_config.oauth_config.grant_type.value,
|
|
406
|
+
"token_url": connection_config.oauth_config.token_url,
|
|
407
|
+
"scope": connection_config.oauth_config.scope,
|
|
408
|
+
"client_id": connection_config.oauth_config.client_id,
|
|
409
|
+
"client_secret": connection_config.oauth_config.client_secret,
|
|
410
|
+
}
|
|
411
|
+
if connection_config.oauth_config
|
|
412
|
+
else None
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
# Combine the existing config with the new config overlaid
|
|
416
|
+
patched_oauth_config = {}
|
|
417
|
+
if existing_oauth_config:
|
|
418
|
+
patched_oauth_config = {**existing_oauth_config}
|
|
419
|
+
|
|
420
|
+
patched_oauth_config = {
|
|
421
|
+
**patched_oauth_config,
|
|
422
|
+
**{k: v for (k, v) in oauth_config.model_dump(mode="json").items() if v is not None}, # type: ignore[dict-item]
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
logger.info("Patching OAuth2 config for '{}'", connection_key)
|
|
426
|
+
validated_config = OAuthConfigSchema.model_validate(patched_oauth_config)
|
|
427
|
+
try:
|
|
428
|
+
connection_config.oauth_config = OAuthConfig(
|
|
429
|
+
**validated_config.model_dump(mode="json")
|
|
430
|
+
)
|
|
431
|
+
connection_config.save(db=db)
|
|
432
|
+
except sqlalchemy.exc.IntegrityError as exc:
|
|
433
|
+
raise HTTPException(
|
|
434
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
435
|
+
detail="Invalid OAuth2 configuration.",
|
|
436
|
+
) from exc
|
|
437
|
+
|
|
438
|
+
# Create audit event for OAuth config update (OAuth credentials are secrets)
|
|
439
|
+
event_audit_service = EventAuditService(db)
|
|
440
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
441
|
+
|
|
442
|
+
# Create secrets audit event for OAuth credential changes
|
|
443
|
+
connection_service.create_secrets_audit_event(
|
|
444
|
+
EventAuditType.connection_secrets_updated,
|
|
445
|
+
connection_config,
|
|
446
|
+
validated_config.model_dump(
|
|
447
|
+
exclude_unset=True
|
|
448
|
+
), # The OAuth secrets being updated
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
msg = (
|
|
452
|
+
f"OAuth2 configuration updated for ConnectionConfig with key: {connection_key}."
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
if verify:
|
|
456
|
+
return connection_status(connection_config, msg, db)
|
|
457
|
+
|
|
458
|
+
return TestStatusMessage(msg=msg, test_status=None)
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
from io import BytesIO
|
|
2
|
+
from typing import List
|
|
3
|
+
from zipfile import BadZipFile, ZipFile
|
|
4
|
+
|
|
5
|
+
from fastapi import Body, Depends, HTTPException
|
|
6
|
+
from fastapi.params import Security
|
|
7
|
+
from fastapi.responses import JSONResponse, Response
|
|
8
|
+
from loguru import logger
|
|
9
|
+
from sqlalchemy.orm import Session
|
|
10
|
+
from starlette.status import HTTP_404_NOT_FOUND
|
|
11
|
+
|
|
12
|
+
from fides.api.api import deps
|
|
13
|
+
from fides.api.oauth.utils import verify_oauth_client
|
|
14
|
+
from fides.api.schemas.saas.connector_template import ConnectorTemplateListResponse
|
|
15
|
+
from fides.api.service.connectors.saas.connector_registry_service import (
|
|
16
|
+
ConnectorRegistry,
|
|
17
|
+
CustomConnectorTemplateLoader,
|
|
18
|
+
)
|
|
19
|
+
from fides.api.util.api_router import APIRouter
|
|
20
|
+
from fides.common.api.scope_registry import (
|
|
21
|
+
CONNECTOR_TEMPLATE_READ,
|
|
22
|
+
CONNECTOR_TEMPLATE_REGISTER,
|
|
23
|
+
)
|
|
24
|
+
from fides.common.api.v1.urn_registry import (
|
|
25
|
+
CONNECTOR_TEMPLATES,
|
|
26
|
+
CONNECTOR_TEMPLATES_CONFIG,
|
|
27
|
+
CONNECTOR_TEMPLATES_DATASET,
|
|
28
|
+
CONNECTOR_TEMPLATES_REGISTER,
|
|
29
|
+
REGISTER_CONNECTOR_TEMPLATE,
|
|
30
|
+
V1_URL_PREFIX,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
router = APIRouter(tags=["Connector Templates"], prefix=V1_URL_PREFIX)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@router.get(
|
|
37
|
+
CONNECTOR_TEMPLATES,
|
|
38
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTOR_TEMPLATE_READ])],
|
|
39
|
+
response_model=List[ConnectorTemplateListResponse],
|
|
40
|
+
)
|
|
41
|
+
def get_all_connector_templates() -> List[ConnectorTemplateListResponse]:
|
|
42
|
+
"""
|
|
43
|
+
Returns a list of all available connector templates with summary information.
|
|
44
|
+
|
|
45
|
+
Each template includes:
|
|
46
|
+
- **type**: The unique identifier for the connector (used in other endpoints)
|
|
47
|
+
- **name**: Human-readable name of the connector
|
|
48
|
+
- **supported_actions**: List of actions this connector supports (e.g., access, erasure)
|
|
49
|
+
- **category**: Optional category classification for the connector
|
|
50
|
+
- **custom**: Whether this is a custom connector (true) or built-in (false)
|
|
51
|
+
"""
|
|
52
|
+
logger.info("Retrieving all connector templates")
|
|
53
|
+
return ConnectorRegistry.get_all_connector_templates_summary()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@router.post(
|
|
57
|
+
CONNECTOR_TEMPLATES_REGISTER,
|
|
58
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTOR_TEMPLATE_REGISTER])],
|
|
59
|
+
)
|
|
60
|
+
def register_connector_template(
|
|
61
|
+
file: bytes = Body(..., media_type="application/zip"),
|
|
62
|
+
db: Session = Depends(deps.get_db),
|
|
63
|
+
) -> JSONResponse:
|
|
64
|
+
"""
|
|
65
|
+
Registers a custom connector template from a zip file uploaded by the user.
|
|
66
|
+
|
|
67
|
+
The endpoint performs the following steps:
|
|
68
|
+
1. Validates the uploaded file is a proper zip file.
|
|
69
|
+
2. Uses the CustomConnectorTemplateLoader to validate, register, and save the template to the database.
|
|
70
|
+
|
|
71
|
+
If the uploaded file is not a valid zip file or there are any validation errors
|
|
72
|
+
when creating the ConnectorTemplates an HTTP 400 status code with error details is returned.
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
with ZipFile(BytesIO(file), "r") as zip_file:
|
|
76
|
+
CustomConnectorTemplateLoader.save_template(db=db, zip_file=zip_file)
|
|
77
|
+
except BadZipFile:
|
|
78
|
+
raise HTTPException(status_code=400, detail="Invalid zip file")
|
|
79
|
+
except Exception as exc:
|
|
80
|
+
logger.exception("Error loading connector template from zip file.")
|
|
81
|
+
raise HTTPException(status_code=400, detail=str(exc))
|
|
82
|
+
|
|
83
|
+
return JSONResponse(
|
|
84
|
+
content={"message": "Connector template successfully registered."}
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@router.post(
|
|
89
|
+
REGISTER_CONNECTOR_TEMPLATE,
|
|
90
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTOR_TEMPLATE_REGISTER])],
|
|
91
|
+
deprecated=True,
|
|
92
|
+
)
|
|
93
|
+
def register_custom_connector_template_deprecated(
|
|
94
|
+
file: bytes = Body(..., media_type="application/zip"),
|
|
95
|
+
db: Session = Depends(deps.get_db),
|
|
96
|
+
) -> JSONResponse:
|
|
97
|
+
"""
|
|
98
|
+
**DEPRECATED**: Use `POST /connector-templates/register` instead.
|
|
99
|
+
|
|
100
|
+
Registers a custom connector template from a zip file uploaded by the user.
|
|
101
|
+
This endpoint is maintained for backward compatibility only.
|
|
102
|
+
"""
|
|
103
|
+
return register_connector_template(file=file, db=db)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@router.get(
|
|
107
|
+
CONNECTOR_TEMPLATES_CONFIG,
|
|
108
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTOR_TEMPLATE_READ])],
|
|
109
|
+
)
|
|
110
|
+
def get_connector_template_config(
|
|
111
|
+
connector_template_type: str,
|
|
112
|
+
) -> Response:
|
|
113
|
+
"""
|
|
114
|
+
Retrieves the SaaS config YAML for a connector template by its type.
|
|
115
|
+
|
|
116
|
+
The `connector_template_type` parameter comes from the `type` field
|
|
117
|
+
returned by the `GET /connector-templates` endpoint.
|
|
118
|
+
|
|
119
|
+
Returns the raw YAML configuration that can be used to understand
|
|
120
|
+
or customize the connector template.
|
|
121
|
+
"""
|
|
122
|
+
logger.info("Finding connector template with type '{}'", connector_template_type)
|
|
123
|
+
template = ConnectorRegistry.get_connector_template(connector_template_type)
|
|
124
|
+
|
|
125
|
+
if not template:
|
|
126
|
+
raise HTTPException(
|
|
127
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
128
|
+
detail=f"No connector template found with type '{connector_template_type}'",
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
return Response(
|
|
132
|
+
content=template.config,
|
|
133
|
+
media_type="text/yaml",
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
@router.get(
|
|
138
|
+
CONNECTOR_TEMPLATES_DATASET,
|
|
139
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTOR_TEMPLATE_READ])],
|
|
140
|
+
)
|
|
141
|
+
def get_connector_template_dataset(
|
|
142
|
+
connector_template_type: str,
|
|
143
|
+
) -> Response:
|
|
144
|
+
"""
|
|
145
|
+
Retrieves the dataset YAML for a connector template by its type.
|
|
146
|
+
|
|
147
|
+
The `connector_template_type` parameter comes from the `type` field
|
|
148
|
+
returned by the `GET /connector-templates` endpoint.
|
|
149
|
+
|
|
150
|
+
Returns the raw dataset YAML configuration that defines the data structure
|
|
151
|
+
for the connector template.
|
|
152
|
+
"""
|
|
153
|
+
logger.info(
|
|
154
|
+
"Finding connector template dataset with type '{}'", connector_template_type
|
|
155
|
+
)
|
|
156
|
+
template = ConnectorRegistry.get_connector_template(connector_template_type)
|
|
157
|
+
|
|
158
|
+
if not template:
|
|
159
|
+
raise HTTPException(
|
|
160
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
161
|
+
detail=f"No connector template found with type '{connector_template_type}'",
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
return Response(
|
|
165
|
+
content=template.dataset,
|
|
166
|
+
media_type="text/yaml",
|
|
167
|
+
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from functools import partial
|
|
2
2
|
from typing import Dict, List, Optional, Union
|
|
3
3
|
|
|
4
|
-
from fastapi import Depends, HTTPException, Query, Response, Security
|
|
4
|
+
from fastapi import Body, Depends, HTTPException, Query, Response, Security
|
|
5
5
|
from fastapi.concurrency import run_in_threadpool
|
|
6
6
|
from fastapi.encoders import jsonable_encoder
|
|
7
7
|
from fastapi.responses import JSONResponse
|
|
@@ -54,6 +54,7 @@ from fides.common.api.v1.urn_registry import DATASETS_CLEAN, V1_URL_PREFIX
|
|
|
54
54
|
from fides.service.dataset.dataset_service import (
|
|
55
55
|
DatasetNotFoundException,
|
|
56
56
|
DatasetService,
|
|
57
|
+
LinkedDatasetException,
|
|
57
58
|
)
|
|
58
59
|
from fides.service.taxonomy.taxonomy_service import TaxonomyService
|
|
59
60
|
|
|
@@ -126,7 +127,7 @@ async def update_dataset(
|
|
|
126
127
|
except DatasetNotFoundException as e:
|
|
127
128
|
raise HTTPException(
|
|
128
129
|
status_code=HTTP_404_NOT_FOUND,
|
|
129
|
-
detail=
|
|
130
|
+
detail=str(e),
|
|
130
131
|
)
|
|
131
132
|
|
|
132
133
|
|
|
@@ -248,7 +249,7 @@ async def get_dataset(
|
|
|
248
249
|
except DatasetNotFoundException as e:
|
|
249
250
|
raise HTTPException(
|
|
250
251
|
status_code=HTTP_404_NOT_FOUND,
|
|
251
|
-
detail=
|
|
252
|
+
detail=str(e),
|
|
252
253
|
)
|
|
253
254
|
|
|
254
255
|
|
|
@@ -275,7 +276,12 @@ async def delete_dataset(
|
|
|
275
276
|
except DatasetNotFoundException as e:
|
|
276
277
|
raise HTTPException(
|
|
277
278
|
status_code=HTTP_404_NOT_FOUND,
|
|
278
|
-
detail=
|
|
279
|
+
detail=str(e),
|
|
280
|
+
)
|
|
281
|
+
except LinkedDatasetException as e:
|
|
282
|
+
raise HTTPException(
|
|
283
|
+
status_code=HTTP_400_BAD_REQUEST,
|
|
284
|
+
detail=str(e),
|
|
279
285
|
)
|
|
280
286
|
|
|
281
287
|
|
|
@@ -362,12 +368,12 @@ async def create_data_use(
|
|
|
362
368
|
"""
|
|
363
369
|
try:
|
|
364
370
|
return taxonomy_service.create_or_update_element(
|
|
365
|
-
"
|
|
371
|
+
"data_use", data_use.model_dump()
|
|
366
372
|
)
|
|
367
|
-
except KeyOrNameAlreadyExists:
|
|
373
|
+
except KeyOrNameAlreadyExists as e:
|
|
368
374
|
raise HTTPException(
|
|
369
375
|
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
370
|
-
detail=
|
|
376
|
+
detail=str(e),
|
|
371
377
|
)
|
|
372
378
|
except (ValidationError, PydanticValidationError) as e:
|
|
373
379
|
raise HTTPException(
|
|
@@ -393,12 +399,12 @@ async def create_data_category(
|
|
|
393
399
|
|
|
394
400
|
try:
|
|
395
401
|
return taxonomy_service.create_or_update_element(
|
|
396
|
-
"
|
|
402
|
+
"data_category", data_category.model_dump()
|
|
397
403
|
)
|
|
398
|
-
except KeyOrNameAlreadyExists:
|
|
404
|
+
except KeyOrNameAlreadyExists as e:
|
|
399
405
|
raise HTTPException(
|
|
400
406
|
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
401
|
-
detail=
|
|
407
|
+
detail=str(e),
|
|
402
408
|
)
|
|
403
409
|
except (ValidationError, PydanticValidationError) as e:
|
|
404
410
|
raise HTTPException(
|
|
@@ -424,12 +430,12 @@ async def create_data_subject(
|
|
|
424
430
|
|
|
425
431
|
try:
|
|
426
432
|
return taxonomy_service.create_or_update_element(
|
|
427
|
-
"
|
|
433
|
+
"data_subject", data_subject.model_dump()
|
|
428
434
|
)
|
|
429
|
-
except KeyOrNameAlreadyExists:
|
|
435
|
+
except KeyOrNameAlreadyExists as e:
|
|
430
436
|
raise HTTPException(
|
|
431
437
|
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
432
|
-
detail=
|
|
438
|
+
detail=str(e),
|
|
433
439
|
)
|
|
434
440
|
except (ValidationError, PydanticValidationError) as e:
|
|
435
441
|
raise HTTPException(
|
|
@@ -459,7 +465,7 @@ async def update_data_use(
|
|
|
459
465
|
)
|
|
460
466
|
try:
|
|
461
467
|
result = taxonomy_service.update_element(
|
|
462
|
-
"
|
|
468
|
+
"data_use", data_use.fides_key, data_use.model_dump()
|
|
463
469
|
)
|
|
464
470
|
if not result:
|
|
465
471
|
raise HTTPException(
|
|
@@ -495,7 +501,7 @@ async def update_data_category(
|
|
|
495
501
|
)
|
|
496
502
|
try:
|
|
497
503
|
result = taxonomy_service.update_element(
|
|
498
|
-
"
|
|
504
|
+
"data_category", data_category.fides_key, data_category.model_dump()
|
|
499
505
|
)
|
|
500
506
|
if not result:
|
|
501
507
|
raise HTTPException(
|
|
@@ -510,6 +516,75 @@ async def update_data_category(
|
|
|
510
516
|
)
|
|
511
517
|
|
|
512
518
|
|
|
519
|
+
@data_category_router.patch(
|
|
520
|
+
"/data_category/{fides_key}/tagging_instructions",
|
|
521
|
+
dependencies=[Security(verify_oauth_client, scopes=[DATA_CATEGORY_UPDATE])],
|
|
522
|
+
response_model=DataCategory,
|
|
523
|
+
status_code=status.HTTP_200_OK,
|
|
524
|
+
name="Update tagging instructions",
|
|
525
|
+
)
|
|
526
|
+
async def update_data_category_tagging_instructions(
|
|
527
|
+
fides_key: str,
|
|
528
|
+
tagging_instructions: str = Body(..., embed=True),
|
|
529
|
+
taxonomy_service: TaxonomyService = Depends(get_taxonomy_service),
|
|
530
|
+
) -> Dict:
|
|
531
|
+
"""
|
|
532
|
+
Update or add tagging_instructions for a data category.
|
|
533
|
+
This is used by LLM-based classification to provide custom instructions for tagging.
|
|
534
|
+
"""
|
|
535
|
+
try:
|
|
536
|
+
result = taxonomy_service.update_element(
|
|
537
|
+
"data_category",
|
|
538
|
+
fides_key,
|
|
539
|
+
{"tagging_instructions": tagging_instructions},
|
|
540
|
+
)
|
|
541
|
+
if not result:
|
|
542
|
+
raise HTTPException(
|
|
543
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
544
|
+
detail=f"Data category not found with key: {fides_key}",
|
|
545
|
+
)
|
|
546
|
+
return result
|
|
547
|
+
except (ValidationError, PydanticValidationError) as e:
|
|
548
|
+
raise HTTPException(
|
|
549
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
550
|
+
detail=str(e),
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
@data_category_router.delete(
|
|
555
|
+
"/data_category/{fides_key}/tagging_instructions",
|
|
556
|
+
dependencies=[Security(verify_oauth_client, scopes=[DATA_CATEGORY_UPDATE])],
|
|
557
|
+
response_model=DataCategory,
|
|
558
|
+
status_code=status.HTTP_200_OK,
|
|
559
|
+
name="Delete tagging instructions",
|
|
560
|
+
)
|
|
561
|
+
async def delete_data_category_tagging_instructions(
|
|
562
|
+
fides_key: str,
|
|
563
|
+
taxonomy_service: TaxonomyService = Depends(get_taxonomy_service),
|
|
564
|
+
) -> Dict:
|
|
565
|
+
"""
|
|
566
|
+
Remove tagging_instructions from a data category.
|
|
567
|
+
Sets the tagging_instructions field to None.
|
|
568
|
+
"""
|
|
569
|
+
try:
|
|
570
|
+
result = taxonomy_service.update_element(
|
|
571
|
+
"data_category",
|
|
572
|
+
fides_key,
|
|
573
|
+
{"tagging_instructions": None},
|
|
574
|
+
)
|
|
575
|
+
if not result:
|
|
576
|
+
raise HTTPException(
|
|
577
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
578
|
+
detail=f"Data category not found with key: {fides_key}",
|
|
579
|
+
)
|
|
580
|
+
return result
|
|
581
|
+
except (ValidationError, PydanticValidationError) as e:
|
|
582
|
+
raise HTTPException(
|
|
583
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
584
|
+
detail=str(e),
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
|
|
513
588
|
GENERIC_OVERRIDES_ROUTER = APIRouter()
|
|
514
589
|
GENERIC_OVERRIDES_ROUTER.include_router(dataset_router)
|
|
515
590
|
GENERIC_OVERRIDES_ROUTER.include_router(data_use_router)
|