ethyca-fides 2.59.2b0__py2.py3-none-any.whl → 2.59.2b2__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/METADATA +2 -2
- {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/RECORD +195 -195
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/c9c72b3d550b_data_migration_cookie_asset.py +218 -0
- fides/api/db/system.py +1 -121
- fides/api/models/asset.py +1 -2
- fides/api/models/privacy_notice.py +14 -19
- fides/api/models/sql_models.py +0 -51
- fides/api/schemas/connection_configuration/connection_secrets_mysql.py +12 -0
- fides/api/schemas/system.py +1 -2
- fides/api/service/connectors/mysql_connector.py +13 -1
- fides/api/worker/__init__.py +1 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1100-22c375e757f23150.js → 1100-93c5835d689e9dd5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1817-11bb237f57d9ad27.js → 1817-16d1dd3b13e590b3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1904-3c40738cb0fd2a7c.js → 1904-0f03e5a2c3de8487.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2479-50f431c0e2c0de3c.js → 2479-18fbea714b5f1f7a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3503-569232568cee1a7e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3513-cf0c4d886ff26e00.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3702-31d37a0217f82615.js → 3702-c4465f7b3bbc3edc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-5417dfc333c7b6b6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3872-68b4ceba8f632bc0.js → 3872-03319b7328ddc284.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/401-f0c485676a4fc5f9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4060-98d858ec609e4b76.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4121-044a191b265f4e51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4481-85e3f5845b50f10d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5487-22de631f1d186527.js → 5487-7751e91b40dc6050.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5826-226c8843e715b6ad.js → 5826-8516f6c635510e95.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5835-b7b45dfb97180a88.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5973-4e65b191ed82f8bd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-076a319bcff4f1a2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6372-0ca1b9521b5489fd.js → 6372-d3f778c62070545f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6853-7d7eb22f19d3806c.js → 6853-25ff9e572d633f33.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6954-981a8a444780bedb.js → 6954-169abc679def0fb6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{7751-09c6424d673d8aa4.js → 7751-e0a78be0ca620df1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/79-2302442f8b53f944.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{8433-dd6d8dae02275d66.js → 8433-4481a5d085d3b008.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{8934-6881185f0c5c0f6d.js → 8934-e2a4fd9f8ab74142.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9282-356dc48612f4a21c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9327-fb7ef941b5176077.js → 9327-b019990849ff57f3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9392.da35a8e778812d91.js → 9392.5f3cfb8eafbeac59.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9572-ab070b1ae17dde8f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9676.f297a1347ac09c56.js → 9676.2e1267373b5a6076.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9719-caba0228fc973d3f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9767-b4f9c2cc14de6df6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9951-8ceba69296972ce9.js → 9951-e0d7db7ec538ebf1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9965-528ef17ac491d809.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-a3c57a06ff67cf1f.js → 404-1dfbf30fba0233a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-fc9e922ec354be47.js → _app-9560c81c6cf5f050.js} +17 -17
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-bca30784c7356aa3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-93907c53f342831f.js → multiple-14c60fbc5907c621.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-0d7a9d9ad082c80c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-c2c4fd5faaf0f882.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-5e83ee7792c0f75f.js → add-vendors-79949b978a966399.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-ea7b2c628260c84c.js → configure-6af86d0717034a7f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-7122d8a8c20e7cd2.js → [id]-e876f21f7f2245aa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-85ddbe3ae50c7527.js → privacy-experience-83dea888aad26af3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-5a9269aa00a16596.js → [id]-80dd6ab96599efb5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-78808c75ba86c0be.js → new-e48da14c5d5d0a66.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-047c409bc5e12d1a.js → privacy-notices-05e67aa6f029e6d4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-893753088b9729a3.js → properties-6c99121562583eb7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-01d1371e690ae190.js → reporting-ed1cdefeb38cf592.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-7e5adfec9134a268.js → consent-253aa071516a6436.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-4b2c10ff79e46e50.js → [projectUrn]-366121dfd638f6b5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-05bbb01e37766b80.js → projects-974623a3afd4754b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-4b1d9e4cc7fa17a2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-936f72087aae94e1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-b6e0c8625c953a00.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9ebb4dc8bc7dd058.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-f0fe5d6cfcce0e69.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-1bcaa606739ea1c5.js → [resourceUrn]-10f789d4ab2b8927.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-22f55dc12354b4c6.js → detection-f473b2ee1c67be3c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-86111c25dc30ef2b.js → [resourceUrn]-2569551ae75ea5a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-853be75f08b9ab5c.js → discovery-ad077f30849fdc0a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-6c63a6295668ed4e.js → datamap-0cb4cd87c876acc3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-7a99a6c5c2fc2abe.js → [...subfieldNames]-fd1f9aba215e8fb2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-39aab1de4df0660d.js → [collectionName]-06793bb37fa509d8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-2cf04998a7521a7d.js → [datasetId]-662ce6650bd83f05.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-f3a6dd67f012b005.js → new-5b773da9c79af072.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-3b703775de1ca75e.js → dataset-a8582040705239d4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-b905c75f68786c2f.js → [id]-e650d48347fb457e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-abd92bec98bdbb66.js → new-4b96de4707916560.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-52c3f076edb49944.js → datastore-connection-7ce2cd66791e7f6f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-1bccf315f995267a.js → index-71e4264dcfba6181.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-b3ec5320782fbb49.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-2ce76b506ba8404a.js → integrations-4789200cdb1d7ec5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-8950b4aff799099c.js → [id]-3a52dfa45f398f31.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-4cad85d5b6d52734.js → add-template-8e20f0da3a0779cc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-57c7aa44af163623.js → messaging-439832fde70c1157.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-2fc14bda8d314449.js → [id]-16b266c9ddf8d192.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-3219ddeb37d46398.js → messaging-9c1748191ca19867.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-9f1ea2b5896ff3fd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d8d23d06ce1d9dae.js → configure-67b0a2a798d71e4d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-faa220f7200fb252.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-6cca2c8ebbff78aa.js → [id]-99860c05fb5d25bd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-f09f98007725fa51.js → add-property-4a7a21c25985fff0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-9034bab3d7200d9b.js → properties-a78b5af5894ed324.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-a36cf070c98a6cbd.js → datamap-b5c8cdfd6c1e0544.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-92dada8329e89092.js → about-92fcfaa6111d7d24.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-224434177b2775dc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-f6d6e3d9d556387c.js → consent-5822e06b76f3ec84.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ff123ece2e2e4009.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-368a4183139ea5e0.js → domain-records-4347b3fdd12fdcff.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-255655d6c367faad.js → domains-899401bf5c72b67f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-e4498b6310074705.js → email-templates-d8f6562694f9dd45.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-18f56b6b76abb71d.js → locations-f74503aa1626e302.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-610aa65b3dbcf467.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-0350314337abff11.js → regulations-081148db3f589271.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-6986ba3f6f33c110.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-022910a52efbad76.js → [id]-e0110a539d33069a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-e9a111ef0c32161e.js → systems-7aef28e963417fa3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-61345b0f7cbd939e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-082c3156175f9267.js → new-65ef1bdebb679666.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-32ec340d4b390d07.js → [id]-3430c5a08e86a85d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-216944eb66e430bb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/webpack-7104b266fb47d653.js +1 -0
- fides/ui-build/static/admin/_next/static/css/{72caf4a266697967.css → 091e5fc4883aeb42.css} +1 -1
- fides/ui-build/static/admin/_next/static/tLZG5DlQ8HHUd5zR6TZEN/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/ant-poc.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/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/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.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/chunks/146-106021bf1ae6e912.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3086-ffd15c92ea81b3d6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3244-281e8f12e46ac168.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-da54ef27afd56c46.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-49cdd118a89cc343.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-bad5f07013c7bb49.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-4914fb77e60d31f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4481-7a992683e9191bc9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5102-3acf312a8f0d7720.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5480-d177a83facd21738.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5973-d5469b7d75700b01.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-c46c9eb59177b850.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6395-04041b53946664b1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-7ca48fb1a0b52f96.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9282-23b38e03f897722f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9572-64df993c83a2994c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-162b0f8524990149.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-c4c0c42bbe0f5548.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a8c51c7bdbb405e2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-8fcf312148606e7e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-d08a38d4f198691a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-cc5431e4fbd6d39e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-f073ddcfb916988e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-cf48ed7dc04c3af2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-73025c2ac5a00347.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-afcf73fd0337dde0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-8e17802ab6b2d3fd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-9d71495b42f34038.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-7986cf3b36456353.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-e6c477f2ac098e0b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-c01d24583e9485f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-d5f777510ab8dfd2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-517419b35435604a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-c8ca51efbeccf39b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-01277b766c8eb076.js +0 -1
- fides/ui-build/static/admin/_next/static/tRpOUAZ0oZhnC241q-BOJ/_buildManifest.js +0 -1
- {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{tRpOUAZ0oZhnC241q-BOJ → tLZG5DlQ8HHUd5zR6TZEN}/_ssgManifest.js +0 -0
fides/_version.py
CHANGED
@@ -8,11 +8,11 @@ import json
|
|
8
8
|
|
9
9
|
version_json = '''
|
10
10
|
{
|
11
|
-
"date": "2025-04-
|
11
|
+
"date": "2025-04-17T21:29:31-0400",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "2.59.
|
14
|
+
"full-revisionid": "58fd4263f3b795c9954555326445bec375a34885",
|
15
|
+
"version": "2.59.2b2"
|
16
16
|
}
|
17
17
|
''' # END VERSION_JSON
|
18
18
|
|
@@ -0,0 +1,218 @@
|
|
1
|
+
"""data migration converting existing 'Cookies' resources to 'Asset' resources with type 'Cookie'
|
2
|
+
|
3
|
+
Revision ID: c9c72b3d550b
|
4
|
+
Revises: 9288f729cac4
|
5
|
+
Create Date: 2025-02-18 18:33:56.039924
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
import uuid
|
10
|
+
from typing import Dict, Tuple
|
11
|
+
|
12
|
+
import sqlalchemy as sa
|
13
|
+
from alembic import op
|
14
|
+
from loguru import logger
|
15
|
+
|
16
|
+
from fides.api.models.asset import Asset
|
17
|
+
|
18
|
+
# revision identifiers, used by Alembic.
|
19
|
+
revision = "c9c72b3d550b"
|
20
|
+
down_revision = "9288f729cac4"
|
21
|
+
branch_labels = None
|
22
|
+
depends_on = None
|
23
|
+
|
24
|
+
|
25
|
+
def upgrade():
|
26
|
+
# migrate existing cookies to assets
|
27
|
+
connection = op.get_bind()
|
28
|
+
result = connection.execute(
|
29
|
+
sa.text(
|
30
|
+
"SELECT c.id, c.created_at, c.updated_at, c.name, c.domain, c.system_id, c.path, c.privacy_declaration_id, pd.system_id AS pud_system_id, pd.data_use "
|
31
|
+
"FROM cookies c "
|
32
|
+
"LEFT JOIN privacydeclaration pd ON c.privacy_declaration_id = pd.id"
|
33
|
+
)
|
34
|
+
)
|
35
|
+
|
36
|
+
logger.debug("Converting existing cookies to assets")
|
37
|
+
assets_to_create: Dict[str, Asset] = {}
|
38
|
+
for row in result:
|
39
|
+
if row.privacy_declaration_id is None:
|
40
|
+
identifier = f"{row.name}_{row.system_id}"
|
41
|
+
if identifier not in assets_to_create.keys():
|
42
|
+
assets_to_create[identifier] = Asset(
|
43
|
+
id=str(uuid.uuid4()),
|
44
|
+
created_at=row.created_at,
|
45
|
+
updated_at=row.updated_at,
|
46
|
+
name=row.name,
|
47
|
+
domain=row.domain,
|
48
|
+
system_id=row.system_id,
|
49
|
+
data_uses=[],
|
50
|
+
asset_type="Cookie",
|
51
|
+
)
|
52
|
+
continue
|
53
|
+
|
54
|
+
if row.pud_system_id:
|
55
|
+
system_id = row.pud_system_id
|
56
|
+
data_uses = [row.data_use]
|
57
|
+
else:
|
58
|
+
system_id = row.system_id
|
59
|
+
data_uses = []
|
60
|
+
|
61
|
+
# Asset unique identifier is a composite of name, asset_type, domain, base_url, system_id. All assets here are cookies.
|
62
|
+
identifier = f"{row.name}_{'Cookie'}_{row.domain}_{row.path}_{system_id}"
|
63
|
+
if identifier in assets_to_create.keys():
|
64
|
+
# If the asset already exists, append the data_use to the existing asset
|
65
|
+
assets_to_create[identifier].data_uses.extend(data_uses)
|
66
|
+
else:
|
67
|
+
# If the asset does not exist, create a new asset with the data_use
|
68
|
+
assets_to_create[identifier] = Asset(
|
69
|
+
id=str(uuid.uuid4()),
|
70
|
+
created_at=row.created_at,
|
71
|
+
updated_at=row.updated_at,
|
72
|
+
name=row.name,
|
73
|
+
domain=row.domain,
|
74
|
+
system_id=system_id,
|
75
|
+
data_uses=data_uses,
|
76
|
+
asset_type="Cookie",
|
77
|
+
)
|
78
|
+
|
79
|
+
# Insert the assets into the asset table
|
80
|
+
assets_list = [
|
81
|
+
{
|
82
|
+
"id": asset.id if asset.id else str(uuid.uuid4()),
|
83
|
+
"created_at": asset.created_at,
|
84
|
+
"updated_at": asset.updated_at,
|
85
|
+
"name": asset.name,
|
86
|
+
"domain": asset.domain,
|
87
|
+
"system_id": asset.system_id,
|
88
|
+
"data_uses": asset.data_uses,
|
89
|
+
"asset_type": "Cookie",
|
90
|
+
}
|
91
|
+
for asset in assets_to_create.values()
|
92
|
+
]
|
93
|
+
|
94
|
+
if assets_list:
|
95
|
+
logger.debug("Inserting assets into asset table ")
|
96
|
+
connection.execute(
|
97
|
+
sa.text(
|
98
|
+
"INSERT INTO asset (id, created_at, updated_at, name, domain, system_id, data_uses, asset_type, with_consent) "
|
99
|
+
"VALUES (:id, :created_at, :updated_at, :name, :domain, :system_id, :data_uses, :asset_type, false) "
|
100
|
+
"ON CONFLICT DO NOTHING"
|
101
|
+
),
|
102
|
+
assets_list,
|
103
|
+
)
|
104
|
+
else:
|
105
|
+
logger.debug("No assets to insert into asset table. Skipping.")
|
106
|
+
|
107
|
+
# Delete the cookies table
|
108
|
+
logger.debug("Deleting cookies table")
|
109
|
+
connection.execute(sa.text("DROP TABLE cookies"))
|
110
|
+
|
111
|
+
|
112
|
+
def downgrade():
|
113
|
+
# Recreate the cookies table
|
114
|
+
logger.debug("Recreating cookies table")
|
115
|
+
op.create_table(
|
116
|
+
"cookies",
|
117
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
118
|
+
sa.Column(
|
119
|
+
"created_at",
|
120
|
+
sa.DateTime(timezone=True),
|
121
|
+
server_default=sa.text("now()"),
|
122
|
+
nullable=True,
|
123
|
+
),
|
124
|
+
sa.Column(
|
125
|
+
"updated_at",
|
126
|
+
sa.DateTime(timezone=True),
|
127
|
+
server_default=sa.text("now()"),
|
128
|
+
nullable=True,
|
129
|
+
),
|
130
|
+
sa.Column("name", sa.String(), nullable=False),
|
131
|
+
sa.Column("domain", sa.String(), nullable=True),
|
132
|
+
sa.Column("path", sa.String(), nullable=True),
|
133
|
+
sa.Column("system_id", sa.String(), nullable=True),
|
134
|
+
sa.Column("privacy_declaration_id", sa.String(), nullable=True),
|
135
|
+
sa.ForeignKeyConstraint(
|
136
|
+
["privacy_declaration_id"], ["privacydeclaration.id"], ondelete="SET NULL"
|
137
|
+
),
|
138
|
+
sa.ForeignKeyConstraint(["system_id"], ["ctl_systems.id"], ondelete="CASCADE"),
|
139
|
+
sa.PrimaryKeyConstraint("id"),
|
140
|
+
sa.UniqueConstraint(
|
141
|
+
"name", "privacy_declaration_id", name="_cookie_name_privacy_declaration_uc"
|
142
|
+
),
|
143
|
+
)
|
144
|
+
op.create_index(op.f("ix_cookies_id"), "cookies", ["id"], unique=False)
|
145
|
+
op.create_index(op.f("ix_cookies_name"), "cookies", ["name"], unique=False)
|
146
|
+
op.create_index(
|
147
|
+
op.f("ix_cookies_privacy_declaration_id"),
|
148
|
+
"cookies",
|
149
|
+
["privacy_declaration_id"],
|
150
|
+
unique=False,
|
151
|
+
)
|
152
|
+
op.create_index(
|
153
|
+
op.f("ix_cookies_system_id"), "cookies", ["system_id"], unique=False
|
154
|
+
)
|
155
|
+
# ### end Alembic commands ###
|
156
|
+
|
157
|
+
connection = op.get_bind()
|
158
|
+
result = connection.execute(
|
159
|
+
sa.text(
|
160
|
+
"SELECT id, name, domain, system_id, data_uses FROM asset WHERE asset_type = 'Cookie'"
|
161
|
+
)
|
162
|
+
)
|
163
|
+
|
164
|
+
# fetch all privacy declarations
|
165
|
+
privacy_declarations = connection.execute(
|
166
|
+
sa.text("SELECT id, system_id, data_use FROM privacydeclaration")
|
167
|
+
).fetchall()
|
168
|
+
# create a mapping of system_id and data_use to privacy_declaration_id
|
169
|
+
privacy_declaration_mapping: Dict[Tuple[str, str], str] = {}
|
170
|
+
for pud in privacy_declarations:
|
171
|
+
privacy_declaration_mapping[(pud.system_id, pud.data_use)] = pud.id
|
172
|
+
|
173
|
+
logger.debug("Migrating existing assets to cookies")
|
174
|
+
for row in result:
|
175
|
+
# Find the privacy declaration ID matching the system ID and data use
|
176
|
+
privacy_declaration_ids = []
|
177
|
+
for data_use in row.data_uses:
|
178
|
+
pud_id = privacy_declaration_mapping.get((row.system_id, data_use), None)
|
179
|
+
if pud_id:
|
180
|
+
privacy_declaration_ids.append(pud_id)
|
181
|
+
|
182
|
+
cookies_to_insert = []
|
183
|
+
|
184
|
+
if len(privacy_declaration_ids) == 0:
|
185
|
+
# If no privacy declaration match we attach to system_id
|
186
|
+
cookies_to_insert.append(
|
187
|
+
{
|
188
|
+
"id": row.id,
|
189
|
+
"name": row.name,
|
190
|
+
"domain": row.domain,
|
191
|
+
"system_id": row.system_id,
|
192
|
+
"privacy_declaration_id": None,
|
193
|
+
}
|
194
|
+
)
|
195
|
+
else:
|
196
|
+
for privacy_declaration_id in privacy_declaration_ids:
|
197
|
+
# Create a cookie for each privacy declaration ID
|
198
|
+
# generate a new ID
|
199
|
+
cookie_id = str(uuid.uuid4())
|
200
|
+
cookies_to_insert.append(
|
201
|
+
{
|
202
|
+
"id": cookie_id,
|
203
|
+
"name": row.name,
|
204
|
+
"domain": row.domain,
|
205
|
+
"system_id": None,
|
206
|
+
"privacy_declaration_id": privacy_declaration_id,
|
207
|
+
}
|
208
|
+
)
|
209
|
+
|
210
|
+
if cookies_to_insert:
|
211
|
+
connection.execute(
|
212
|
+
sa.text(
|
213
|
+
"INSERT INTO cookies (id, created_at, updated_at, name, domain, system_id, privacy_declaration_id) "
|
214
|
+
"VALUES (:id, NOW(), NOW(), :name, :domain, :system_id, :privacy_declaration_id) "
|
215
|
+
"ON CONFLICT DO NOTHING"
|
216
|
+
),
|
217
|
+
cookies_to_insert,
|
218
|
+
)
|
fides/api/db/system.py
CHANGED
@@ -8,19 +8,15 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union
|
|
8
8
|
|
9
9
|
from deepdiff import DeepDiff
|
10
10
|
from fastapi import HTTPException
|
11
|
-
from fideslang.models import Cookies as CookieSchema
|
12
11
|
from fideslang.models import System as SystemSchema
|
13
12
|
from fideslang.validation import FidesKey
|
14
13
|
from loguru import logger as log
|
15
|
-
from sqlalchemy import and_, delete, insert, select, update
|
16
14
|
from sqlalchemy.ext.asyncio import AsyncSession
|
17
15
|
from sqlalchemy.orm import Session
|
18
|
-
from sqlalchemy.sql.elements import BinaryExpression
|
19
16
|
from starlette.status import HTTP_400_BAD_REQUEST, HTTP_404_NOT_FOUND
|
20
17
|
|
21
18
|
from fides.api.db.crud import create_resource, get_resource, update_resource
|
22
19
|
from fides.api.models.sql_models import ( # type: ignore[attr-defined]
|
23
|
-
Cookies,
|
24
20
|
DataCategory,
|
25
21
|
DataSubject,
|
26
22
|
DataUse,
|
@@ -155,7 +151,6 @@ async def upsert_privacy_declarations(
|
|
155
151
|
for privacy_declaration in resource.privacy_declarations:
|
156
152
|
# prepare our 'payload' for either create or update
|
157
153
|
data = privacy_declaration.model_dump(mode="json")
|
158
|
-
privacy_declaration_cookies: List[Dict] = data.pop("cookies", None)
|
159
154
|
data["system_id"] = system.id # include FK back to system
|
160
155
|
|
161
156
|
# if we find matching declaration, remove it from our map
|
@@ -168,102 +163,11 @@ async def upsert_privacy_declarations(
|
|
168
163
|
# otherwise, create a new declaration record
|
169
164
|
declaration = PrivacyDeclaration.create(db, data=data)
|
170
165
|
|
171
|
-
# Upsert cookies for the given privacy declaration
|
172
|
-
await upsert_cookies(
|
173
|
-
db, privacy_declaration_cookies, declaration, system=None
|
174
|
-
)
|
175
|
-
|
176
166
|
# delete any existing privacy declarations that have not been "matched" in the request
|
177
167
|
for existing_declarations in existing_declarations.values():
|
178
168
|
await db.delete(existing_declarations)
|
179
169
|
|
180
170
|
|
181
|
-
async def upsert_cookies(
|
182
|
-
async_session: AsyncSession,
|
183
|
-
cookies: Optional[List[Dict]],
|
184
|
-
privacy_declaration: Optional[PrivacyDeclaration],
|
185
|
-
system: Optional[System],
|
186
|
-
) -> None:
|
187
|
-
"""
|
188
|
-
Upsert cookies for the given system or privacy_declaration. Cookies can be attached at the system-level
|
189
|
-
or the privacy declaration-level.
|
190
|
-
|
191
|
-
Remove any existing cookies that aren't specified here.
|
192
|
-
"""
|
193
|
-
if not (privacy_declaration or system):
|
194
|
-
# Dev-level error
|
195
|
-
raise ValueError(
|
196
|
-
"Either system or privacy declaration must be supplied to upsert cookies"
|
197
|
-
)
|
198
|
-
|
199
|
-
if privacy_declaration and system:
|
200
|
-
# Dev-level error
|
201
|
-
raise ValueError(
|
202
|
-
"Supply either system or privacy declaration, not both, to upsert cookies"
|
203
|
-
)
|
204
|
-
|
205
|
-
parsed_cookies = (
|
206
|
-
[CookieSchema.model_validate(cookie) for cookie in cookies] if cookies else []
|
207
|
-
)
|
208
|
-
|
209
|
-
resource_filter: BinaryExpression = (
|
210
|
-
Cookies.system_id == system.id
|
211
|
-
if system
|
212
|
-
else Cookies.privacy_declaration_id == privacy_declaration.id # type: ignore[union-attr]
|
213
|
-
)
|
214
|
-
|
215
|
-
for cookie_data in parsed_cookies:
|
216
|
-
# Check if cookie exists on the resource
|
217
|
-
result = await async_session.execute(
|
218
|
-
select(Cookies).where(
|
219
|
-
and_(Cookies.name == cookie_data.name, resource_filter)
|
220
|
-
)
|
221
|
-
)
|
222
|
-
row: Optional[Cookies] = result.scalars().first()
|
223
|
-
if row:
|
224
|
-
# Update existing cookie
|
225
|
-
await async_session.execute(
|
226
|
-
update(Cookies)
|
227
|
-
.where(Cookies.id == row.id)
|
228
|
-
.values(cookie_data.model_dump(mode="json"))
|
229
|
-
)
|
230
|
-
|
231
|
-
else:
|
232
|
-
# Insert new cookie
|
233
|
-
await async_session.execute(
|
234
|
-
insert(Cookies).values(
|
235
|
-
{
|
236
|
-
"name": cookie_data.name,
|
237
|
-
"path": cookie_data.path,
|
238
|
-
"domain": cookie_data.domain,
|
239
|
-
"privacy_declaration_id": (
|
240
|
-
privacy_declaration.id if privacy_declaration else None
|
241
|
-
),
|
242
|
-
"system_id": system.id if system else None,
|
243
|
-
}
|
244
|
-
)
|
245
|
-
)
|
246
|
-
|
247
|
-
# Select cookies which are currently on the application resource, but not included in the request
|
248
|
-
delete_result = await async_session.execute(
|
249
|
-
select(Cookies).where(
|
250
|
-
and_(
|
251
|
-
Cookies.name.notin_([cookie.name for cookie in parsed_cookies]),
|
252
|
-
resource_filter,
|
253
|
-
)
|
254
|
-
)
|
255
|
-
)
|
256
|
-
|
257
|
-
# Remove those cookies altogether
|
258
|
-
await async_session.execute(
|
259
|
-
delete(Cookies).where(
|
260
|
-
Cookies.id.in_(
|
261
|
-
[cookie.id for cookie in delete_result.scalars().unique().all()]
|
262
|
-
)
|
263
|
-
)
|
264
|
-
)
|
265
|
-
|
266
|
-
|
267
171
|
async def update_system(
|
268
172
|
resource: SystemSchema, db: AsyncSession, current_user_id: Optional[str] = None
|
269
173
|
) -> Tuple[Dict, bool]:
|
@@ -288,18 +192,10 @@ async def update_system(
|
|
288
192
|
resource, "privacy_declarations"
|
289
193
|
) # remove the attribute on the system since we've already updated declarations
|
290
194
|
|
291
|
-
# Remove system-level cookies from request before updating the system.
|
292
|
-
# Cookies are upserted separately
|
293
|
-
proposed_system_cookies: Optional[List[Cookies]] = resource.cookies
|
294
|
-
delattr(resource, "cookies")
|
295
|
-
|
296
195
|
# perform any updates on the system resource itself
|
297
196
|
updated_system = await update_resource(System, resource.model_dump(), db)
|
298
197
|
|
299
198
|
async with db.begin():
|
300
|
-
await upsert_cookies(
|
301
|
-
db, proposed_system_cookies, privacy_declaration=None, system=updated_system
|
302
|
-
) # Upsert the associated cookies at the System-level
|
303
199
|
|
304
200
|
await db.refresh(updated_system)
|
305
201
|
|
@@ -400,10 +296,6 @@ async def create_system(
|
|
400
296
|
# remove the attribute on the system update since the declarations will be created separately
|
401
297
|
delattr(resource, "privacy_declarations")
|
402
298
|
|
403
|
-
# Remove system-level cookies from request; these will be processed after the system is added
|
404
|
-
proposed_system_cookies: Optional[List[Cookies]] = resource.cookies
|
405
|
-
delattr(resource, "cookies")
|
406
|
-
|
407
299
|
# create the system resource using generic creation
|
408
300
|
# the system must be created before the privacy declarations so that it can be referenced
|
409
301
|
resource_dict = resource.model_dump()
|
@@ -418,27 +310,15 @@ async def create_system(
|
|
418
310
|
privacy_declaration_exception = None
|
419
311
|
try:
|
420
312
|
async with db.begin():
|
421
|
-
await upsert_cookies(
|
422
|
-
db,
|
423
|
-
proposed_system_cookies,
|
424
|
-
privacy_declaration=None,
|
425
|
-
system=created_system,
|
426
|
-
) # Create the associated cookies at the System-level
|
427
313
|
|
428
314
|
# create the specified declarations as records in their own table
|
429
315
|
for privacy_declaration in privacy_declarations:
|
430
316
|
data = privacy_declaration.model_dump(mode="json")
|
431
317
|
data["system_id"] = created_system.id # add FK back to system
|
432
|
-
privacy_declaration_cookies: List[Dict] = data.pop("cookies", [])
|
433
318
|
privacy_declaration = PrivacyDeclaration.create(
|
434
319
|
db, data=data
|
435
320
|
) # create the associated PrivacyDeclaration
|
436
|
-
|
437
|
-
db,
|
438
|
-
privacy_declaration_cookies,
|
439
|
-
privacy_declaration=privacy_declaration,
|
440
|
-
system=None,
|
441
|
-
) # Create the associated cookies on the Privacy Declaration
|
321
|
+
|
442
322
|
except Exception as e:
|
443
323
|
log.error(
|
444
324
|
f"Error adding privacy declarations, reverting system creation: {str(privacy_declaration_exception)}"
|
fides/api/models/asset.py
CHANGED
@@ -25,8 +25,7 @@ from fides.api.models.sql_models import System # type: ignore[attr-defined]
|
|
25
25
|
|
26
26
|
class Asset(Base):
|
27
27
|
"""
|
28
|
-
Web assets associated with a system
|
29
|
-
a migration path and backward compatibility with all `Cookies` related APIs.
|
28
|
+
Web assets associated with a system
|
30
29
|
"""
|
31
30
|
|
32
31
|
# Common attributes
|
@@ -20,10 +20,9 @@ from fides.api.models import (
|
|
20
20
|
dry_update_data,
|
21
21
|
update_if_modified,
|
22
22
|
)
|
23
|
+
from fides.api.models.asset import Asset
|
23
24
|
from fides.api.models.location_regulation_selections import DeprecatedNoticeRegion
|
24
25
|
from fides.api.models.sql_models import ( # type: ignore[attr-defined]
|
25
|
-
Cookies,
|
26
|
-
PrivacyDeclaration,
|
27
26
|
System,
|
28
27
|
get_system_data_uses,
|
29
28
|
)
|
@@ -191,24 +190,20 @@ class PrivacyNotice(PrivacyNoticeBase, Base):
|
|
191
190
|
raise Exception("Invalid notice consent mechanism.")
|
192
191
|
|
193
192
|
@property
|
194
|
-
def cookies(self) -> List[
|
195
|
-
"""Return relevant cookie
|
193
|
+
def cookies(self) -> List[Asset]:
|
194
|
+
"""Return relevant assets of type 'cookie' (via the data use)"""
|
196
195
|
db = Session.object_session(self)
|
197
|
-
|
198
|
-
|
199
|
-
.
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
.
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
]
|
209
|
-
)
|
210
|
-
)
|
211
|
-
).all()
|
196
|
+
or_queries = [
|
197
|
+
f"array_to_string(data_uses, ',') ILIKE '{data_use}%'"
|
198
|
+
for data_use in self.data_uses
|
199
|
+
]
|
200
|
+
|
201
|
+
query = db.query(Asset).filter(
|
202
|
+
Asset.asset_type == "Cookie",
|
203
|
+
or_(*[text(query) for query in or_queries]),
|
204
|
+
)
|
205
|
+
|
206
|
+
return query.all()
|
212
207
|
|
213
208
|
@property
|
214
209
|
def calculated_systems_applicable(self) -> bool:
|
fides/api/models/sql_models.py
CHANGED
@@ -457,10 +457,6 @@ class System(Base, FidesBase):
|
|
457
457
|
lazy="selectin",
|
458
458
|
)
|
459
459
|
|
460
|
-
cookies = relationship(
|
461
|
-
"Cookies", back_populates="system", lazy="selectin", uselist=True, viewonly=True
|
462
|
-
)
|
463
|
-
|
464
460
|
assets = relationship(
|
465
461
|
"Asset", back_populates="system", lazy="selectin", uselist=True, viewonly=True
|
466
462
|
)
|
@@ -560,9 +556,6 @@ class PrivacyDeclaration(Base):
|
|
560
556
|
system = relationship(
|
561
557
|
System, back_populates="privacy_declarations", lazy="selectin"
|
562
558
|
)
|
563
|
-
cookies = relationship(
|
564
|
-
"Cookies", back_populates="privacy_declaration", lazy="joined", uselist=True
|
565
|
-
)
|
566
559
|
|
567
560
|
@classmethod
|
568
561
|
def create(
|
@@ -866,50 +859,6 @@ class AuditLogResource(Base):
|
|
866
859
|
extra_data = Column(JSON, nullable=True)
|
867
860
|
|
868
861
|
|
869
|
-
class Cookies(Base):
|
870
|
-
"""
|
871
|
-
Stores cookies. Cookies have a FK to system and privacy declaration. If a privacy declaration is deleted,
|
872
|
-
the cookie can still remain linked to the system but unassociated with a data use.
|
873
|
-
"""
|
874
|
-
|
875
|
-
name = Column(String, index=True, nullable=False)
|
876
|
-
path = Column(String)
|
877
|
-
domain = Column(String)
|
878
|
-
|
879
|
-
system_id = Column(
|
880
|
-
String, ForeignKey(System.id_field_path, ondelete="CASCADE"), index=True
|
881
|
-
) # If system is deleted, remove the associated cookies.
|
882
|
-
|
883
|
-
privacy_declaration_id = Column(
|
884
|
-
String,
|
885
|
-
ForeignKey(PrivacyDeclaration.id_field_path, ondelete="CASCADE"),
|
886
|
-
index=True,
|
887
|
-
) # If privacy declaration is deleted, remove the associated cookies.
|
888
|
-
|
889
|
-
system = relationship(
|
890
|
-
"System",
|
891
|
-
back_populates="cookies",
|
892
|
-
cascade="all,delete",
|
893
|
-
uselist=False,
|
894
|
-
lazy="selectin",
|
895
|
-
)
|
896
|
-
|
897
|
-
privacy_declaration = relationship(
|
898
|
-
"PrivacyDeclaration",
|
899
|
-
back_populates="cookies",
|
900
|
-
cascade="all,delete",
|
901
|
-
uselist=False,
|
902
|
-
lazy="joined", # Joined is intentional, instead of selectin
|
903
|
-
)
|
904
|
-
|
905
|
-
__table_args__ = (
|
906
|
-
UniqueConstraint(
|
907
|
-
"name", "privacy_declaration_id", name="_cookie_name_privacy_declaration_uc"
|
908
|
-
),
|
909
|
-
UniqueConstraint("name", "system_id", name="_cookie_name_system_uc"),
|
910
|
-
)
|
911
|
-
|
912
|
-
|
913
862
|
def get_system_data_uses(db: Session, include_parents: bool) -> Set:
|
914
863
|
"""Get data uses across all systems and those data uses' parents if include_parents is True
|
915
864
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
from enum import Enum
|
1
2
|
from typing import ClassVar, List, Optional
|
2
3
|
|
3
4
|
from pydantic import Field
|
@@ -8,6 +9,12 @@ from fides.api.schemas.connection_configuration.connection_secrets import (
|
|
8
9
|
)
|
9
10
|
|
10
11
|
|
12
|
+
class MySQLSSLMode(str, Enum):
|
13
|
+
preferred = "preferred"
|
14
|
+
required = "required"
|
15
|
+
disabled = "disabled"
|
16
|
+
|
17
|
+
|
11
18
|
class MySQLSchema(ConnectionConfigSecretsSchema):
|
12
19
|
"""Schema to validate the secrets needed to connect to a MySQL Database"""
|
13
20
|
|
@@ -40,6 +47,11 @@ class MySQLSchema(ConnectionConfigSecretsSchema):
|
|
40
47
|
title="SSH required",
|
41
48
|
description="Indicates whether an SSH tunnel is required for the connection. Enable this option if your MySQL server is behind a firewall and requires SSH tunneling for remote connections.",
|
42
49
|
)
|
50
|
+
ssl_mode: Optional[MySQLSSLMode] = Field(
|
51
|
+
None, # TODO: support for verify-ca and verify-full
|
52
|
+
title="SSL Mode",
|
53
|
+
description="The SSL mode to use for the connection. Valid values are 'required', 'preferred', and 'disabled'.",
|
54
|
+
)
|
43
55
|
|
44
56
|
_required_components: ClassVar[List[str]] = ["host", "dbname"]
|
45
57
|
|
fides/api/schemas/system.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from datetime import datetime
|
2
2
|
from typing import Any, Dict, List, Optional, Sequence
|
3
3
|
|
4
|
-
from fideslang.models import
|
4
|
+
from fideslang.models import PrivacyDeclaration, System
|
5
5
|
from pydantic import ConfigDict, Field
|
6
6
|
from pydantic.main import BaseModel
|
7
7
|
|
@@ -17,7 +17,6 @@ class PrivacyDeclarationResponse(PrivacyDeclaration):
|
|
17
17
|
id: str = Field(
|
18
18
|
description="The database-assigned ID of the privacy declaration on the system. This is meant to be a read-only field, returned only in API responses"
|
19
19
|
)
|
20
|
-
cookies: Optional[List[Cookies]] = []
|
21
20
|
|
22
21
|
|
23
22
|
class BasicSystemResponse(System):
|
@@ -1,10 +1,11 @@
|
|
1
|
-
from typing import List
|
1
|
+
from typing import Dict, List
|
2
2
|
|
3
3
|
from sqlalchemy.engine import Engine, LegacyCursorResult, create_engine # type: ignore
|
4
4
|
|
5
5
|
from fides.api.graph.execution import ExecutionNode
|
6
6
|
from fides.api.schemas.connection_configuration.connection_secrets_mysql import (
|
7
7
|
MySQLSchema,
|
8
|
+
MySQLSSLMode,
|
8
9
|
)
|
9
10
|
from fides.api.service.connectors.query_configs.mysql_query_config import (
|
10
11
|
MySQLQueryConfig,
|
@@ -69,16 +70,27 @@ class MySQLConnector(SQLConnector):
|
|
69
70
|
uri = self.build_ssh_uri(local_address=self.ssh_server.local_bind_address)
|
70
71
|
else:
|
71
72
|
uri = (self.configuration.secrets or {}).get("url") or self.build_uri()
|
73
|
+
connect_args = self.get_connect_args()
|
72
74
|
return create_engine(
|
73
75
|
uri,
|
74
76
|
hide_parameters=self.hide_parameters,
|
75
77
|
echo=not self.hide_parameters,
|
78
|
+
connect_args=connect_args,
|
76
79
|
)
|
77
80
|
|
78
81
|
def query_config(self, node: ExecutionNode) -> SQLQueryConfig:
|
79
82
|
"""Query wrapper corresponding to the input execution_node."""
|
80
83
|
return MySQLQueryConfig(node)
|
81
84
|
|
85
|
+
def get_connect_args(self) -> Dict[str, Dict[str, MySQLSSLMode]]:
|
86
|
+
"""Get connection arguments for the engine"""
|
87
|
+
ssl_mode = self.configuration.secrets.get("ssl_mode", MySQLSSLMode.preferred)
|
88
|
+
return {
|
89
|
+
"ssl": {
|
90
|
+
"mode": ssl_mode,
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
82
94
|
@staticmethod
|
83
95
|
def cursor_result_to_rows(results: LegacyCursorResult) -> List[Row]:
|
84
96
|
"""
|
fides/api/worker/__init__.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
import json
|
2
1
|
from typing import Any, List, Optional
|
3
2
|
|
4
3
|
from celery import VERSION_BANNER
|
@@ -6,6 +5,7 @@ from celery.apps.worker import Worker
|
|
6
5
|
from celery.signals import celeryd_after_setup
|
7
6
|
from loguru import logger
|
8
7
|
|
8
|
+
from fides.api.db.base import Base # type: ignore
|
9
9
|
from fides.api.service.saas_request.override_implementations import *
|
10
10
|
from fides.api.tasks import (
|
11
11
|
DSR_QUEUE_NAME,
|
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/091e5fc4883aeb42.css" as="style"/><link rel="stylesheet" href="/_next/static/css/091e5fc4883aeb42.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-7104b266fb47d653.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-9560c81c6cf5f050.js" defer=""></script><script src="/_next/static/chunks/pages/404-1dfbf30fba0233a2.js" defer=""></script><script src="/_next/static/tLZG5DlQ8HHUd5zR6TZEN/_buildManifest.js" defer=""></script><script src="/_next/static/tLZG5DlQ8HHUd5zR6TZEN/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"tLZG5DlQ8HHUd5zR6TZEN","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|