ethyca-fides 2.66.2b2__py2.py3-none-any.whl → 2.66.2rc0__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.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/RECORD +259 -270
- fides/_version.py +3 -3
- fides/api/api/v1/endpoints/dataset_config_endpoints.py +5 -13
- fides/api/api/v1/endpoints/drp_endpoints.py +1 -7
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +1 -44
- fides/api/api/v1/endpoints/user_endpoints.py +7 -83
- fides/api/app_setup.py +2 -3
- fides/api/common_exceptions.py +0 -4
- fides/api/db/base.py +0 -1
- fides/api/db/database.py +1 -1
- fides/api/graph/execution.py +0 -30
- fides/api/graph/traversal.py +1 -1
- fides/api/models/{manual_task/manual_task.py → manual_task.py} +0 -10
- fides/api/models/policy.py +0 -23
- fides/api/models/privacy_request/execution_log.py +0 -1
- fides/api/models/privacy_request/privacy_request.py +13 -31
- fides/api/oauth/roles.py +0 -2
- fides/api/schemas/application_config.py +1 -11
- fides/api/schemas/masking/masking_secrets.py +1 -1
- fides/api/schemas/policy.py +0 -1
- fides/api/schemas/privacy_request.py +0 -5
- fides/api/service/connectors/base_connector.py +0 -1
- fides/api/service/connectors/bigquery_connector.py +19 -67
- fides/api/service/connectors/dynamodb_connector.py +1 -2
- fides/api/service/connectors/fides_connector.py +0 -1
- fides/api/service/connectors/http_connector.py +0 -1
- fides/api/service/connectors/manual_task_connector.py +0 -1
- fides/api/service/connectors/manual_webhook_connector.py +1 -2
- fides/api/service/connectors/mongodb_connector.py +0 -1
- fides/api/service/connectors/okta_connector.py +0 -1
- fides/api/service/connectors/query_configs/bigquery_query_config.py +32 -91
- fides/api/service/connectors/rds_mysql_connector.py +0 -1
- fides/api/service/connectors/rds_postgres_connector.py +0 -1
- fides/api/service/connectors/s3_connector.py +0 -1
- fides/api/service/connectors/saas_connector.py +0 -1
- fides/api/service/connectors/scylla_connector.py +0 -1
- fides/api/service/connectors/sql_connector.py +4 -36
- fides/api/service/connectors/website_connector.py +0 -1
- fides/api/service/privacy_request/request_runner_service.py +53 -142
- fides/api/service/privacy_request/request_service.py +22 -1
- fides/api/task/create_request_tasks.py +1 -1
- fides/api/task/deprecated_graph_task.py +6 -24
- fides/api/task/execute_request_tasks.py +12 -89
- fides/api/task/filter_results.py +1 -1
- fides/api/task/graph_task.py +3 -38
- fides/api/task/manual/manual_task_graph_task.py +126 -118
- fides/api/task/manual/manual_task_utils.py +105 -52
- fides/api/util/cache.py +0 -5
- fides/api/util/encryption/secrets_util.py +18 -48
- fides/common/api/scope_registry.py +0 -3
- fides/common/api/v1/urn_registry.py +1 -1
- fides/config/execution_settings.py +0 -4
- fides/config/utils.py +0 -1
- fides/service/privacy_request/privacy_request_service.py +1 -6
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/8108ANFxs99VY7KZ_Xev2/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-e601e737e3cc7a0e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{203-4e777c324a01dbec.js → 203-5a663f465ba26bb4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/431-34f0b91c26f8d9ab.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6780-e3d40aa17a4bf2e9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-f2c3d287bac00395.js → _app-39ccb07327c2c5d5.js} +56 -56
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2265ecb899d45fbc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5d522637871ac6c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-f10a7dcf7541c865.js → integrations-e2d5d7e2a5265e68.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-05616e2ae20ff4f8.js → table-migration-69ad86b7a8a9a115.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-32600543eb7b584f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-10ce53ea356f8bad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-5501bbb129fee9c4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cbe4c8f9096b6543.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-ff5738706da07801.js +1 -0
- fides/ui-build/static/admin/_next/static/css/2cadb5f62dcd7c2b.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{23cf870196941c9a.css → 5bfb2473e5701527.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/{8bc1833f1fa53ff0.css → 94965f224bc991e9.css} +1 -1
- 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/api/alembic/migrations/versions/7e9a2b52f498_adding_masking_secrets.py +0 -60
- fides/api/alembic/migrations/versions/a7065df4dcf1_add_finalized_fields_to_privacy_request.py +0 -65
- fides/api/alembic/migrations/versions/d0031087eacb_create_manualtaskconditionaldependency_.py +0 -106
- fides/api/models/manual_task/__init__.py +0 -2
- fides/api/models/manual_task/conditional_dependency.py +0 -144
- fides/api/models/masking_secret.py +0 -72
- fides/api/task/conditional_dependencies/__init__.py +0 -0
- fides/api/task/conditional_dependencies/evaluator.py +0 -109
- fides/api/task/conditional_dependencies/schemas.py +0 -54
- fides/api/task/manual/manual_task_address.py +0 -46
- fides/ui-build/static/admin/_next/static/EACyrT3Bb5qN9POVQHTCB/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-6f35f58cd08b04ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-ade3e312fac3430b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-a00c87739acc004d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8237-55049f8f5fd5e058.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-71579a199158952e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-7d3115059503b904.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-c73497fc333c324d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-7498d1d5974a78b0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-2d3a2d967767a131.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a9068df48bdee05.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-fe58cebba358119d.js +0 -1
- fides/ui-build/static/admin/_next/static/css/79e296c724c1568c.css +0 -1
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{EACyrT3Bb5qN9POVQHTCB → 8108ANFxs99VY7KZ_Xev2}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-86f1547ac40a5cdf.js → 2921-455e6357b74d2f76.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3450-1cc2bb07ed142203.js → 3450-0ba194991d0cca88.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3855-e2fa6db53d32c3de.js → 3855-e172870d3e21b0dd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3872-84b7e380b88b4454.js → 3872-46cebf7ec1b31a2b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-13a6b4da2d51bf8f.js → 3923-6cc911dafccc5f63.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-3cc1fee61494e3bd.js → 401-1b529d5800aa1f3a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{409-45a125437261580c.js → 409-a257e14acebcd73b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4121-f50675521dfee6eb.js → 4121-2bc09fc4ddbfe5cb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4230-840c287045c88b34.js → 4230-60100f7ef3ddcde1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4608-a8e3100e2806dbff.js → 4608-bbb7bf511a05c3c2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5309-1172322bf91b5d57.js → 5309-b2c4803370634ff8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5574-9312f97b637d9ee2.js → 5574-b13021775a15bfd2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6084-5d7598b7bcb548cf.js → 6084-7178ff6ea6822475.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6662-efb2cf74641647f2.js → 6662-507be5d46e5b719b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-4f8bf6558f8c6a46.js → 6853-2ad3e08fe6f9f5f2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6882-586b84aeb02d5830.js → 6882-6af16fef26c21e06.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-34e062e4bffc7e71.js → 6954-bb875d9ac89f6030.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7476-d206c11823c91088.js → 7476-281ee9a8286556f3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-b1c93688013ef013.js → 7630-9aac73191ed5ed13.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{787-cbe2d0bfb513d90a.js → 787-fb41002f797eb2df.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{79-3db1941d274f40c7.js → 79-7e87aff851423d4a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-98d4bd68909fbe1e.js → 796-329a5f823ec258a5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9046-c8233981762585b4.js → 9046-5c4c22c375de25b1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9226-72ad691ca57b83ef.js → 9226-746771d47dff6266.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-3c578665c6d3b21d.js → 9826-111aaee8bd8dbd09.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9951-595d0f1588215081.js → 9951-9b753ad7c3f51bdf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-2d803dab6a00f353.js → 404-aece2c920ea14514.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-acb59f8b5e97512a.js → manual-98777246bec9dc2a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-8ff7f37913ad736a.js → multiple-dc75dc6e37e52f05.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-0943633a8e422695.js → add-systems-a71c0aff4e0e6535.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-d00c9034cdeb0236.js → add-vendors-24d226b5a8de5c74.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-0e1ca0f4c8e7f4da.js → configure-6a8ef51138ac926a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-fc3a011154a2e1de.js → [id]-1edf582ba3cd3bbb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-09d4408014bcfe1c.js → privacy-experience-685771e5f7196d87.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d67542783ef5ddac.js → [id]-6ccedc70dc447089.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-3f20e8a316bb3d5b.js → new-944bca1cc57985b5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-23e9dcd4590312d2.js → privacy-notices-84f4bd14ce8673bc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-057cad65e7414a44.js → properties-6f86ab63a08a6528.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-8f891957c8944137.js → reporting-afdbd4665657cfa1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-e17c56eec8d91371.js → consent-73d3cbf68f7c3a31.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-99c9092d65c94807.js → [resourceUrn]-11d52f1570759c4d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-80a6cc8e8573514a.js → [projectUrn]-6ba9e160dae64695.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-774fecea22ba8852.js → projects-32eac8bbd217615a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-f6bd6aff389cb9fe.js → [resourceUrn]-b83afa5565d0c84e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-6c3714ee97a718c1.js → resources-7648bbd4f6711e4d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-8a7f9285da66b965.js → data-catalog-6f630d42ac9fb6b4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-85e140788e251272.js → action-center-9ddb52ebb7ac4c71.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-5af9381f02b2aff6.js → activity-9aa744d56cdacb0d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-31e6c54794a9883e.js → [resourceUrn]-393e20924c83373e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-2822a423a7ad0550.js → detection-8733807dad4bc96e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6421ce247549c5d6.js → [resourceUrn]-14bd7500362ff224.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-3eac407ac5181a3c.js → discovery-9e7dfd5a6acc2e8f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-d2b275d83089820d.js → datamap-7674b97d655c193b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-1c98bd0959d9570a.js → [...subfieldNames]-c0d2bfd465df20e0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-e548cabda7da32c9.js → [collectionName]-28280a8a39a6e37c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-a8e8b5f4ee7af86c.js → [datasetId]-006b695e5af5ef24.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-513c862c3a707735.js → new-82fb246d87e58ebd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-747b7a13289f1cd7.js → dataset-20165c31ab1bc7cf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-3d22525b3c327b2e.js → [id]-b4a6bcc87d126840.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-d2cad97495e86adb.js → new-f95d7b0bbfc58f5a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-0f29b47402292070.js → datastore-connection-c391c6fad56eec48.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-12ac3e317fc86f21.js → index-1919aab9e5834b51.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-f9c0eac932188593.js → [id]-0a58aee2d1e7fa01.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-5627d0d0668077f9.js → [id]-53fecfb9dd6a1e0c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-feca66ad5c5fe54a.js → add-template-76b01cec5fde10a9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-c1bd3e7adbe8d2d3.js → messaging-5094ffea13f32ed9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-64a322d01aae5ca7.js → ant-components-5c08e8447c45ce44.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-8bca16a7726e7eb2.js → AntForm-06ad5f34585480aa.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-b0f246fc3b67ebf7.js → FormikAntFormItem-6f071c2bc9446cb0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-1a0852b090bfc392.js → FormikControlled-efcc38c58991ac9e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-11f3de1b45e36583.js → FormikField-430ba5c979abfb7c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-1b73a1c2b6c6285f.js → forms-5c561880bf131afb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-e551a860ec727802.js → configure-d888a69a3bbe040e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-dd99183f93763ae4.js → [id]-d3d8e3d7583ec635.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-0bdbc1fcbf553b8f.js → add-property-1af10ed303815d46.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-e959378bb32b6b73.js → properties-cebc0dc186be499a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-2a98bd257edd8f47.js → datamap-e130c0197362e8f3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-8f98a4895e74725e.js → alpha-5e1322de868d615e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-8155a35a62fdb5ae.js → about-241f95e372b65d0f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-668d74c041d74650.js → [purpose_id]-fc201657f4a782c7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-a989532a12c40dcf.js → consent-c2d39cba8396ef3a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-45bea76ff7eda3cb.js → custom-fields-d992103cc55901ae.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-51333dbd21cb37c8.js → domain-records-41242f805599feda.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-bde86e5f6c09da5a.js → domains-2e885f74c92f669c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-4f9a5cc8bea7725b.js → email-templates-ff112655ad5f41e5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-6946e78a5d43e654.js → locations-023e1895552817de.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-55a10e01dffc8039.js → organization-ac403c0886b20e20.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-102efd9199e87124.js → regulations-86062a18e081a52a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-f91f22cf96566ed4.js → test-datasets-7a3396ac819c7904.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-d4a57ea18935dd70.js → [id]-8314a819837f5b2a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-648a0ff4920579ce.js → systems-21f423a7c417aa9d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-0b9d1a24188f65a9.js → taxonomy-6387fcc8cce872eb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-bc4eb541906781e6.js → new-a2524414e968f862.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-45bfa04e45a7d13f.js → user-management-173ac3a1ed2b05a6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{webpack-63a0c45b150a1037.js → webpack-ff0cd6bff75588da.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-29T12:
|
|
11
|
+
"date": "2025-07-29T12:24:25-0400",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.66.
|
|
14
|
+
"full-revisionid": "0d085cb0c09afcc5309f42f6c24de184d443af13",
|
|
15
|
+
"version": "2.66.2rc0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -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,
|
|
4
|
+
from fastapi import Depends, HTTPException, 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,18 +68,10 @@ 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
|
|
72
71
|
|
|
73
72
|
router = APIRouter(tags=["Dataset Configs"], prefix=V1_URL_PREFIX)
|
|
74
73
|
|
|
75
74
|
|
|
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
|
-
|
|
83
75
|
# Helper method to inject the parent ConnectionConfig into these child routes
|
|
84
76
|
def _get_connection_config(
|
|
85
77
|
connection_key: FidesKey, db: Session = Depends(deps.get_db)
|
|
@@ -139,7 +131,7 @@ def validate_dataset(
|
|
|
139
131
|
response_model=BulkPutDataset,
|
|
140
132
|
)
|
|
141
133
|
def put_dataset_configs(
|
|
142
|
-
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=
|
|
134
|
+
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=50)], # type: ignore
|
|
143
135
|
db: Session = Depends(deps.get_db),
|
|
144
136
|
dataset_config_service: DatasetConfigService = Depends(get_dataset_config_service),
|
|
145
137
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
@@ -189,7 +181,7 @@ def put_dataset_configs(
|
|
|
189
181
|
response_model=BulkPutDataset,
|
|
190
182
|
)
|
|
191
183
|
def patch_dataset_configs(
|
|
192
|
-
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=
|
|
184
|
+
dataset_pairs: Annotated[List[DatasetConfigCtlDataset], Field(max_length=50)], # type: ignore
|
|
193
185
|
dataset_config_service: DatasetConfigService = Depends(get_dataset_config_service),
|
|
194
186
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
195
187
|
) -> BulkPutDataset:
|
|
@@ -225,7 +217,7 @@ def patch_dataset_configs(
|
|
|
225
217
|
response_model=BulkPutDataset,
|
|
226
218
|
)
|
|
227
219
|
def patch_datasets(
|
|
228
|
-
datasets: Annotated[List[FideslangDataset], Field(max_length=
|
|
220
|
+
datasets: Annotated[List[FideslangDataset], Field(max_length=50)], # type: ignore
|
|
229
221
|
dataset_config_service: DatasetConfigService = Depends(get_dataset_config_service),
|
|
230
222
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
231
223
|
) -> BulkPutDataset:
|
|
@@ -375,7 +367,7 @@ def get_dataset(
|
|
|
375
367
|
)
|
|
376
368
|
def get_dataset_configs(
|
|
377
369
|
db: Session = Depends(deps.get_db),
|
|
378
|
-
params:
|
|
370
|
+
params: Params = Depends(),
|
|
379
371
|
connection_config: ConnectionConfig = Depends(_get_connection_config),
|
|
380
372
|
) -> AbstractPage[DatasetConfig]:
|
|
381
373
|
"""Returns all Dataset Configs attached to current Connection Config."""
|
|
@@ -125,13 +125,7 @@ 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, 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)
|
|
128
|
+
cache_data(privacy_request, policy, mapped_identity, None, data)
|
|
135
129
|
|
|
136
130
|
queue_privacy_request(privacy_request.id)
|
|
137
131
|
|
|
@@ -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
|
|
8
8
|
from typing import (
|
|
9
9
|
Annotated,
|
|
10
10
|
Any,
|
|
@@ -146,7 +146,6 @@ 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,
|
|
150
149
|
PRIVACY_REQUEST_MANUAL_WEBHOOK_ACCESS_INPUT,
|
|
151
150
|
PRIVACY_REQUEST_MANUAL_WEBHOOK_ERASURE_INPUT,
|
|
152
151
|
PRIVACY_REQUEST_NOTIFICATIONS,
|
|
@@ -1863,48 +1862,6 @@ def resume_privacy_request_from_requires_input(
|
|
|
1863
1862
|
return privacy_request # type: ignore[return-value]
|
|
1864
1863
|
|
|
1865
1864
|
|
|
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
|
-
|
|
1908
1865
|
@router.get(
|
|
1909
1866
|
REQUEST_TASKS,
|
|
1910
1867
|
dependencies=[Security(verify_oauth_client, scopes=[PRIVACY_REQUEST_READ])],
|
|
@@ -6,7 +6,6 @@ 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
|
|
10
9
|
from fastapi_pagination import Page, Params
|
|
11
10
|
from fastapi_pagination.bases import AbstractPage
|
|
12
11
|
from fastapi_pagination.ext.sqlalchemy import paginate
|
|
@@ -40,9 +39,7 @@ from fides.api.oauth.roles import APPROVER, VIEWER
|
|
|
40
39
|
from fides.api.oauth.utils import (
|
|
41
40
|
create_temporary_user_for_login_flow,
|
|
42
41
|
extract_payload,
|
|
43
|
-
extract_token_and_load_client,
|
|
44
42
|
get_current_user,
|
|
45
|
-
has_permissions,
|
|
46
43
|
oauth2_scheme,
|
|
47
44
|
verify_oauth_client,
|
|
48
45
|
)
|
|
@@ -68,7 +65,6 @@ from fides.common.api.scope_registry import (
|
|
|
68
65
|
USER_DELETE,
|
|
69
66
|
USER_PASSWORD_RESET,
|
|
70
67
|
USER_READ,
|
|
71
|
-
USER_READ_OWN,
|
|
72
68
|
USER_UPDATE,
|
|
73
69
|
)
|
|
74
70
|
from fides.common.api.v1 import urn_registry as urls
|
|
@@ -111,37 +107,6 @@ def _validate_current_user(user_id: str, user_from_token: FidesUser) -> None:
|
|
|
111
107
|
)
|
|
112
108
|
|
|
113
109
|
|
|
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
|
-
|
|
145
110
|
@router.put(
|
|
146
111
|
urls.USER_DETAIL,
|
|
147
112
|
dependencies=[Security(verify_oauth_client)],
|
|
@@ -533,38 +498,14 @@ def delete_user(
|
|
|
533
498
|
|
|
534
499
|
@router.get(
|
|
535
500
|
urls.USER_DETAIL,
|
|
536
|
-
dependencies=[Security(
|
|
501
|
+
dependencies=[Security(verify_oauth_client, scopes=[USER_READ])],
|
|
537
502
|
response_model=UserResponse,
|
|
538
503
|
)
|
|
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."""
|
|
504
|
+
def get_user(*, db: Session = Depends(get_db), user_id: str) -> FidesUser:
|
|
505
|
+
"""Returns a User based on an Id"""
|
|
547
506
|
user: Optional[FidesUser] = FidesUser.get_by_key_or_id(db, data={"id": user_id})
|
|
548
507
|
if user is None:
|
|
549
508
|
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
|
-
)
|
|
568
509
|
|
|
569
510
|
logger.debug("Returning user with id: '{}'.", user_id)
|
|
570
511
|
return user
|
|
@@ -572,7 +513,7 @@ def get_user(
|
|
|
572
513
|
|
|
573
514
|
@router.get(
|
|
574
515
|
urls.USERS,
|
|
575
|
-
dependencies=[Security(
|
|
516
|
+
dependencies=[Security(verify_oauth_client, scopes=[USER_READ])],
|
|
576
517
|
response_model=Page[UserResponse],
|
|
577
518
|
)
|
|
578
519
|
def get_users(
|
|
@@ -580,28 +521,11 @@ def get_users(
|
|
|
580
521
|
db: Session = Depends(get_db),
|
|
581
522
|
params: Params = Depends(),
|
|
582
523
|
username: Optional[str] = None,
|
|
583
|
-
client: ClientDetail = Security(verify_user_read_scopes),
|
|
584
|
-
authorization: str = Security(oauth2_scheme),
|
|
585
524
|
) -> AbstractPage[FidesUser]:
|
|
586
|
-
"""Returns a paginated list of users
|
|
525
|
+
"""Returns a paginated list of all users"""
|
|
587
526
|
query = FidesUser.query(db)
|
|
588
|
-
|
|
589
|
-
|
|
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)}%"))
|
|
527
|
+
if username:
|
|
528
|
+
query = query.filter(FidesUser.username.ilike(f"%{escape_like(username)}%"))
|
|
605
529
|
|
|
606
530
|
logger.debug("Returning a paginated list of users.")
|
|
607
531
|
|
fides/api/app_setup.py
CHANGED
|
@@ -171,9 +171,8 @@ 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
|
-
|
|
176
|
-
seed_db(session)
|
|
174
|
+
with get_autoclose_db_session() as session:
|
|
175
|
+
seed_db(session)
|
|
177
176
|
if CONFIG.database.load_samples:
|
|
178
177
|
async with get_async_autoclose_db_session() as async_session:
|
|
179
178
|
await seed.load_samples(async_session)
|
fides/api/common_exceptions.py
CHANGED
|
@@ -283,10 +283,6 @@ 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
|
-
|
|
290
286
|
class AuthenticationError(HTTPException):
|
|
291
287
|
"""To be raised when attempting to fetch an access token using
|
|
292
288
|
invalid credentials.
|
fides/api/db/base.py
CHANGED
|
@@ -33,7 +33,6 @@ 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,
|
|
37
36
|
ManualTaskConfig,
|
|
38
37
|
ManualTaskConfigField,
|
|
39
38
|
ManualTaskInstance,
|
fides/api/db/database.py
CHANGED
fides/api/graph/execution.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
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
|
|
5
4
|
|
|
6
5
|
from fides.api.graph.config import (
|
|
7
6
|
Collection,
|
|
@@ -118,8 +117,6 @@ class ExecutionNode(Contextualizable): # pylint: disable=too-many-instance-attr
|
|
|
118
117
|
The values are cast based on field types, if those types are specified.
|
|
119
118
|
"""
|
|
120
119
|
out = {}
|
|
121
|
-
failed_conversions: Dict[str, Dict[str, Any]] = {}
|
|
122
|
-
|
|
123
120
|
for key, values in input_data.items():
|
|
124
121
|
path: FieldPath = FieldPath.parse(key)
|
|
125
122
|
field: Optional[Field] = self.collection.field(path)
|
|
@@ -129,31 +126,4 @@ class ExecutionNode(Contextualizable): # pylint: disable=too-many-instance-attr
|
|
|
129
126
|
filtered = list(filter(lambda x: x is not None, cast_values))
|
|
130
127
|
if filtered:
|
|
131
128
|
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
|
-
|
|
159
129
|
return out
|
fides/api/graph/traversal.py
CHANGED
|
@@ -115,7 +115,7 @@ class BaseTraversal:
|
|
|
115
115
|
)
|
|
116
116
|
|
|
117
117
|
# Ensure manual_task collections execute right after ROOT
|
|
118
|
-
from fides.api.task.manual.
|
|
118
|
+
from fides.api.task.manual.manual_task_utils import ManualTaskAddress
|
|
119
119
|
|
|
120
120
|
for addr in self.traversal_node_dict.keys():
|
|
121
121
|
if ManualTaskAddress.is_manual_task_address(addr):
|
|
@@ -26,9 +26,6 @@ from fides.api.schemas.base_class import FidesSchema
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
27
27
|
from fides.api.models.attachment import Attachment
|
|
28
28
|
from fides.api.models.fides_user import FidesUser
|
|
29
|
-
from fides.api.models.manual_task.conditional_dependency import (
|
|
30
|
-
ManualTaskConditionalDependency,
|
|
31
|
-
)
|
|
32
29
|
|
|
33
30
|
# ------------------------------------------------------------
|
|
34
31
|
# Enums
|
|
@@ -245,13 +242,6 @@ class ManualTask(Base):
|
|
|
245
242
|
viewonly=True, # No cascade delete - submissions are historical data
|
|
246
243
|
)
|
|
247
244
|
|
|
248
|
-
conditional_dependencies = relationship(
|
|
249
|
-
"ManualTaskConditionalDependency",
|
|
250
|
-
back_populates="task",
|
|
251
|
-
uselist=True,
|
|
252
|
-
cascade="all, delete-orphan",
|
|
253
|
-
)
|
|
254
|
-
|
|
255
245
|
# Properties
|
|
256
246
|
@property
|
|
257
247
|
def assigned_users(self) -> list[str]:
|
fides/api/models/policy.py
CHANGED
|
@@ -25,9 +25,7 @@ from fides.api.models.client import ClientDetail
|
|
|
25
25
|
from fides.api.models.connectionconfig import ConnectionConfig
|
|
26
26
|
from fides.api.models.sql_models import DataCategory # type: ignore
|
|
27
27
|
from fides.api.models.storage import StorageConfig, get_active_default_storage_config
|
|
28
|
-
from fides.api.schemas.masking.masking_secrets import MaskingSecretCache
|
|
29
28
|
from fides.api.schemas.policy import ActionType, DrpAction
|
|
30
|
-
from fides.api.service.masking.strategy.masking_strategy import MaskingStrategy
|
|
31
29
|
from fides.api.util.data_category import _validate_data_category
|
|
32
30
|
from fides.config import CONFIG
|
|
33
31
|
|
|
@@ -142,27 +140,6 @@ class Policy(Base):
|
|
|
142
140
|
except IndexError:
|
|
143
141
|
return None
|
|
144
142
|
|
|
145
|
-
def generate_masking_secrets(self) -> Optional[List[MaskingSecretCache]]:
|
|
146
|
-
"""
|
|
147
|
-
Returns a list of masking secrets for the masking strategies in the policy.
|
|
148
|
-
"""
|
|
149
|
-
|
|
150
|
-
masking_secrets: List[MaskingSecretCache] = []
|
|
151
|
-
erasure_rules = self.get_rules_for_action(action_type=ActionType.erasure)
|
|
152
|
-
unique_masking_strategies_by_name: Set[str] = set()
|
|
153
|
-
for rule in erasure_rules:
|
|
154
|
-
strategy_name: str = rule.masking_strategy["strategy"] # type: ignore
|
|
155
|
-
configuration = rule.masking_strategy["configuration"] # type: ignore
|
|
156
|
-
if strategy_name in unique_masking_strategies_by_name:
|
|
157
|
-
continue
|
|
158
|
-
unique_masking_strategies_by_name.add(strategy_name)
|
|
159
|
-
masking_strategy = MaskingStrategy.get_strategy(
|
|
160
|
-
strategy_name, configuration
|
|
161
|
-
)
|
|
162
|
-
if masking_strategy.secrets_required():
|
|
163
|
-
masking_secrets.extend(masking_strategy.generate_secrets_for_cache())
|
|
164
|
-
return masking_secrets
|
|
165
|
-
|
|
166
143
|
def applies_to(self, node: "TraversalNode") -> bool:
|
|
167
144
|
"""
|
|
168
145
|
Returns True if any data category in the traversal node starts with any of the policy's target categories.
|
|
@@ -50,7 +50,6 @@ from fides.api.models.comment import Comment, CommentReference, CommentReference
|
|
|
50
50
|
from fides.api.models.fides_user import FidesUser
|
|
51
51
|
from fides.api.models.field_types import EncryptedLargeDataDescriptor
|
|
52
52
|
from fides.api.models.manual_webhook import AccessManualWebhook
|
|
53
|
-
from fides.api.models.masking_secret import MaskingSecret
|
|
54
53
|
from fides.api.models.policy import (
|
|
55
54
|
Policy,
|
|
56
55
|
PolicyPreWebhook,
|
|
@@ -99,6 +98,7 @@ from fides.api.util.cache import (
|
|
|
99
98
|
get_drp_request_body_cache_key,
|
|
100
99
|
get_encryption_cache_key,
|
|
101
100
|
get_identity_cache_key,
|
|
101
|
+
get_masking_secret_cache_key,
|
|
102
102
|
)
|
|
103
103
|
from fides.api.util.collection_util import Row, extract_key_for_address
|
|
104
104
|
from fides.api.util.constants import API_DATE_FORMAT
|
|
@@ -145,12 +145,6 @@ class PrivacyRequest(
|
|
|
145
145
|
ForeignKey(FidesUser.id_field_path, ondelete="SET NULL"),
|
|
146
146
|
nullable=True,
|
|
147
147
|
)
|
|
148
|
-
finalized_at = Column(DateTime(timezone=True), nullable=True)
|
|
149
|
-
finalized_by = Column(
|
|
150
|
-
String,
|
|
151
|
-
ForeignKey(FidesUser.id_field_path, ondelete="SET NULL"),
|
|
152
|
-
nullable=True,
|
|
153
|
-
)
|
|
154
148
|
submitted_by = Column(
|
|
155
149
|
String,
|
|
156
150
|
ForeignKey(FidesUser.id_field_path, ondelete="SET NULL"),
|
|
@@ -295,13 +289,6 @@ class PrivacyRequest(
|
|
|
295
289
|
order_by="RequestTask.created_at",
|
|
296
290
|
)
|
|
297
291
|
|
|
298
|
-
masking_secrets: "RelationshipProperty[List[MaskingSecret]]" = relationship(
|
|
299
|
-
"MaskingSecret",
|
|
300
|
-
back_populates="privacy_request",
|
|
301
|
-
uselist=True,
|
|
302
|
-
passive_deletes="all",
|
|
303
|
-
)
|
|
304
|
-
|
|
305
292
|
@property
|
|
306
293
|
def days_left(self: PrivacyRequest) -> Union[int, None]:
|
|
307
294
|
if self.due_date is None:
|
|
@@ -579,24 +566,19 @@ class PrivacyRequest(
|
|
|
579
566
|
encryption_key,
|
|
580
567
|
)
|
|
581
568
|
|
|
582
|
-
def
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
"""Persists masking encryption secrets to database."""
|
|
586
|
-
if not masking_secrets:
|
|
569
|
+
def cache_masking_secret(self, masking_secret: MaskingSecretCache) -> None:
|
|
570
|
+
"""Sets masking encryption secrets in the Fides app cache if provided"""
|
|
571
|
+
if not masking_secret:
|
|
587
572
|
return
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
"secret_type": masking_secret.secret_type,
|
|
598
|
-
},
|
|
599
|
-
)
|
|
573
|
+
cache: FidesopsRedis = get_cache()
|
|
574
|
+
cache.set_with_autoexpire(
|
|
575
|
+
get_masking_secret_cache_key(
|
|
576
|
+
self.id,
|
|
577
|
+
masking_strategy=masking_secret.masking_strategy,
|
|
578
|
+
secret_type=masking_secret.secret_type,
|
|
579
|
+
),
|
|
580
|
+
FidesopsRedis.encode_obj(masking_secret.secret),
|
|
581
|
+
)
|
|
600
582
|
|
|
601
583
|
def get_cached_identity_data(self) -> Dict[str, Any]:
|
|
602
584
|
"""Retrieves any identity data pertaining to this request from the cache"""
|
fides/api/oauth/roles.py
CHANGED
|
@@ -47,7 +47,6 @@ from fides.common.api.scope_registry import (
|
|
|
47
47
|
SYSTEM_READ,
|
|
48
48
|
USER_PERMISSION_ASSIGN_OWNERS,
|
|
49
49
|
USER_READ,
|
|
50
|
-
USER_READ_OWN,
|
|
51
50
|
WEBHOOK_READ,
|
|
52
51
|
)
|
|
53
52
|
|
|
@@ -127,7 +126,6 @@ viewer_scopes = [ # Intentionally omitted USER_PERMISSION_READ and PRIVACY_REQU
|
|
|
127
126
|
|
|
128
127
|
respondent_scopes = [
|
|
129
128
|
PRIVACY_REQUEST_MANUAL_STEPS_RESPOND, # allows respondents to respond to assigned manual steps
|
|
130
|
-
USER_READ_OWN,
|
|
131
129
|
]
|
|
132
130
|
|
|
133
131
|
external_respondent_scopes = [
|
|
@@ -11,14 +11,6 @@ from fides.api.schemas.messaging.messaging import MessagingServiceType
|
|
|
11
11
|
from fides.config.admin_ui_settings import ErrorNotificationMode
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class SqlDryRunMode(str, Enum):
|
|
15
|
-
"""SQL dry run mode for controlling execution of SQL statements in privacy requests"""
|
|
16
|
-
|
|
17
|
-
none = "none"
|
|
18
|
-
access = "access"
|
|
19
|
-
erasure = "erasure"
|
|
20
|
-
|
|
21
|
-
|
|
22
14
|
class StorageTypeApiAccepted(Enum):
|
|
23
15
|
"""Enum for storage destination types accepted in API updates"""
|
|
24
16
|
|
|
@@ -70,9 +62,7 @@ class ExecutionApplicationConfig(FidesSchema):
|
|
|
70
62
|
subject_identity_verification_required: Optional[bool] = None
|
|
71
63
|
disable_consent_identity_verification: Optional[bool] = None
|
|
72
64
|
require_manual_request_approval: Optional[bool] = None
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
65
|
+
model_config = ConfigDict(extra="forbid")
|
|
76
66
|
|
|
77
67
|
|
|
78
68
|
class AdminUIConfig(FidesSchema):
|
fides/api/schemas/policy.py
CHANGED
|
@@ -124,8 +124,6 @@ class PrivacyRequestResubmit(PrivacyRequestCreate):
|
|
|
124
124
|
identity_verified_at: Optional[datetime] = None
|
|
125
125
|
custom_privacy_request_fields_approved_at: Optional[datetime] = None
|
|
126
126
|
custom_privacy_request_fields_approved_by: Optional[str] = None
|
|
127
|
-
finalized_at: Optional[datetime] = None
|
|
128
|
-
finalized_by: Optional[str] = None
|
|
129
127
|
|
|
130
128
|
|
|
131
129
|
class ConsentRequestCreate(FidesSchema):
|
|
@@ -289,7 +287,6 @@ class PrivacyRequestStatus(str, EnumType):
|
|
|
289
287
|
complete = "complete"
|
|
290
288
|
paused = "paused"
|
|
291
289
|
awaiting_email_send = "awaiting_email_send"
|
|
292
|
-
requires_manual_finalization = "requires_manual_finalization"
|
|
293
290
|
canceled = "canceled"
|
|
294
291
|
error = "error"
|
|
295
292
|
|
|
@@ -323,8 +320,6 @@ class PrivacyRequestResponse(FidesSchema):
|
|
|
323
320
|
source: Optional[PrivacyRequestSource] = None
|
|
324
321
|
deleted_at: Optional[datetime] = None
|
|
325
322
|
deleted_by: Optional[str] = None
|
|
326
|
-
finalized_at: Optional[datetime] = None
|
|
327
|
-
finalized_by: Optional[str] = None
|
|
328
323
|
model_config = ConfigDict(from_attributes=True, use_enum_values=True)
|
|
329
324
|
|
|
330
325
|
|
|
@@ -82,7 +82,6 @@ class BaseConnector(Generic[DB_CONNECTOR_TYPE], ABC):
|
|
|
82
82
|
privacy_request: PrivacyRequest,
|
|
83
83
|
request_task: RequestTask,
|
|
84
84
|
rows: List[Row],
|
|
85
|
-
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
86
85
|
) -> int:
|
|
87
86
|
"""Execute a masking request. Return the number of rows that have been updated
|
|
88
87
|
|