ethyca-fides 2.66.2rc0__py2.py3-none-any.whl → 2.67.0rc0__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.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0rc0.dist-info}/RECORD +292 -279
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/7e9a2b52f498_adding_masking_secrets.py +60 -0
- fides/api/alembic/migrations/versions/a7065df4dcf1_add_finalized_fields_to_privacy_request.py +65 -0
- fides/api/alembic/migrations/versions/d0031087eacb_create_manualtaskconditionaldependency_.py +106 -0
- fides/api/api/v1/endpoints/dataset_config_endpoints.py +13 -5
- fides/api/api/v1/endpoints/drp_endpoints.py +7 -1
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +44 -1
- fides/api/api/v1/endpoints/user_endpoints.py +83 -7
- fides/api/app_setup.py +3 -2
- fides/api/common_exceptions.py +4 -0
- fides/api/db/base.py +1 -0
- fides/api/db/database.py +1 -1
- fides/api/graph/execution.py +30 -0
- fides/api/graph/graph.py +13 -2
- fides/api/graph/traversal.py +126 -39
- fides/api/models/manual_task/__init__.py +2 -0
- fides/api/models/manual_task/conditional_dependency.py +144 -0
- fides/api/models/{manual_task.py → manual_task/manual_task.py} +10 -0
- fides/api/models/masking_secret.py +72 -0
- fides/api/models/policy.py +23 -0
- fides/api/models/privacy_request/execution_log.py +1 -0
- fides/api/models/privacy_request/privacy_request.py +31 -13
- fides/api/oauth/roles.py +2 -0
- fides/api/schemas/application_config.py +11 -1
- fides/api/schemas/masking/masking_secrets.py +1 -1
- fides/api/schemas/policy.py +1 -0
- fides/api/schemas/privacy_request.py +5 -0
- fides/api/service/connectors/base_connector.py +1 -0
- fides/api/service/connectors/bigquery_connector.py +67 -19
- fides/api/service/connectors/dynamodb_connector.py +2 -1
- fides/api/service/connectors/fides_connector.py +1 -0
- fides/api/service/connectors/http_connector.py +1 -0
- fides/api/service/connectors/manual_task_connector.py +1 -0
- fides/api/service/connectors/manual_webhook_connector.py +2 -1
- fides/api/service/connectors/mongodb_connector.py +1 -0
- fides/api/service/connectors/okta_connector.py +1 -0
- fides/api/service/connectors/query_configs/bigquery_query_config.py +91 -32
- fides/api/service/connectors/rds_mysql_connector.py +1 -0
- fides/api/service/connectors/rds_postgres_connector.py +1 -0
- fides/api/service/connectors/s3_connector.py +1 -0
- fides/api/service/connectors/saas_connector.py +1 -0
- fides/api/service/connectors/scylla_connector.py +1 -0
- fides/api/service/connectors/sql_connector.py +36 -4
- fides/api/service/connectors/website_connector.py +1 -0
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +2 -2
- fides/api/service/privacy_request/request_runner_service.py +142 -53
- fides/api/service/privacy_request/request_service.py +1 -22
- fides/api/task/conditional_dependencies/__init__.py +0 -0
- fides/api/task/conditional_dependencies/evaluator.py +109 -0
- fides/api/task/conditional_dependencies/schemas.py +54 -0
- fides/api/task/create_request_tasks.py +1 -1
- fides/api/task/deprecated_graph_task.py +24 -6
- fides/api/task/execute_request_tasks.py +89 -12
- fides/api/task/filter_results.py +1 -1
- fides/api/task/graph_task.py +38 -3
- fides/api/task/manual/manual_task_address.py +46 -0
- fides/api/task/manual/manual_task_graph_task.py +118 -126
- fides/api/task/manual/manual_task_utils.py +52 -105
- fides/api/util/aws_util.py +5 -1
- fides/api/util/cache.py +5 -0
- fides/api/util/encryption/secrets_util.py +48 -18
- fides/common/api/scope_registry.py +3 -0
- fides/common/api/v1/urn_registry.py +1 -1
- fides/config/execution_settings.py +4 -0
- fides/config/utils.py +1 -0
- fides/service/privacy_request/privacy_request_service.py +6 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/GKmhMPa_1gMto8JZO8ENy/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-b78b58ae3b75d75a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1975.7d4634a0e823a02b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{203-5a663f465ba26bb4.js → 203-cd78ea279cecba60.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2150-930ffaf2c4718edc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/255-1bc0cbef7a59cdc6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3450-0ba194991d0cca88.js → 3450-ca4ba70da999f264.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3550-d04125c828d591a1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3855-e172870d3e21b0dd.js → 3855-509ca7ac99b5eada.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3872-46cebf7ec1b31a2b.js → 3872-0a0f0032ca39a93f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/409-ea70638a59296659.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4121-2bc09fc4ddbfe5cb.js → 4121-877e19d3fa078c7b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4230-60100f7ef3ddcde1.js → 4230-114e31621c19ea69.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4259.d1507e0db19cbed7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/431-1db919f6569a4021.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4608-bbb7bf511a05c3c2.js → 4608-43acf39319177bee.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5309-b2c4803370634ff8.js → 5309-ce5702b9faeaff55.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{905-ffdbd0b14167e8bd.js → 5596-4378b2927dae65b2.js} +3 -3
- fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6084-7178ff6ea6822475.js → 6084-ddbad3149364725d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6148-59a59d5c5925344f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6419-d0c00d661b01f8fa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6662-507be5d46e5b719b.js → 6662-4392ba1e4c254ef7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-fc7d9ddb1a03e7b3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6853-2ad3e08fe6f9f5f2.js → 6853-d0190d2cca9dbde2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6882-6af16fef26c21e06.js → 6882-59ea739e3616ce83.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-9c4912fbce87c4df.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7476-281ee9a8286556f3.js → 7476-cc0d9a94ed7aad53.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{787-fb41002f797eb2df.js → 787-c57185ad89c4e288.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{79-7e87aff851423d4a.js → 79-2aab56be75e16187.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{796-329a5f823ec258a5.js → 796-3bdda2a7868464af.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/8237-841439bef6682177.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9046-5c4c22c375de25b1.js → 9046-04a8c092fef1cd83.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9226-746771d47dff6266.js → 9226-2dcac54ab3fb94be.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9951-9b753ad7c3f51bdf.js → 9951-7c6639e5d062779e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-39ccb07327c2c5d5.js → _app-4b5bff46158a19a3.js} +56 -56
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-98777246bec9dc2a.js → manual-2a655ff3a97f2492.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-a71c0aff4e0e6535.js → add-systems-0902f0bb4080643e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1edf582ba3cd3bbb.js → [id]-f22ddd9b48a5c418.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-06bb3b0bf097fcdb.js → new-e74cb5ea87f15b40.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-685771e5f7196d87.js → privacy-experience-21f997c69fc3b4c2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-6ccedc70dc447089.js → [id]-da4124b7600a2a1d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-944bca1cc57985b5.js → new-a57d251c88ce68ae.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-84f4bd14ce8673bc.js → privacy-notices-ad105181bc91209b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-b0c4235fe6d0b0c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-11d52f1570759c4d.js → [resourceUrn]-aad6047a4604b945.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-32eac8bbd217615a.js → projects-29784a11fe0fbd0a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b83afa5565d0c84e.js → [resourceUrn]-b6b98cea25dd94fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-6f630d42ac9fb6b4.js → data-catalog-d5b01abcb76792ce.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-7caea7bb58c1f153.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-a9a70856f7be1542.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-9ddb52ebb7ac4c71.js → action-center-1f0ea5c92ae9a2b4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-9aa744d56cdacb0d.js → activity-ad6a84a6276f914c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-14bd7500362ff224.js → [resourceUrn]-f98dd251babb7e28.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9e7dfd5a6acc2e8f.js → discovery-56eb4c014f0d96a3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-d23b3ae139f0428b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-c0d2bfd465df20e0.js → [...subfieldNames]-15301bd6bf7cf718.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-28280a8a39a6e37c.js → [collectionName]-0fa72873e464f581.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-82fb246d87e58ebd.js → new-0d50084fbdf9b84c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-20165c31ab1bc7cf.js → dataset-f3348d0a92543bab.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-b4a6bcc87d126840.js → [id]-7d6027570d05c57f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-f95d7b0bbfc58f5a.js → new-8446418c7ad28f77.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-5d8fd1af75f19e2f.js → fides-js-docs-1f4335dca5c09860.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-1919aab9e5834b51.js → index-fbf9b845bb901238.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-0a58aee2d1e7fa01.js → [id]-f53fe1f2cbebda7c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-e2d5d7e2a5265e68.js → integrations-142abe3e3e3e5bf7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-1bae386d8c190348.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-69ad86b7a8a9a115.js → table-migration-05616e2ae20ff4f8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-1b6b0d703cf59389.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-f1d818242d8550f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-d40a26bddb126c5c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-ccd8d9e06cf2d278.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-fd1a67892056830a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-fc201657f4a782c7.js → [purpose_id]-e891d01ece59669e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-c2d39cba8396ef3a.js → consent-f61b87e79367865b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-d992103cc55901ae.js → custom-fields-f8eea5d508c60c64.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-023e1895552817de.js → locations-ed6a140b362c5baa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-ac403c0886b20e20.js → organization-ff9a34264d48c35f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-7a3396ac819c7904.js → test-datasets-a4b6d41ca679298b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-8314a819837f5b2a.js → [id]-c8f5fbaa83dd9945.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-21f423a7c417aa9d.js → systems-c05b49ddec1a1b4f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-df0d88716578e295.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-da68efc31998dc66.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-173ac3a1ed2b05a6.js → user-management-e98dfc7d4f2a4e16.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-90e8ec1fc5c6455b.js +1 -0
- fides/ui-build/static/admin/_next/static/css/{5bfb2473e5701527.css → 23cf870196941c9a.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/{94965f224bc991e9.css → 8bc1833f1fa53ff0.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/d9924caa849931b3.css +1 -0
- fides/ui-build/static/admin/_next/static/css/dbcf63488933a4d5.css +29 -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/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- 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/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- 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/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.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/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.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/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/ui-build/static/admin/_next/static/8108ANFxs99VY7KZ_Xev2/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1316-6cc72a45ebf7ff81.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-e601e737e3cc7a0e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/255-7db55b0e3a0f9dea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2599-6c4d22e75028d8b6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2858-0b44609b6be7850b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2866-a73888c17a195cbe.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/409-a257e14acebcd73b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-34f0b91c26f8d9ab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-e3d40aa17a4bf2e9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-bb875d9ac89f6030.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7062.fda15dcb7df85675.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7c79804f.7a7112aece470725.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-9b1b5970f0702668.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9392.f4520f66206d347d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/ea076c0a.84423f606aef37cd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-afdbd4665657cfa1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2265ecb899d45fbc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5d522637871ac6c8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-7674b97d655c193b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-5094ffea13f32ed9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-32600543eb7b584f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-10ce53ea356f8bad.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-5501bbb129fee9c4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cbe4c8f9096b6543.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-e130c0197362e8f3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-6387fcc8cce872eb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-ff5738706da07801.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-ff0cd6bff75588da.js +0 -1
- fides/ui-build/static/admin/_next/static/css/2cadb5f62dcd7c2b.css +0 -1
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{8108ANFxs99VY7KZ_Xev2 → GKmhMPa_1gMto8JZO8ENy}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-455e6357b74d2f76.js → 2921-86f1547ac40a5cdf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-6cc911dafccc5f63.js → 3923-13a6b4da2d51bf8f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-1b529d5800aa1f3a.js → 401-3cc1fee61494e3bd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5574-b13021775a15bfd2.js → 5574-9312f97b637d9ee2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-9aac73191ed5ed13.js → 7630-b1c93688013ef013.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-111aaee8bd8dbd09.js → 9826-3c578665c6d3b21d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-aece2c920ea14514.js → 404-2d803dab6a00f353.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-dc75dc6e37e52f05.js → multiple-8ff7f37913ad736a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-24d226b5a8de5c74.js → add-vendors-d00c9034cdeb0236.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-6a8ef51138ac926a.js → configure-0e1ca0f4c8e7f4da.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-6f86ab63a08a6528.js → properties-057cad65e7414a44.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-73d3cbf68f7c3a31.js → consent-e17c56eec8d91371.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-6ba9e160dae64695.js → [projectUrn]-80a6cc8e8573514a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-7648bbd4f6711e4d.js → resources-6c3714ee97a718c1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-393e20924c83373e.js → [resourceUrn]-31e6c54794a9883e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-8733807dad4bc96e.js → detection-2822a423a7ad0550.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-006b695e5af5ef24.js → [datasetId]-a8e8b5f4ee7af86c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-c391c6fad56eec48.js → datastore-connection-0f29b47402292070.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-53fecfb9dd6a1e0c.js → [id]-5627d0d0668077f9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-76b01cec5fde10a9.js → add-template-feca66ad5c5fe54a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-5c08e8447c45ce44.js → ant-components-64a322d01aae5ca7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-06ad5f34585480aa.js → AntForm-8bca16a7726e7eb2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-6f071c2bc9446cb0.js → FormikAntFormItem-b0f246fc3b67ebf7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-efcc38c58991ac9e.js → FormikControlled-1a0852b090bfc392.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-430ba5c979abfb7c.js → FormikField-11f3de1b45e36583.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-5c561880bf131afb.js → forms-1b73a1c2b6c6285f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d888a69a3bbe040e.js → configure-e551a860ec727802.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-d3d8e3d7583ec635.js → [id]-dd99183f93763ae4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-1af10ed303815d46.js → add-property-0bdbc1fcbf553b8f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-cebc0dc186be499a.js → properties-e959378bb32b6b73.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-5e1322de868d615e.js → alpha-8f98a4895e74725e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-241f95e372b65d0f.js → about-8155a35a62fdb5ae.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-41242f805599feda.js → domain-records-51333dbd21cb37c8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-2e885f74c92f669c.js → domains-bde86e5f6c09da5a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-ff112655ad5f41e5.js → email-templates-4f9a5cc8bea7725b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-86062a18e081a52a.js → regulations-102efd9199e87124.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-a2524414e968f862.js → new-bc4eb541906781e6.js} +0 -0
fides/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-07-
|
|
11
|
+
"date": "2025-07-30T16:22:05-0400",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "1b5a5cfbc8dfd15b989a5fc4778c2155aef1a36d",
|
|
15
|
+
"version": "2.67.0rc0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""adding masking secrets
|
|
2
|
+
|
|
3
|
+
Revision ID: 7e9a2b52f498
|
|
4
|
+
Revises: d0031087eacb
|
|
5
|
+
Create Date: 2024-12-23 23:29:53.557951
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
import sqlalchemy_utils
|
|
11
|
+
from alembic import op
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "7e9a2b52f498"
|
|
15
|
+
down_revision = "d0031087eacb"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
op.create_table(
|
|
22
|
+
"masking_secret",
|
|
23
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
24
|
+
sa.Column(
|
|
25
|
+
"created_at",
|
|
26
|
+
sa.DateTime(timezone=True),
|
|
27
|
+
server_default=sa.text("now()"),
|
|
28
|
+
nullable=True,
|
|
29
|
+
),
|
|
30
|
+
sa.Column(
|
|
31
|
+
"updated_at",
|
|
32
|
+
sa.DateTime(timezone=True),
|
|
33
|
+
server_default=sa.text("now()"),
|
|
34
|
+
nullable=True,
|
|
35
|
+
),
|
|
36
|
+
sa.Column("privacy_request_id", sa.String(), nullable=False),
|
|
37
|
+
sa.Column(
|
|
38
|
+
"secret",
|
|
39
|
+
sqlalchemy_utils.types.encrypted.encrypted_type.StringEncryptedType(),
|
|
40
|
+
nullable=False,
|
|
41
|
+
),
|
|
42
|
+
sa.Column("masking_strategy", sa.String(), nullable=False),
|
|
43
|
+
sa.Column(
|
|
44
|
+
"secret_type",
|
|
45
|
+
sa.String(),
|
|
46
|
+
nullable=False,
|
|
47
|
+
),
|
|
48
|
+
sa.ForeignKeyConstraint(
|
|
49
|
+
["privacy_request_id"], ["privacyrequest.id"], ondelete="CASCADE"
|
|
50
|
+
),
|
|
51
|
+
sa.PrimaryKeyConstraint("id"),
|
|
52
|
+
)
|
|
53
|
+
op.create_index(
|
|
54
|
+
op.f("ix_masking_secret_id"), "masking_secret", ["id"], unique=False
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def downgrade():
|
|
59
|
+
op.drop_index(op.f("ix_masking_secret_id"), table_name="masking_secret")
|
|
60
|
+
op.drop_table("masking_secret")
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""add finalized fields to privacy request
|
|
2
|
+
|
|
3
|
+
Revision ID: a7065df4dcf1
|
|
4
|
+
Revises: 7e9a2b52f498
|
|
5
|
+
Create Date: 2025-07-01 14:07:36.779437
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "a7065df4dcf1"
|
|
14
|
+
down_revision = "7e9a2b52f498"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
+
op.add_column(
|
|
22
|
+
"privacyrequest",
|
|
23
|
+
sa.Column("finalized_at", sa.DateTime(timezone=True), nullable=True),
|
|
24
|
+
)
|
|
25
|
+
op.add_column(
|
|
26
|
+
"privacyrequest", sa.Column("finalized_by", sa.String(), nullable=True)
|
|
27
|
+
)
|
|
28
|
+
op.create_foreign_key(
|
|
29
|
+
"privacyrequest_fidesuser_id_fkey",
|
|
30
|
+
"privacyrequest",
|
|
31
|
+
"fidesuser",
|
|
32
|
+
["finalized_by"],
|
|
33
|
+
["id"],
|
|
34
|
+
ondelete="SET NULL",
|
|
35
|
+
)
|
|
36
|
+
op.execute(
|
|
37
|
+
"alter type privacyrequeststatus add value 'requires_manual_finalization'"
|
|
38
|
+
)
|
|
39
|
+
# ### end Alembic commands ###
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def downgrade():
|
|
43
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
44
|
+
op.drop_constraint(
|
|
45
|
+
"privacyrequest_fidesuser_id_fkey", "privacyrequest", type_="foreignkey"
|
|
46
|
+
)
|
|
47
|
+
op.drop_column("privacyrequest", "finalized_by")
|
|
48
|
+
op.drop_column("privacyrequest", "finalized_at")
|
|
49
|
+
|
|
50
|
+
op.execute(
|
|
51
|
+
"delete from privacyrequest where status in ('requires_manual_finalization')"
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
op.execute("alter type privacyrequeststatus rename to privacyrequeststatus_old")
|
|
55
|
+
op.execute(
|
|
56
|
+
"create type privacyrequeststatus as enum('identity_unverified', 'requires_input', 'pending', 'in_processing', 'complete', 'pending', 'error', 'paused', 'approved', 'denied', 'canceled', 'awaiting_email_send')"
|
|
57
|
+
)
|
|
58
|
+
op.execute(
|
|
59
|
+
(
|
|
60
|
+
"alter table privacyrequest alter column status type privacyrequeststatus using "
|
|
61
|
+
"status::text::privacyrequeststatus"
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
op.execute("drop type privacyrequeststatus_old")
|
|
65
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""create ManualTaskConditionalDependency table
|
|
2
|
+
|
|
3
|
+
Revision ID: d0031087eacb
|
|
4
|
+
Revises: 9e3dab26f75f
|
|
5
|
+
Create Date: 2025-07-17 21:28:20.937945
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy.dialects import postgresql
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "d0031087eacb"
|
|
15
|
+
down_revision = "9e3dab26f75f"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
22
|
+
|
|
23
|
+
op.create_table(
|
|
24
|
+
"manual_task_conditional_dependency",
|
|
25
|
+
sa.Column(
|
|
26
|
+
"created_at",
|
|
27
|
+
sa.DateTime(timezone=True),
|
|
28
|
+
server_default=sa.text("now()"),
|
|
29
|
+
nullable=True,
|
|
30
|
+
),
|
|
31
|
+
sa.Column(
|
|
32
|
+
"updated_at",
|
|
33
|
+
sa.DateTime(timezone=True),
|
|
34
|
+
server_default=sa.text("now()"),
|
|
35
|
+
nullable=True,
|
|
36
|
+
),
|
|
37
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
38
|
+
sa.Column("manual_task_id", sa.String(), nullable=False),
|
|
39
|
+
sa.Column("parent_id", sa.String(), nullable=True),
|
|
40
|
+
sa.Column(
|
|
41
|
+
"condition_type",
|
|
42
|
+
sa.String(), # Use String instead of Enum to avoid auto-creation
|
|
43
|
+
nullable=False,
|
|
44
|
+
),
|
|
45
|
+
sa.Column("field_address", sa.String(), nullable=True),
|
|
46
|
+
sa.Column("operator", sa.String(), nullable=True),
|
|
47
|
+
sa.Column("value", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
|
48
|
+
sa.Column("logical_operator", sa.String(), nullable=True),
|
|
49
|
+
sa.Column("sort_order", sa.Integer(), nullable=False),
|
|
50
|
+
sa.ForeignKeyConstraint(
|
|
51
|
+
["manual_task_id"], ["manual_task.id"], ondelete="CASCADE"
|
|
52
|
+
),
|
|
53
|
+
sa.ForeignKeyConstraint(
|
|
54
|
+
["parent_id"], ["manual_task_conditional_dependency.id"], ondelete="CASCADE"
|
|
55
|
+
),
|
|
56
|
+
sa.PrimaryKeyConstraint("id"),
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
op.create_index(
|
|
60
|
+
"ix_manual_task_conditional_dependency_condition_type",
|
|
61
|
+
"manual_task_conditional_dependency",
|
|
62
|
+
["condition_type"],
|
|
63
|
+
unique=False,
|
|
64
|
+
)
|
|
65
|
+
op.create_index(
|
|
66
|
+
"ix_manual_task_conditional_dependency_manual_task_id",
|
|
67
|
+
"manual_task_conditional_dependency",
|
|
68
|
+
["manual_task_id"],
|
|
69
|
+
unique=False,
|
|
70
|
+
)
|
|
71
|
+
op.create_index(
|
|
72
|
+
"ix_manual_task_conditional_dependency_parent_id",
|
|
73
|
+
"manual_task_conditional_dependency",
|
|
74
|
+
["parent_id"],
|
|
75
|
+
unique=False,
|
|
76
|
+
)
|
|
77
|
+
op.create_index(
|
|
78
|
+
"ix_manual_task_conditional_dependency_sort_order",
|
|
79
|
+
"manual_task_conditional_dependency",
|
|
80
|
+
["sort_order"],
|
|
81
|
+
unique=False,
|
|
82
|
+
)
|
|
83
|
+
# ### end Alembic commands ###
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def downgrade():
|
|
87
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
88
|
+
op.drop_index(
|
|
89
|
+
"ix_manual_task_conditional_dependency_sort_order",
|
|
90
|
+
table_name="manual_task_conditional_dependency",
|
|
91
|
+
)
|
|
92
|
+
op.drop_index(
|
|
93
|
+
"ix_manual_task_conditional_dependency_parent_id",
|
|
94
|
+
table_name="manual_task_conditional_dependency",
|
|
95
|
+
)
|
|
96
|
+
op.drop_index(
|
|
97
|
+
"ix_manual_task_conditional_dependency_manual_task_id",
|
|
98
|
+
table_name="manual_task_conditional_dependency",
|
|
99
|
+
)
|
|
100
|
+
op.drop_index(
|
|
101
|
+
"ix_manual_task_conditional_dependency_condition_type",
|
|
102
|
+
table_name="manual_task_conditional_dependency",
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
op.drop_table("manual_task_conditional_dependency")
|
|
106
|
+
# ### end Alembic commands ###
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Annotated, Any, Dict, List, Optional
|
|
2
2
|
|
|
3
3
|
import yaml
|
|
4
|
-
from fastapi import Depends, HTTPException, Request
|
|
4
|
+
from fastapi import Depends, HTTPException, Query, Request
|
|
5
5
|
from fastapi.encoders import jsonable_encoder
|
|
6
6
|
from fastapi.params import Security
|
|
7
7
|
from fastapi_pagination import Page, Params
|
|
@@ -68,10 +68,18 @@ from fides.api.models.sql_models import ( # type: ignore[attr-defined] # isort:
|
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
X_YAML = "application/x-yaml"
|
|
71
|
+
MAX_DATASET_CONFIGS_FOR_INTEGRATION_FORM = 1000
|
|
71
72
|
|
|
72
73
|
router = APIRouter(tags=["Dataset Configs"], prefix=V1_URL_PREFIX)
|
|
73
74
|
|
|
74
75
|
|
|
76
|
+
# Custom Params class with higher limit for dataset configs
|
|
77
|
+
class DatasetConfigParams(Params):
|
|
78
|
+
size: int = Query(
|
|
79
|
+
50, ge=1, le=MAX_DATASET_CONFIGS_FOR_INTEGRATION_FORM, description="Page size"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
75
83
|
# Helper method to inject the parent ConnectionConfig into these child routes
|
|
76
84
|
def _get_connection_config(
|
|
77
85
|
connection_key: FidesKey, db: Session = Depends(deps.get_db)
|
|
@@ -131,7 +139,7 @@ def validate_dataset(
|
|
|
131
139
|
response_model=BulkPutDataset,
|
|
132
140
|
)
|
|
133
141
|
def put_dataset_configs(
|
|
134
|
-
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=
|
|
142
|
+
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=MAX_DATASET_CONFIGS_FOR_INTEGRATION_FORM)], # type: ignore
|
|
135
143
|
db: Session = Depends(deps.get_db),
|
|
136
144
|
dataset_config_service: DatasetConfigService = Depends(get_dataset_config_service),
|
|
137
145
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
@@ -181,7 +189,7 @@ def put_dataset_configs(
|
|
|
181
189
|
response_model=BulkPutDataset,
|
|
182
190
|
)
|
|
183
191
|
def patch_dataset_configs(
|
|
184
|
-
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=
|
|
192
|
+
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=MAX_DATASET_CONFIGS_FOR_INTEGRATION_FORM)], # type: ignore
|
|
185
193
|
dataset_config_service: DatasetConfigService = Depends(get_dataset_config_service),
|
|
186
194
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
187
195
|
) -> BulkPutDataset:
|
|
@@ -217,7 +225,7 @@ def patch_dataset_configs(
|
|
|
217
225
|
response_model=BulkPutDataset,
|
|
218
226
|
)
|
|
219
227
|
def patch_datasets(
|
|
220
|
-
datasets: Annotated[List[FideslangDataset], Field(max_length=
|
|
228
|
+
datasets: Annotated[List[FideslangDataset], Field(max_length=1000)], # type: ignore
|
|
221
229
|
dataset_config_service: DatasetConfigService = Depends(get_dataset_config_service),
|
|
222
230
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
223
231
|
) -> BulkPutDataset:
|
|
@@ -367,7 +375,7 @@ def get_dataset(
|
|
|
367
375
|
)
|
|
368
376
|
def get_dataset_configs(
|
|
369
377
|
db: Session = Depends(deps.get_db),
|
|
370
|
-
params:
|
|
378
|
+
params: DatasetConfigParams = Depends(),
|
|
371
379
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
372
380
|
) -> AbstractPage[DatasetConfig]:
|
|
373
381
|
"""Returns all Dataset Configs attached to current Connection Config."""
|
|
@@ -125,7 +125,13 @@ async def create_drp_privacy_request(
|
|
|
125
125
|
"Decrypting identity for DRP privacy request {}", privacy_request.id
|
|
126
126
|
)
|
|
127
127
|
|
|
128
|
-
cache_data(privacy_request,
|
|
128
|
+
cache_data(privacy_request, mapped_identity, None, data)
|
|
129
|
+
|
|
130
|
+
if masking_secrets := policy.generate_masking_secrets():
|
|
131
|
+
logger.info(
|
|
132
|
+
"Caching masking secrets for privacy request {}", privacy_request.id
|
|
133
|
+
)
|
|
134
|
+
privacy_request.persist_masking_secrets(masking_secrets)
|
|
129
135
|
|
|
130
136
|
queue_privacy_request(privacy_request.id)
|
|
131
137
|
|
|
@@ -4,7 +4,7 @@ import csv
|
|
|
4
4
|
import io
|
|
5
5
|
import json
|
|
6
6
|
from collections import defaultdict
|
|
7
|
-
from datetime import datetime
|
|
7
|
+
from datetime import datetime, timezone
|
|
8
8
|
from typing import (
|
|
9
9
|
Annotated,
|
|
10
10
|
Any,
|
|
@@ -146,6 +146,7 @@ from fides.common.api.v1.urn_registry import (
|
|
|
146
146
|
PRIVACY_REQUEST_BULK_SOFT_DELETE,
|
|
147
147
|
PRIVACY_REQUEST_DENY,
|
|
148
148
|
PRIVACY_REQUEST_FILTERED_RESULTS,
|
|
149
|
+
PRIVACY_REQUEST_FINALIZE,
|
|
149
150
|
PRIVACY_REQUEST_MANUAL_WEBHOOK_ACCESS_INPUT,
|
|
150
151
|
PRIVACY_REQUEST_MANUAL_WEBHOOK_ERASURE_INPUT,
|
|
151
152
|
PRIVACY_REQUEST_NOTIFICATIONS,
|
|
@@ -1862,6 +1863,48 @@ def resume_privacy_request_from_requires_input(
|
|
|
1862
1863
|
return privacy_request # type: ignore[return-value]
|
|
1863
1864
|
|
|
1864
1865
|
|
|
1866
|
+
@router.post(
|
|
1867
|
+
PRIVACY_REQUEST_FINALIZE,
|
|
1868
|
+
status_code=HTTP_200_OK,
|
|
1869
|
+
response_model=PrivacyRequestResponse,
|
|
1870
|
+
dependencies=[Security(verify_oauth_client, scopes=[PRIVACY_REQUEST_REVIEW])],
|
|
1871
|
+
)
|
|
1872
|
+
def finalize_privacy_request(
|
|
1873
|
+
privacy_request_id: str,
|
|
1874
|
+
*,
|
|
1875
|
+
db: Session = Depends(deps.get_db),
|
|
1876
|
+
client: ClientDetail = Security(
|
|
1877
|
+
verify_oauth_client,
|
|
1878
|
+
scopes=[PRIVACY_REQUEST_REVIEW],
|
|
1879
|
+
),
|
|
1880
|
+
) -> PrivacyRequestResponse:
|
|
1881
|
+
"""
|
|
1882
|
+
Finalizes a privacy request, moving it from the 'requires_finalization' state to 'complete'.
|
|
1883
|
+
This is done by re-queueing the request, which will then hit the finalization logic in the
|
|
1884
|
+
request runner service. This logic marks the privacy request as complete
|
|
1885
|
+
and sends out any configured messaging to the user.
|
|
1886
|
+
"""
|
|
1887
|
+
privacy_request = get_privacy_request_or_error(db, privacy_request_id)
|
|
1888
|
+
|
|
1889
|
+
if privacy_request.status != PrivacyRequestStatus.requires_manual_finalization:
|
|
1890
|
+
raise HTTPException(
|
|
1891
|
+
status_code=HTTP_400_BAD_REQUEST,
|
|
1892
|
+
detail=f"Cannot manually finalize privacy request '{privacy_request_id}': status is {privacy_request.status}, not requires_manual_finalization.",
|
|
1893
|
+
)
|
|
1894
|
+
|
|
1895
|
+
# Set finalized_by and finalized_at here, so the request runner service knows not to
|
|
1896
|
+
# put the request back into the requires_finalization state.
|
|
1897
|
+
privacy_request.finalized_at = datetime.now(timezone.utc)
|
|
1898
|
+
privacy_request.finalized_by = client.user_id
|
|
1899
|
+
privacy_request.save(db=db)
|
|
1900
|
+
|
|
1901
|
+
queue_privacy_request(
|
|
1902
|
+
privacy_request_id=privacy_request_id,
|
|
1903
|
+
)
|
|
1904
|
+
|
|
1905
|
+
return privacy_request # type: ignore[return-value]
|
|
1906
|
+
|
|
1907
|
+
|
|
1865
1908
|
@router.get(
|
|
1866
1909
|
REQUEST_TASKS,
|
|
1867
1910
|
dependencies=[Security(verify_oauth_client, scopes=[PRIVACY_REQUEST_READ])],
|
|
@@ -6,6 +6,7 @@ from typing import List, Optional
|
|
|
6
6
|
|
|
7
7
|
import jose.exceptions
|
|
8
8
|
from fastapi import Depends, HTTPException, Security
|
|
9
|
+
from fastapi.security import SecurityScopes
|
|
9
10
|
from fastapi_pagination import Page, Params
|
|
10
11
|
from fastapi_pagination.bases import AbstractPage
|
|
11
12
|
from fastapi_pagination.ext.sqlalchemy import paginate
|
|
@@ -39,7 +40,9 @@ from fides.api.oauth.roles import APPROVER, VIEWER
|
|
|
39
40
|
from fides.api.oauth.utils import (
|
|
40
41
|
create_temporary_user_for_login_flow,
|
|
41
42
|
extract_payload,
|
|
43
|
+
extract_token_and_load_client,
|
|
42
44
|
get_current_user,
|
|
45
|
+
has_permissions,
|
|
43
46
|
oauth2_scheme,
|
|
44
47
|
verify_oauth_client,
|
|
45
48
|
)
|
|
@@ -65,6 +68,7 @@ from fides.common.api.scope_registry import (
|
|
|
65
68
|
USER_DELETE,
|
|
66
69
|
USER_PASSWORD_RESET,
|
|
67
70
|
USER_READ,
|
|
71
|
+
USER_READ_OWN,
|
|
68
72
|
USER_UPDATE,
|
|
69
73
|
)
|
|
70
74
|
from fides.common.api.v1 import urn_registry as urls
|
|
@@ -107,6 +111,37 @@ def _validate_current_user(user_id: str, user_from_token: FidesUser) -> None:
|
|
|
107
111
|
)
|
|
108
112
|
|
|
109
113
|
|
|
114
|
+
def verify_user_read_scopes(
|
|
115
|
+
authorization: str = Security(oauth2_scheme),
|
|
116
|
+
db: Session = Depends(get_db),
|
|
117
|
+
) -> ClientDetail:
|
|
118
|
+
"""
|
|
119
|
+
Custom dependency that verifies the user has either USER_READ or USER_READ_OWN scope.
|
|
120
|
+
Returns the client if authorized.
|
|
121
|
+
"""
|
|
122
|
+
token_data, client = extract_token_and_load_client(authorization, db)
|
|
123
|
+
|
|
124
|
+
# Try USER_READ first
|
|
125
|
+
if has_permissions(
|
|
126
|
+
token_data=token_data,
|
|
127
|
+
client=client,
|
|
128
|
+
endpoint_scopes=SecurityScopes([USER_READ]),
|
|
129
|
+
):
|
|
130
|
+
return client
|
|
131
|
+
|
|
132
|
+
if has_permissions(
|
|
133
|
+
token_data=token_data,
|
|
134
|
+
client=client,
|
|
135
|
+
endpoint_scopes=SecurityScopes([USER_READ_OWN]),
|
|
136
|
+
):
|
|
137
|
+
return client
|
|
138
|
+
|
|
139
|
+
raise HTTPException(
|
|
140
|
+
status_code=HTTP_403_FORBIDDEN,
|
|
141
|
+
detail="Not authorized.",
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
|
|
110
145
|
@router.put(
|
|
111
146
|
urls.USER_DETAIL,
|
|
112
147
|
dependencies=[Security(verify_oauth_client)],
|
|
@@ -498,14 +533,38 @@ def delete_user(
|
|
|
498
533
|
|
|
499
534
|
@router.get(
|
|
500
535
|
urls.USER_DETAIL,
|
|
501
|
-
dependencies=[Security(
|
|
536
|
+
dependencies=[Security(verify_user_read_scopes)],
|
|
502
537
|
response_model=UserResponse,
|
|
503
538
|
)
|
|
504
|
-
def get_user(
|
|
505
|
-
|
|
539
|
+
def get_user(
|
|
540
|
+
*,
|
|
541
|
+
db: Session = Depends(get_db),
|
|
542
|
+
user_id: str,
|
|
543
|
+
client: ClientDetail = Security(verify_user_read_scopes),
|
|
544
|
+
authorization: str = Security(oauth2_scheme),
|
|
545
|
+
) -> FidesUser:
|
|
546
|
+
"""Returns a User based on an Id. Users with USER_READ_OWN scope can only access their own data."""
|
|
506
547
|
user: Optional[FidesUser] = FidesUser.get_by_key_or_id(db, data={"id": user_id})
|
|
507
548
|
if user is None:
|
|
508
549
|
raise HTTPException(status_code=HTTP_404_NOT_FOUND, detail="User not found")
|
|
550
|
+
token_data, _ = extract_token_and_load_client(authorization, db)
|
|
551
|
+
# Check if user has USER_READ_OWN scope and is trying to access someone else's data
|
|
552
|
+
# The verify_user_read_scopes dependency already verified the user has either USER_READ or USER_READ_OWN
|
|
553
|
+
# We need to check if they have USER_READ_OWN and are accessing their own data
|
|
554
|
+
if has_permissions(
|
|
555
|
+
token_data=token_data,
|
|
556
|
+
client=client,
|
|
557
|
+
endpoint_scopes=SecurityScopes([USER_READ]),
|
|
558
|
+
):
|
|
559
|
+
logger.debug("Returning user with id: '{}'.", user_id)
|
|
560
|
+
return user
|
|
561
|
+
|
|
562
|
+
# User has USER_READ_OWN scope, check if they're accessing their own data
|
|
563
|
+
if user.id != client.user_id:
|
|
564
|
+
raise HTTPException(
|
|
565
|
+
status_code=HTTP_403_FORBIDDEN,
|
|
566
|
+
detail="You can only access your own user data with USER_READ_OWN scope.",
|
|
567
|
+
)
|
|
509
568
|
|
|
510
569
|
logger.debug("Returning user with id: '{}'.", user_id)
|
|
511
570
|
return user
|
|
@@ -513,7 +572,7 @@ def get_user(*, db: Session = Depends(get_db), user_id: str) -> FidesUser:
|
|
|
513
572
|
|
|
514
573
|
@router.get(
|
|
515
574
|
urls.USERS,
|
|
516
|
-
dependencies=[Security(
|
|
575
|
+
dependencies=[Security(verify_user_read_scopes)],
|
|
517
576
|
response_model=Page[UserResponse],
|
|
518
577
|
)
|
|
519
578
|
def get_users(
|
|
@@ -521,11 +580,28 @@ def get_users(
|
|
|
521
580
|
db: Session = Depends(get_db),
|
|
522
581
|
params: Params = Depends(),
|
|
523
582
|
username: Optional[str] = None,
|
|
583
|
+
client: ClientDetail = Security(verify_user_read_scopes),
|
|
584
|
+
authorization: str = Security(oauth2_scheme),
|
|
524
585
|
) -> AbstractPage[FidesUser]:
|
|
525
|
-
"""Returns a paginated list of
|
|
586
|
+
"""Returns a paginated list of users. Users with USER_READ_OWN scope only see their own data."""
|
|
526
587
|
query = FidesUser.query(db)
|
|
527
|
-
|
|
528
|
-
|
|
588
|
+
|
|
589
|
+
# Check if user has USER_READ_OWN scope and filter accordingly
|
|
590
|
+
# The verify_user_read_scopes dependency already verified the user has either USER_READ or USER_READ_OWN
|
|
591
|
+
token_data, _ = extract_token_and_load_client(authorization, db)
|
|
592
|
+
if has_permissions(
|
|
593
|
+
token_data=token_data,
|
|
594
|
+
client=client,
|
|
595
|
+
endpoint_scopes=SecurityScopes([USER_READ]),
|
|
596
|
+
):
|
|
597
|
+
# User has USER_READ scope, can see all users
|
|
598
|
+
if username:
|
|
599
|
+
query = query.filter(FidesUser.username.ilike(f"%{escape_like(username)}%"))
|
|
600
|
+
else:
|
|
601
|
+
# User has USER_READ_OWN scope, only show their own data
|
|
602
|
+
query = query.filter(FidesUser.id == client.user_id)
|
|
603
|
+
if username:
|
|
604
|
+
query = query.filter(FidesUser.username.ilike(f"%{escape_like(username)}%"))
|
|
529
605
|
|
|
530
606
|
logger.debug("Returning a paginated list of users.")
|
|
531
607
|
|
fides/api/app_setup.py
CHANGED
|
@@ -171,8 +171,9 @@ async def run_database_startup(app: FastAPI) -> None:
|
|
|
171
171
|
if CONFIG.database.automigrate:
|
|
172
172
|
try:
|
|
173
173
|
configure_db(CONFIG.database.sync_database_uri)
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
if not CONFIG.test_mode:
|
|
175
|
+
with get_autoclose_db_session() as session:
|
|
176
|
+
seed_db(session)
|
|
176
177
|
if CONFIG.database.load_samples:
|
|
177
178
|
async with get_async_autoclose_db_session() as async_session:
|
|
178
179
|
await seed.load_samples(async_session)
|
fides/api/common_exceptions.py
CHANGED
|
@@ -283,6 +283,10 @@ class MalisciousUrlException(Exception):
|
|
|
283
283
|
"""Fides has detected a potentially maliscious URL."""
|
|
284
284
|
|
|
285
285
|
|
|
286
|
+
class MaskingSecretsExpired(BaseException):
|
|
287
|
+
"""The cached masking secrets have expired for the given privacy request."""
|
|
288
|
+
|
|
289
|
+
|
|
286
290
|
class AuthenticationError(HTTPException):
|
|
287
291
|
"""To be raised when attempting to fetch an access token using
|
|
288
292
|
invalid credentials.
|
fides/api/db/base.py
CHANGED
|
@@ -33,6 +33,7 @@ from fides.api.models.identity_salt import IdentitySalt
|
|
|
33
33
|
from fides.api.models.location_regulation_selections import LocationRegulationSelections
|
|
34
34
|
from fides.api.models.manual_task import (
|
|
35
35
|
ManualTask,
|
|
36
|
+
ManualTaskConditionalDependency,
|
|
36
37
|
ManualTaskConfig,
|
|
37
38
|
ManualTaskConfigField,
|
|
38
39
|
ManualTaskInstance,
|
fides/api/db/database.py
CHANGED
fides/api/graph/execution.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from typing import Any, Callable, Dict, List, Optional, Set, Tuple
|
|
2
2
|
|
|
3
3
|
from fideslang.validation import FidesKey
|
|
4
|
+
from loguru import logger
|
|
4
5
|
|
|
5
6
|
from fides.api.graph.config import (
|
|
6
7
|
Collection,
|
|
@@ -117,6 +118,8 @@ class ExecutionNode(Contextualizable): # pylint: disable=too-many-instance-attr
|
|
|
117
118
|
The values are cast based on field types, if those types are specified.
|
|
118
119
|
"""
|
|
119
120
|
out = {}
|
|
121
|
+
failed_conversions: Dict[str, Dict[str, Any]] = {}
|
|
122
|
+
|
|
120
123
|
for key, values in input_data.items():
|
|
121
124
|
path: FieldPath = FieldPath.parse(key)
|
|
122
125
|
field: Optional[Field] = self.collection.field(path)
|
|
@@ -126,4 +129,31 @@ class ExecutionNode(Contextualizable): # pylint: disable=too-many-instance-attr
|
|
|
126
129
|
filtered = list(filter(lambda x: x is not None, cast_values))
|
|
127
130
|
if filtered:
|
|
128
131
|
out[key] = filtered
|
|
132
|
+
elif values: # Had input values but all failed conversion
|
|
133
|
+
# Track conversion failures for logging
|
|
134
|
+
failed_conversions[key] = {"field": field, "input_values": values}
|
|
135
|
+
|
|
136
|
+
# Log conversion failures if any occurred
|
|
137
|
+
if failed_conversions:
|
|
138
|
+
field_details = []
|
|
139
|
+
for field_name, failure_info in failed_conversions.items():
|
|
140
|
+
field = failure_info["field"]
|
|
141
|
+
values = failure_info["input_values"]
|
|
142
|
+
|
|
143
|
+
expected_type = field.data_type() if field else "unknown"
|
|
144
|
+
actual_types = {type(v).__name__ for v in values if v is not None}
|
|
145
|
+
actual_type_str = (
|
|
146
|
+
", ".join(sorted(actual_types)) if actual_types else "NoneType"
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
field_details.append(
|
|
150
|
+
f"{field_name} (expected: {expected_type}, got: {actual_type_str})"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
logger.warning(
|
|
154
|
+
"Type conversion failures for {}: {}",
|
|
155
|
+
self.address,
|
|
156
|
+
"; ".join(field_details),
|
|
157
|
+
)
|
|
158
|
+
|
|
129
159
|
return out
|
fides/api/graph/graph.py
CHANGED
|
@@ -180,8 +180,19 @@ class DatasetGraph:
|
|
|
180
180
|
this is a destructive operation on the input datasets, as it
|
|
181
181
|
will alter references within them"""
|
|
182
182
|
|
|
183
|
-
# build nodes
|
|
184
|
-
nodes = [
|
|
183
|
+
# build nodes, filtering out collections with skip_processing=True
|
|
184
|
+
nodes = []
|
|
185
|
+
for dr in datasets:
|
|
186
|
+
for ds in dr.collections:
|
|
187
|
+
if ds.skip_processing:
|
|
188
|
+
logger.debug(
|
|
189
|
+
"Skipping collection {} on dataset {} marked with skip_processing",
|
|
190
|
+
ds.name,
|
|
191
|
+
dr.name,
|
|
192
|
+
)
|
|
193
|
+
continue
|
|
194
|
+
nodes.append(Node(dr, ds))
|
|
195
|
+
|
|
185
196
|
self.nodes: dict[CollectionAddress, Node] = {
|
|
186
197
|
node.address: node for node in nodes
|
|
187
198
|
}
|