ethyca-fides 2.71.2b0__py2.py3-none-any.whl → 2.72.0rc1__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.71.2b0.dist-info → ethyca_fides-2.72.0rc1.dist-info}/METADATA +1 -1
- {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc1.dist-info}/RECORD +257 -241
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/4bfbeff34611_add_polling_status.py +45 -12
- fides/api/api/v1/endpoints/connection_endpoints.py +38 -45
- fides/api/api/v1/endpoints/saas_config_endpoints.py +60 -48
- fides/api/api/v1/endpoints/system.py +11 -43
- fides/api/api/v1/endpoints/user_endpoints.py +8 -1
- fides/api/app_setup.py +1 -3
- fides/api/common_exceptions.py +4 -0
- fides/api/email_templates/get_email_template.py +3 -0
- fides/api/email_templates/template_names.py +1 -0
- fides/api/email_templates/templates/manual_task_digest.html +316 -0
- fides/api/models/detection_discovery/monitor_task.py +1 -0
- fides/api/models/digest/digest_execution.py +11 -1
- fides/api/models/event_audit.py +9 -0
- fides/api/models/messaging_template.py +7 -0
- fides/api/schemas/connection_configuration/connection_config.py +1 -30
- fides/api/schemas/messaging/messaging.py +15 -0
- fides/api/service/connectors/saas/connector_registry_service.py +1 -138
- fides/api/service/deps.py +8 -0
- fides/api/service/messaging/message_dispatch_service.py +38 -1
- fides/api/tasks/__init__.py +0 -1
- fides/api/util/connection_util.py +99 -215
- fides/api/util/event_audit_util.py +230 -0
- fides/api/util/masking_util.py +31 -0
- fides/api/util/saas_config_updater.py +66 -0
- fides/service/connection/__init__.py +0 -0
- fides/service/connection/connection_service.py +651 -0
- fides/service/event_audit_service.py +16 -22
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/ODdLh9UEeAsudRtjifMM5/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1437-fb699e9d69c3e325.js → 1437-4604a69888906ec0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/155-bf4e3ffb18f29226.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1817-10b392e1dd9c4673.js → 1817-6a6b4aea9d242c5b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2040-01d5edb1802d3482.js → 2040-8eead9d29546a50f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2397-40506a386a3a469a.js → 2397-92f628c53688925b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-9b596ba7f5267afc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3377-80612c111e047cb6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3696-259be222ea12392a.js → 3696-e4abb6a922b954a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3700-1f9f6e5ebfa3ab0a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-c2f1e4ea077f1f26.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4496-dd1ef427be497620.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5185-bf5655b5d697b714.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5258-2d28b2c64acf5de3.js → 5258-63325c03319e87dc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5279-21929b12c927b022.js → 5279-fcac4a8575f41ecc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5643-7800464c8df7a78e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5783-55c0387508e50f3e.js → 5783-7deeb7de5d2db4c4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-0ab2a15c37b83b8d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6315-2d4e86a32fc40458.js → 6315-d0b886d849c2e5e3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6853-cb15625a713b3ef9.js → 6853-6d64d627df6f8194.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-8b106311a3be35f4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7245-53a20677c49b41c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7476-f25fce73eeb1f9c6.js → 7476-08717f00da5f89ab.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{7488-df17b592fbeaa1eb.js → 7488-bad160a2bfd89871.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-775c578fa8109b0f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{8011-56031d82d5428981.js → 8011-c23d609ed3f0efa5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/8212-67ac884660ddb63a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{8373-7f940f5ac9c38b1f.js → 8373-43b6df89a2085d6b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9046-31b16a7e872c22be.js → 9046-28fe0723e3b6584f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9070-6d3aaaf5aa5913ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9330-cea1bf40f5d27e53.js → 9330-6eb11127296c54c2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9682-2754256aeae141bb.js → 9682-65d253d54f84f6f2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9899-15530c468d5656a1.js → 9899-63998972698a49fb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9965-4709f43bf62af9a9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-9e869a44215709ed.js → _app-4f697016cf2fb1bb.js} +43 -43
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-e2a5c951347195e3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-0058fe05f2d23d1a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-b6b2d50d894cefa5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-a7fe3925771bb6c3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-e9ec351281c54822.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-69b429a9d30ebaf1.js → projects-3c935e93208d2bdd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-a53ef0161235ee47.js → data-catalog-79d06a04698c47c0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-e50e9c8e11412b2a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/data-explorer-dd93cffd6744837d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-ace848575e688200.js → [monitorId]-878aa4ab0746df5b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-53ca31c50c43007f.js → action-center-a2e9c0bfa67c633d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-f87e4a0f664f4cde.js → activity-70ca690b253a118e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-db54d01fd8f6df50.js → new-5c20080cdb053b1d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-55d312af5228e098.js → dataset-96355a68e8c28fe8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-488beba62e832660.js → [id]-448729ee9d1d78c3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-4aad5495f9bf81ce.js → new-42c720ec5c941573.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-8a2ba955d92d52ee.js → index-ca794e85c16cba67.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-2f1dc17eba11fb4e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-f69b04d3b4cf43b1.js → integrations-bbec0140433a199b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/[id]-058125922d1eaeec.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/new-7a5f76708c79f714.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-4b5feea248275c28.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/[key]-d08f3a7cd2d011ec.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/new-cb2c7fbc26886052.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-37eb88a387fca86f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/[id]-a6ae72abe59ff830.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/add-template-a3e4b5b575b31be1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-74585f6d9ff1245f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications-9644c0f088a01fea.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-39b5586d9c8b64aa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-5163f3213377bd35.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-0b1547cd9b114c6b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-da562cba4cffd6bb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-3a587676869d2ef6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-defc3b917306a6d8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-b46f432b51421fae.js → table-migration-11a70bcfa672ce8f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-787621468b5a7619.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-de681c2d022c9e0d.js → storage-24a8c2ab57625556.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-da634187d8201ab3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-e410d13a2b35cff4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-aec1bf8a409ec75f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4c20c08ca7ea8cff.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-ea9baf24de35d3b1.js → custom-fields-8e4a76376927afd5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-2e88cc7a6074a28b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-33448bf0a1d53870.js → locations-20789aa0c84d544e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-3c315036f1fc9f90.js → organization-f84a13eb9688cb5f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-5be9ce7a745ce908.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-86f5557384124f79.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-2589729c47976357.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-726fbc0a34ffba1f.js → [id]-6217433a26599521.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-df9b75ab01c1a2ea.js → user-management-b6c4bf35c003965d.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/de09ed8a0adf1ca2.css +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/data-explorer.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/notifications/digests/[id].html +1 -0
- fides/ui-build/static/admin/notifications/digests/new.html +1 -0
- fides/ui-build/static/admin/notifications/digests.html +1 -0
- fides/ui-build/static/admin/notifications/providers/[key].html +1 -0
- fides/ui-build/static/admin/notifications/providers/new.html +1 -0
- fides/ui-build/static/admin/notifications/providers.html +1 -0
- fides/ui-build/static/admin/notifications/templates/[id].html +1 -0
- fides/ui-build/static/admin/notifications/templates/add-template.html +1 -0
- fides/ui-build/static/admin/notifications/templates.html +1 -0
- fides/ui-build/static/admin/notifications.html +1 -0
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/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/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/[id].html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/new.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/privacy-requests.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/155-3d03f101c662c054.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-edfdffa353a611e4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3377-4c129258b4c4ea28.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3700-42976bfaad3b91c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-5270e3e23b08ab2b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5185-325e5435a0c7dcb7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5643-7583c1f8dbd83273.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-ca31d48a33202761.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-08b59d28d7a2a43b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7245-895bb7c6a6c797bc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-71582de0e818e28f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9070-13f237db78da586d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9965-54037b6c8f36d14b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-1c9cef80deccb15d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-4adeec3bcec05f7b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-4254abef7bb52edd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-8e76cbfaf71fdcb9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-93730a4316c0d980.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-f85f4f8fcf1bfbdb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/data-explorer-3619e454763dba09.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4580f70eb41b6a7d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-d6eed2dc5d27f625.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-c7b43fa365f4be10.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-c7ba755c2e0e2377.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-f14bfd5890a0e939.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-e4274a4d5d23eea9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-f5bce1ceb0502f04.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-90b4ea9f9deca6e2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-d6043ae8dae6ef7d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-520ba5ae02f47bda.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-fe4ed3ad75151e36.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cd8ba2eef9085377.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-764b6ce8e030d4a1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-da78452b3c41b29e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-6442e761ecb5c65a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-6f61d886aa6f5ce7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/[key]-4a18d8135c0dbf2a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/new-41957281b8ec26b1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers-776258bad0941a7d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-8067e12227210f48.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-277ea1f34c3714cf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-cecea5832cb1f3b0.js +0 -1
- fides/ui-build/static/admin/_next/static/css/372d6a236c84613f.css +0 -1
- fides/ui-build/static/admin/_next/static/zmEQMSpOBih8kmA1t-EWO/_buildManifest.js +0 -1
- fides/ui-build/static/admin/messaging/[id].html +0 -1
- fides/ui-build/static/admin/messaging/add-template.html +0 -1
- fides/ui-build/static/admin/messaging.html +0 -1
- fides/ui-build/static/admin/settings/messaging-providers/[key].html +0 -1
- fides/ui-build/static/admin/settings/messaging-providers/new.html +0 -1
- fides/ui-build/static/admin/settings/messaging-providers.html +0 -1
- {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc1.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc1.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{zmEQMSpOBih8kmA1t-EWO → ODdLh9UEeAsudRtjifMM5}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1099-27b2d4e59a569b38.js → 1099-d1b22e891705eaf8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1115-8fb5000847f73ec7.js → 1115-584dac093cef6cc3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3772-aa7beafe5df5e656.js → 3772-b945c6839e43c753.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-fa1d71afc7dc9e6e.js → 3923-c1e41661ebf57178.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4817-5f9b9c9bafe888f1.js → 4817-066598cef25d7e88.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{549-c3b4c51f45a84a52.js → 549-3e3b8d01bc984f96.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7773-98d34d188ae0a694.js → 7773-24899908bf8ff659.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-7944f684f8945506.js → 796-6fe49d134f660156.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-e71887e2c4283249.js → 9826-1f42934a2863992e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-2014144a1a0fa64f.js → 404-962d132471cd41ba.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-4f3ba02774f27795.js → manual-055d058d16c02957.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-f7bdc2da53137ffd.js → add-vendors-7c829e58485fc821.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-a27b220fe76bdc8e.js → configure-5c58b69dd473cc06.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-542fd4a4322122f1.js → [id]-58460ac9c1dface5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d31d1c233e94dc1f.js → [id]-25ce8366e689363b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2ea057e6217993f9.js → new-faa457089616711a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-eb557180eded0abd.js → properties-45a2901a35edc8f7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-c64589e53338e59a.js → consent-a7a4e419e4086033.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-d3d1841bc8105e56.js → [resourceUrn]-3b59925f6c9a13a9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-8cd4d1d6ba000333.js → [projectUrn]-ffb6e0fe6712342e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-791c522ad1d9a2ce.js → [resourceUrn]-8d7d9152e215c3b6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-8c7103ebf01d6e6a.js → resources-96be972a983616e3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-699762cb8a66237e.js → [resourceUrn]-260f5deb68966b70.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-d970d0b82db36c88.js → detection-d735dab3d9f3adc5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-a6343038a447699c.js → [resourceUrn]-c7f055275a2c503f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-ce82ba79f9bf825c.js → discovery-b1cfd55c7e127865.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-ae7a4c1c4eabc0d4.js → datamap-18f255a8bbeecaa4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-179e5d09ccff50c1.js → [...subfieldNames]-e04a4e16ccf32aef.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-59466e5e238c59d0.js → [collectionName]-a40c4febe16a0a6d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-36d90c8c39fb0d1c.js → [datasetId]-f500a77eefb057e7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-496ec7ecca8259dc.js → datastore-connection-a8fc95a46de38b35.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-04ebf2fb6fc4358a.js → configure-1926359bdf5d6c30.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-f75a407d78857ab3.js → [id]-47118b9976ad7212.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-975ff605e1dbc09c.js → add-property-2e6b0d8b409ba1fd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-e7fdf3a9a3e8c267.js → properties-32486c25255c9cb1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/{[id]-bd1042a0e9be6aff.js → [id]-a270325109398f48.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/{new-469ad83c8cfa1290.js → new-2e0c8e249f286427.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-44d06e280990854d.js → domain-records-e3dcef1ec8cf8b9e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-11148b182370fd83.js → email-templates-7469d2f85396c693.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{privacy-requests-00917525c9245a90.js → privacy-requests-b72df6f3d460125f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-5d924b2f1f926b88.js → regulations-aa02bc818e089c49.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-1a902922759cae76.js → [id]-2fc7c0d3988427b3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-629c88e90699369b.js → new-e399005c3bb4db1b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{webpack-118fb4723d13c14f.js → webpack-8eac1ea5c825c8b4.js} +0 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Any, Dict, Optional, Tuple
|
|
4
|
+
|
|
5
|
+
from fides.api.common_exceptions import NoSuchConnectionTypeSecretSchemaError
|
|
6
|
+
from fides.api.models.connectionconfig import ConnectionConfig
|
|
7
|
+
from fides.api.models.event_audit import EventAuditType
|
|
8
|
+
from fides.api.schemas.connection_configuration.connection_oauth_config import (
|
|
9
|
+
OAuthConfigSchema,
|
|
10
|
+
)
|
|
11
|
+
from fides.api.util.connection_type import get_connection_type_secret_schema
|
|
12
|
+
from fides.api.util.masking_util import mask_sensitive_fields
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def normalize_value(value: Any) -> Any:
|
|
16
|
+
"""
|
|
17
|
+
Normalize values for consistent comparison and serialization.
|
|
18
|
+
|
|
19
|
+
- Converts datetime objects to ISO strings
|
|
20
|
+
- Converts enums to their string values
|
|
21
|
+
- Converts lists of enums to lists of string values
|
|
22
|
+
- Treats None and empty strings as equivalent (both become None)
|
|
23
|
+
"""
|
|
24
|
+
# Treat None and empty strings as equivalent
|
|
25
|
+
if value == "" or value is None:
|
|
26
|
+
return None
|
|
27
|
+
if isinstance(value, datetime):
|
|
28
|
+
return value.isoformat()
|
|
29
|
+
if isinstance(value, Enum):
|
|
30
|
+
return value.value
|
|
31
|
+
if (
|
|
32
|
+
isinstance(value, list) and value and hasattr(value[0], "value")
|
|
33
|
+
): # List of enums
|
|
34
|
+
return [item.value for item in value]
|
|
35
|
+
return value
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _get_saas_connector_type(connection_config: ConnectionConfig) -> Optional[str]:
|
|
39
|
+
"""
|
|
40
|
+
Helper function to extract SaaS connector type from connection config.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
connection_config: The connection configuration
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
SaaS connector type if available, None otherwise
|
|
47
|
+
"""
|
|
48
|
+
connection_type = connection_config.connection_type.value # type: ignore[attr-defined]
|
|
49
|
+
if connection_type == "saas" and connection_config.saas_config:
|
|
50
|
+
try:
|
|
51
|
+
saas_config = connection_config.get_saas_config()
|
|
52
|
+
if saas_config:
|
|
53
|
+
return saas_config.type
|
|
54
|
+
except Exception:
|
|
55
|
+
# If SaaS config is invalid, try to get type directly from raw config
|
|
56
|
+
if (
|
|
57
|
+
isinstance(connection_config.saas_config, dict)
|
|
58
|
+
and "type" in connection_config.saas_config
|
|
59
|
+
):
|
|
60
|
+
return connection_config.saas_config["type"]
|
|
61
|
+
return None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _create_connection_event_details(
|
|
65
|
+
connection_config: ConnectionConfig,
|
|
66
|
+
operation_type: str,
|
|
67
|
+
changed_fields: Optional[set] = None,
|
|
68
|
+
) -> Dict[str, Any]:
|
|
69
|
+
"""
|
|
70
|
+
Create standardized event details for connection audit events.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
connection_config: The connection configuration
|
|
74
|
+
operation_type: Type of operation (create, update, delete)
|
|
75
|
+
changed_fields: Set of field names that changed (None means include all fields)
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Standardized event details dictionary
|
|
79
|
+
"""
|
|
80
|
+
event_details: dict[str, Any] = {
|
|
81
|
+
"operation_type": operation_type,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Define fields to exclude from audit details
|
|
85
|
+
excluded_fields = {
|
|
86
|
+
"id",
|
|
87
|
+
"created_at",
|
|
88
|
+
"updated_at",
|
|
89
|
+
"secrets",
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# Dynamically add connection config fields (only changed fields if specified)
|
|
93
|
+
configuration_changes: dict[str, Any] = {}
|
|
94
|
+
for column in connection_config.__table__.columns:
|
|
95
|
+
field_name = column.name
|
|
96
|
+
if field_name not in excluded_fields:
|
|
97
|
+
# If changed_fields is specified, only include fields that changed
|
|
98
|
+
if changed_fields is not None and field_name not in changed_fields:
|
|
99
|
+
continue
|
|
100
|
+
|
|
101
|
+
value = getattr(connection_config, field_name)
|
|
102
|
+
|
|
103
|
+
configuration_changes[field_name] = normalize_value(value)
|
|
104
|
+
|
|
105
|
+
event_details["configuration_changes"] = configuration_changes
|
|
106
|
+
return event_details
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def generate_connection_audit_event_details(
|
|
110
|
+
event_type: EventAuditType,
|
|
111
|
+
connection_config: ConnectionConfig,
|
|
112
|
+
description: Optional[str] = None,
|
|
113
|
+
changed_fields: Optional[set] = None,
|
|
114
|
+
) -> Tuple[Dict[str, Any], str]:
|
|
115
|
+
"""
|
|
116
|
+
Create an audit event for connection operations.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
event_type: Type of audit event
|
|
120
|
+
connection_config: The connection configuration
|
|
121
|
+
description: Human-readable description
|
|
122
|
+
changed_fields: Set of field names that changed (None means include all fields)
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
Created EventAudit instance
|
|
126
|
+
"""
|
|
127
|
+
# Determine operation type from event type
|
|
128
|
+
operation_type = event_type.value.split(".")[
|
|
129
|
+
-1
|
|
130
|
+
] # e.g., "created", "updated", "deleted"
|
|
131
|
+
|
|
132
|
+
# Create standardized event details
|
|
133
|
+
if operation_type == "deleted":
|
|
134
|
+
event_details = {
|
|
135
|
+
"operation_type": operation_type,
|
|
136
|
+
}
|
|
137
|
+
else:
|
|
138
|
+
event_details = _create_connection_event_details(
|
|
139
|
+
connection_config,
|
|
140
|
+
operation_type,
|
|
141
|
+
changed_fields,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Generate description if not provided
|
|
145
|
+
connection_type = connection_config.connection_type.value # type: ignore[attr-defined]
|
|
146
|
+
connector_type = _get_saas_connector_type(connection_config)
|
|
147
|
+
|
|
148
|
+
description = f"Connection {operation_type}: {connector_type if connector_type else connection_type} connection '{connection_config.key}'"
|
|
149
|
+
|
|
150
|
+
return event_details, description
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def generate_connection_secrets_event_details(
|
|
154
|
+
event_type: EventAuditType,
|
|
155
|
+
connection_config: ConnectionConfig,
|
|
156
|
+
secrets_modified: Dict[str, Any],
|
|
157
|
+
) -> Tuple[Dict[str, Any], str]:
|
|
158
|
+
"""
|
|
159
|
+
Create an audit event for connection secrets operations.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
event_type: Type of audit event (should be a connection.secrets.* event)
|
|
163
|
+
connection_config: The connection configuration
|
|
164
|
+
secrets_modified: Dict of secret field names and values that were modified
|
|
165
|
+
changed_fields: Set of field names that changed (None means include all fields)
|
|
166
|
+
description: Human-readable description
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
Created EventAudit instance
|
|
170
|
+
"""
|
|
171
|
+
# Determine operation type from event type
|
|
172
|
+
operation_type = event_type.value.split(".")[
|
|
173
|
+
-1
|
|
174
|
+
] # e.g., "created", "updated", "deleted"
|
|
175
|
+
|
|
176
|
+
# Mask the secrets using the existing masking utility
|
|
177
|
+
saas_config = connection_config.get_saas_config()
|
|
178
|
+
connection_type = connection_config.connection_type.value # type: ignore[attr-defined]
|
|
179
|
+
connection_type = (
|
|
180
|
+
saas_config.type
|
|
181
|
+
if connection_type == "saas" and saas_config
|
|
182
|
+
else connection_type
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Get the secret schema for this connection type
|
|
186
|
+
try:
|
|
187
|
+
secret_schema = None
|
|
188
|
+
|
|
189
|
+
# For HTTPS connections with OAuth config, check if we should use OAuth schema
|
|
190
|
+
if connection_type == "https" and connection_config.oauth_config:
|
|
191
|
+
# Get OAuth fields dynamically from the schema
|
|
192
|
+
oauth_schema = OAuthConfigSchema.model_json_schema()
|
|
193
|
+
oauth_fields = set(oauth_schema.get("properties", {}).keys())
|
|
194
|
+
secrets_keys = set(secrets_modified.keys())
|
|
195
|
+
|
|
196
|
+
# If we're updating OAuth fields, use OAuth schema
|
|
197
|
+
if secrets_keys.intersection(oauth_fields):
|
|
198
|
+
secret_schema = oauth_schema
|
|
199
|
+
|
|
200
|
+
# If we haven't set a schema yet, use the connection type's secret schema
|
|
201
|
+
if secret_schema is None:
|
|
202
|
+
secret_schema = get_connection_type_secret_schema(
|
|
203
|
+
connection_type=connection_type
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# Use existing masking function
|
|
207
|
+
masked_secrets = mask_sensitive_fields(secrets_modified, secret_schema)
|
|
208
|
+
except NoSuchConnectionTypeSecretSchemaError:
|
|
209
|
+
# if there is no schema, mask every secret
|
|
210
|
+
masked_secrets = {key: "**********" for key in secrets_modified}
|
|
211
|
+
|
|
212
|
+
# Create event details with masked secret values
|
|
213
|
+
event_details: dict[str, Any] = {
|
|
214
|
+
"secrets": masked_secrets,
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
# Add SaaS connector type if applicable
|
|
218
|
+
connector_type = _get_saas_connector_type(connection_config)
|
|
219
|
+
if connector_type:
|
|
220
|
+
event_details["saas_connector_type"] = connector_type
|
|
221
|
+
|
|
222
|
+
# Generate description
|
|
223
|
+
secret_names = ", ".join(secrets_modified) if secrets_modified else "secrets"
|
|
224
|
+
|
|
225
|
+
if connector_type:
|
|
226
|
+
description = f"Connection secrets {operation_type}: {connector_type} connection '{connection_config.key}' - {secret_names}"
|
|
227
|
+
else:
|
|
228
|
+
description = f"Connection secrets {operation_type}: {connection_type} connection '{connection_config.key}' - {secret_names}"
|
|
229
|
+
|
|
230
|
+
return event_details, description
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def mask_sensitive_fields(
|
|
5
|
+
connection_secrets: Dict[str, Any], secret_schema: Dict[str, Any]
|
|
6
|
+
) -> Dict[str, Any]:
|
|
7
|
+
"""
|
|
8
|
+
Mask sensitive fields in the given secrets based on the provided schema.
|
|
9
|
+
This function traverses the given secrets dictionary and uses the provided schema to
|
|
10
|
+
identify fields that have been marked as sensitive. The function replaces the sensitive
|
|
11
|
+
field values with a mask string ('********').
|
|
12
|
+
Args:
|
|
13
|
+
connection_secrets (Dict[str, Any]): The secrets to be masked.
|
|
14
|
+
secret_schema (Dict[str, Any]): The schema defining which fields are sensitive.
|
|
15
|
+
Returns:
|
|
16
|
+
Dict[str, Any]: The secrets dictionary with sensitive fields masked.
|
|
17
|
+
"""
|
|
18
|
+
if connection_secrets is None:
|
|
19
|
+
return connection_secrets
|
|
20
|
+
|
|
21
|
+
secret_schema_properties = secret_schema["properties"]
|
|
22
|
+
new_connection_secrets = {}
|
|
23
|
+
|
|
24
|
+
for key, value in connection_secrets.items():
|
|
25
|
+
if key in secret_schema_properties:
|
|
26
|
+
if secret_schema_properties.get(key, {}).get("sensitive", False):
|
|
27
|
+
new_connection_secrets[key] = "**********"
|
|
28
|
+
else:
|
|
29
|
+
new_connection_secrets[key] = value
|
|
30
|
+
|
|
31
|
+
return new_connection_secrets
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from typing import Iterable
|
|
2
|
+
|
|
3
|
+
from loguru import logger
|
|
4
|
+
from packaging.version import Version
|
|
5
|
+
from packaging.version import parse as parse_version
|
|
6
|
+
from sqlalchemy.orm import Session
|
|
7
|
+
|
|
8
|
+
from fides.api.models.connectionconfig import ConnectionConfig
|
|
9
|
+
from fides.api.schemas.saas.connector_template import ConnectorTemplate
|
|
10
|
+
from fides.api.schemas.saas.saas_config import SaaSConfig
|
|
11
|
+
from fides.api.service.connectors.saas.connector_registry_service import (
|
|
12
|
+
ConnectorRegistry,
|
|
13
|
+
)
|
|
14
|
+
from fides.api.util.saas_util import load_config_from_string
|
|
15
|
+
from fides.service.connection.connection_service import ConnectionService
|
|
16
|
+
from fides.service.event_audit_service import EventAuditService
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def update_saas_configs(db: Session) -> None:
|
|
20
|
+
"""
|
|
21
|
+
Updates SaaS config instances currently in the DB if to the
|
|
22
|
+
corresponding template in the registry are found.
|
|
23
|
+
|
|
24
|
+
Effectively an "update script" for SaaS config instances,
|
|
25
|
+
to be run on server bootstrap.
|
|
26
|
+
"""
|
|
27
|
+
event_audit_service = EventAuditService(db)
|
|
28
|
+
saas_connection_service = ConnectionService(db, event_audit_service)
|
|
29
|
+
for connector_type in ConnectorRegistry.connector_types():
|
|
30
|
+
logger.debug(
|
|
31
|
+
"Determining if any updates are needed for connectors of type {} based on templates...",
|
|
32
|
+
connector_type,
|
|
33
|
+
)
|
|
34
|
+
template: ConnectorTemplate = ConnectorRegistry.get_connector_template( # type: ignore
|
|
35
|
+
connector_type
|
|
36
|
+
)
|
|
37
|
+
saas_config = SaaSConfig(**load_config_from_string(template.config))
|
|
38
|
+
template_version: Version = parse_version(saas_config.version)
|
|
39
|
+
|
|
40
|
+
connection_configs: Iterable[ConnectionConfig] = ConnectionConfig.filter(
|
|
41
|
+
db=db,
|
|
42
|
+
conditions=(ConnectionConfig.saas_config["type"].astext == connector_type),
|
|
43
|
+
).all()
|
|
44
|
+
for connection_config in connection_configs:
|
|
45
|
+
saas_config_instance = SaaSConfig.model_validate(
|
|
46
|
+
connection_config.saas_config
|
|
47
|
+
)
|
|
48
|
+
if parse_version(saas_config_instance.version) < template_version:
|
|
49
|
+
logger.info(
|
|
50
|
+
"Updating SaaS config instance '{}' of type '{}' as its version, {}, was found to be lower than the template version {}",
|
|
51
|
+
saas_config_instance.fides_key,
|
|
52
|
+
connector_type,
|
|
53
|
+
saas_config_instance.version,
|
|
54
|
+
template_version,
|
|
55
|
+
)
|
|
56
|
+
try:
|
|
57
|
+
saas_connection_service.update_saas_instance(
|
|
58
|
+
connection_config,
|
|
59
|
+
template,
|
|
60
|
+
saas_config_instance,
|
|
61
|
+
)
|
|
62
|
+
except Exception:
|
|
63
|
+
logger.exception(
|
|
64
|
+
"Encountered error attempting to update SaaS config instance {}",
|
|
65
|
+
saas_config_instance.fides_key,
|
|
66
|
+
)
|
|
File without changes
|