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,316 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Weekly DSR Summary</title>
|
|
7
|
+
<style>
|
|
8
|
+
/* Reset styles for email clients */
|
|
9
|
+
body, table, td, p, a, li, blockquote {
|
|
10
|
+
-webkit-text-size-adjust: 100%;
|
|
11
|
+
-ms-text-size-adjust: 100%;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
table, td {
|
|
15
|
+
mso-table-lspace: 0pt;
|
|
16
|
+
mso-table-rspace: 0pt;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
img {
|
|
20
|
+
-ms-interpolation-mode: bicubic;
|
|
21
|
+
border: 0;
|
|
22
|
+
height: auto;
|
|
23
|
+
line-height: 100%;
|
|
24
|
+
outline: none;
|
|
25
|
+
text-decoration: none;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Main styles */
|
|
29
|
+
body {
|
|
30
|
+
margin: 0;
|
|
31
|
+
padding: 0;
|
|
32
|
+
width: 100% !important;
|
|
33
|
+
min-width: 100%;
|
|
34
|
+
height: 100%;
|
|
35
|
+
background-color: #f8fafc;
|
|
36
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
37
|
+
font-size: 16px;
|
|
38
|
+
line-height: 1.6;
|
|
39
|
+
color: #334155;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.email-container {
|
|
43
|
+
max-width: 600px;
|
|
44
|
+
margin: 0 auto;
|
|
45
|
+
background-color: #ffffff;
|
|
46
|
+
border-radius: 8px;
|
|
47
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
48
|
+
overflow: hidden;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.logo-section {
|
|
52
|
+
background-color: #ffffff;
|
|
53
|
+
padding: 24px;
|
|
54
|
+
text-align: center;
|
|
55
|
+
border-bottom: 1px solid #e5e5e5;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.logo-container {
|
|
59
|
+
margin-bottom: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.header {
|
|
63
|
+
background-color: #000000;
|
|
64
|
+
padding: 32px 24px;
|
|
65
|
+
text-align: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.logo {
|
|
69
|
+
max-width: 200px;
|
|
70
|
+
max-height: 60px;
|
|
71
|
+
width: auto;
|
|
72
|
+
height: auto;
|
|
73
|
+
display: block;
|
|
74
|
+
margin: 0 auto;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.logo-placeholder {
|
|
78
|
+
width: 200px;
|
|
79
|
+
height: 60px;
|
|
80
|
+
background-color: #333333;
|
|
81
|
+
border: 2px dashed #666666;
|
|
82
|
+
display: flex;
|
|
83
|
+
align-items: center;
|
|
84
|
+
justify-content: center;
|
|
85
|
+
margin: 0 auto;
|
|
86
|
+
color: #999999;
|
|
87
|
+
font-size: 14px;
|
|
88
|
+
font-weight: 500;
|
|
89
|
+
text-align: center;
|
|
90
|
+
border-radius: 4px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.header h1 {
|
|
94
|
+
color: #ffffff;
|
|
95
|
+
font-size: 24px;
|
|
96
|
+
font-weight: 600;
|
|
97
|
+
margin: 0;
|
|
98
|
+
letter-spacing: -0.025em;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.content {
|
|
102
|
+
padding: 32px 24px;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.greeting {
|
|
106
|
+
font-size: 18px;
|
|
107
|
+
color: #000000;
|
|
108
|
+
margin-bottom: 24px;
|
|
109
|
+
font-weight: 500;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.intro-text {
|
|
113
|
+
margin-bottom: 32px;
|
|
114
|
+
color: #333333;
|
|
115
|
+
line-height: 1.7;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.section {
|
|
119
|
+
margin-bottom: 32px;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.section-title {
|
|
123
|
+
font-size: 20px;
|
|
124
|
+
font-weight: 600;
|
|
125
|
+
color: #000000;
|
|
126
|
+
margin-bottom: 16px;
|
|
127
|
+
padding-bottom: 8px;
|
|
128
|
+
border-bottom: 2px solid #e5e5e5;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.task-count {
|
|
132
|
+
background-color: #f5f5f5;
|
|
133
|
+
border-left: 4px solid #000000;
|
|
134
|
+
padding: 16px 20px;
|
|
135
|
+
margin-bottom: 20px;
|
|
136
|
+
border-radius: 0 6px 6px 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.task-count-text {
|
|
140
|
+
font-size: 18px;
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
color: #000000;
|
|
143
|
+
margin: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.cta-button {
|
|
147
|
+
display: inline-block;
|
|
148
|
+
background-color: #000000;
|
|
149
|
+
color: #ffffff !important;
|
|
150
|
+
text-decoration: none;
|
|
151
|
+
padding: 12px 24px;
|
|
152
|
+
border-radius: 6px;
|
|
153
|
+
font-weight: 600;
|
|
154
|
+
font-size: 16px;
|
|
155
|
+
text-align: center;
|
|
156
|
+
transition: all 0.2s ease;
|
|
157
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.cta-button:hover {
|
|
161
|
+
background-color: #333333;
|
|
162
|
+
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
|
163
|
+
transform: translateY(-1px);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.footer {
|
|
167
|
+
background-color: #f5f5f5;
|
|
168
|
+
padding: 24px;
|
|
169
|
+
text-align: center;
|
|
170
|
+
border-top: 1px solid #e5e5e5;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.footer-text {
|
|
174
|
+
color: #666666;
|
|
175
|
+
font-size: 14px;
|
|
176
|
+
line-height: 1.6;
|
|
177
|
+
margin: 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.signature {
|
|
181
|
+
margin-top: 24px;
|
|
182
|
+
color: #333333;
|
|
183
|
+
font-weight: 500;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* Responsive styles */
|
|
187
|
+
@media only screen and (max-width: 600px) {
|
|
188
|
+
.email-container {
|
|
189
|
+
margin: 0;
|
|
190
|
+
border-radius: 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.header, .content, .footer {
|
|
194
|
+
padding: 24px 16px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.header h1 {
|
|
198
|
+
font-size: 20px;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.greeting {
|
|
202
|
+
font-size: 16px;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.section-title {
|
|
206
|
+
font-size: 18px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.cta-button {
|
|
210
|
+
width: 100%;
|
|
211
|
+
box-sizing: border-box;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* Dark mode support */
|
|
216
|
+
@media (prefers-color-scheme: dark) {
|
|
217
|
+
body {
|
|
218
|
+
background-color: #000000;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.email-container {
|
|
222
|
+
background-color: #1a1a1a;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.greeting, .section-title {
|
|
226
|
+
color: #ffffff;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.intro-text, .footer-text, .signature {
|
|
230
|
+
color: #cccccc;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.task-count {
|
|
234
|
+
background-color: #333333;
|
|
235
|
+
border-left-color: #ffffff;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.task-count-text {
|
|
239
|
+
color: #ffffff;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.footer {
|
|
243
|
+
background-color: #333333;
|
|
244
|
+
border-top-color: #666666;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.logo-section {
|
|
248
|
+
background-color: #1a1a1a;
|
|
249
|
+
border-bottom-color: #666666;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.logo-placeholder {
|
|
253
|
+
background-color: #555555;
|
|
254
|
+
border-color: #888888;
|
|
255
|
+
color: #cccccc;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
</style>
|
|
259
|
+
</head>
|
|
260
|
+
<body>
|
|
261
|
+
<div style="padding: 20px 0;">
|
|
262
|
+
<div class="email-container">
|
|
263
|
+
<!-- Logo Section -->
|
|
264
|
+
<div class="logo-section">
|
|
265
|
+
<div class="logo-container">
|
|
266
|
+
{% if company_logo_url %}
|
|
267
|
+
<img src="{{ company_logo_url }}" alt="{{ organization_name }} Logo" class="logo">
|
|
268
|
+
{% else %}
|
|
269
|
+
<div class="logo-placeholder">{{ organization_name }}</div>
|
|
270
|
+
{% endif %}
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
|
|
274
|
+
<!-- Main Content -->
|
|
275
|
+
<div class="content">
|
|
276
|
+
<div class="greeting">Hi {{ vendor_contact_name }},</div>
|
|
277
|
+
|
|
278
|
+
<div class="intro-text">
|
|
279
|
+
{{ intro_text | default("This is your weekly summary of open data subject requests tasks from " + organization_name + " that require your attention. Please review the tasks listed below in our <a href='" + portal_url + "' style='color: #000000; text-decoration: underline; font-weight: 600;'>Privacy Center</a> to ensure timely completion.") | safe }}
|
|
280
|
+
</div>
|
|
281
|
+
|
|
282
|
+
<!-- Tasks Due Soon Section -->
|
|
283
|
+
<div class="section">
|
|
284
|
+
<div class="section-title">Tasks Due Soon</div>
|
|
285
|
+
|
|
286
|
+
<div class="task-count">
|
|
287
|
+
<p class="task-count-text">You have {{ total_task_count }} request{{ 's' if total_task_count != 1 else '' }} coming due, including {{ imminent_task_count }} within the next 7 days and {{ upcoming_task_count }} due in the next period.</p>
|
|
288
|
+
</div>
|
|
289
|
+
|
|
290
|
+
<div style="text-align: center;">
|
|
291
|
+
<a href="{{ portal_url }}" class="cta-button">View All Tasks</a>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<!-- Closing -->
|
|
296
|
+
<div style="margin-top: 32px;">
|
|
297
|
+
<p style="color: #333333; margin-bottom: 24px;">
|
|
298
|
+
{{ closing_text | default("Thank you for your partnership in processing these requests efficiently. If you have any questions or issues, please reach out to your contacts at " + organization_name + ".") | safe }}
|
|
299
|
+
</p>
|
|
300
|
+
|
|
301
|
+
<div class="signature">
|
|
302
|
+
{{ signature | default("Best regards,<br>The " + organization_name + " Privacy Team") | safe }}
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
|
|
307
|
+
<!-- Footer -->
|
|
308
|
+
<div class="footer">
|
|
309
|
+
<p class="footer-text">
|
|
310
|
+
This email was sent from your Privacy Center. Please do not reply to this email.
|
|
311
|
+
</p>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
</body>
|
|
316
|
+
</html>
|
|
@@ -4,6 +4,7 @@ from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text
|
|
|
4
4
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
5
5
|
from sqlalchemy.ext.declarative import declared_attr
|
|
6
6
|
from sqlalchemy.orm import Session, relationship
|
|
7
|
+
from sqlalchemy.orm.attributes import flag_modified
|
|
7
8
|
from sqlalchemy.sql import func
|
|
8
9
|
|
|
9
10
|
from fides.api.db.base_class import Base
|
|
@@ -92,8 +93,12 @@ class DigestTaskExecution(
|
|
|
92
93
|
self.processed_user_ids = processed_user_ids
|
|
93
94
|
self.last_checkpoint_at = func.now()
|
|
94
95
|
|
|
96
|
+
# Mark JSONB fields as modified so SQLAlchemy knows they changed
|
|
97
|
+
flag_modified(self, "processed_user_ids")
|
|
98
|
+
|
|
95
99
|
if execution_state:
|
|
96
100
|
self.execution_state = execution_state
|
|
101
|
+
flag_modified(self, "execution_state")
|
|
97
102
|
|
|
98
103
|
self.save(db)
|
|
99
104
|
|
|
@@ -123,8 +128,13 @@ class DigestTaskExecution(
|
|
|
123
128
|
|
|
124
129
|
def get_remaining_work(self) -> Dict[str, Any]:
|
|
125
130
|
"""Get information about remaining work for resumption."""
|
|
131
|
+
# Ensure processed_user_ids is always a list
|
|
132
|
+
raw_processed_user_ids = self.processed_user_ids or []
|
|
133
|
+
processed_user_ids = (
|
|
134
|
+
raw_processed_user_ids if isinstance(raw_processed_user_ids, list) else []
|
|
135
|
+
)
|
|
126
136
|
return {
|
|
127
|
-
"processed_user_ids":
|
|
137
|
+
"processed_user_ids": processed_user_ids,
|
|
128
138
|
"execution_state": self.execution_state or {},
|
|
129
139
|
"processed_count": self.processed_recipients or 0,
|
|
130
140
|
"successful_count": self.successful_communications,
|
fides/api/models/event_audit.py
CHANGED
|
@@ -31,6 +31,15 @@ class EventAuditType(str, EnumType):
|
|
|
31
31
|
taxonomy_element_updated = "taxonomy.element.updated"
|
|
32
32
|
taxonomy_element_deleted = "taxonomy.element.deleted"
|
|
33
33
|
|
|
34
|
+
# Connection operations
|
|
35
|
+
connection_created = "connection.created"
|
|
36
|
+
connection_updated = "connection.updated"
|
|
37
|
+
connection_deleted = "connection.deleted"
|
|
38
|
+
|
|
39
|
+
# Connection secrets operations
|
|
40
|
+
connection_secrets_created = "connection.secrets.created"
|
|
41
|
+
connection_secrets_updated = "connection.secrets.updated"
|
|
42
|
+
|
|
34
43
|
# Digest
|
|
35
44
|
digest_execution_started = "digest.execution.started"
|
|
36
45
|
digest_execution_completed = "digest.execution.completed"
|
|
@@ -58,6 +58,13 @@ DEFAULT_MESSAGING_TEMPLATES: Dict[str, Any] = {
|
|
|
58
58
|
"body": "Your erasure request has been completed.",
|
|
59
59
|
},
|
|
60
60
|
},
|
|
61
|
+
MessagingActionType.MANUAL_TASK_DIGEST.value: {
|
|
62
|
+
"label": "Manual task digest",
|
|
63
|
+
"content": {
|
|
64
|
+
"subject": "Weekly DSR Summary from __ORGANIZATION_NAME__",
|
|
65
|
+
"body": "This is your weekly summary of open data subject requests tasks from __ORGANIZATION_NAME__ that require your attention. Please review the tasks in our Privacy Center to ensure timely completion.",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
61
68
|
}
|
|
62
69
|
|
|
63
70
|
|
|
@@ -13,6 +13,7 @@ from fides.api.schemas.connection_configuration import connection_secrets_schema
|
|
|
13
13
|
from fides.api.schemas.policy import ActionType
|
|
14
14
|
from fides.api.schemas.saas.saas_config import SaaSConfigBase
|
|
15
15
|
from fides.api.util.connection_type import get_connection_type_secret_schema
|
|
16
|
+
from fides.api.util.masking_util import mask_sensitive_fields
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class CreateConnectionConfiguration(BaseModel):
|
|
@@ -41,36 +42,6 @@ class CreateConnectionConfigurationWithSecrets(CreateConnectionConfiguration):
|
|
|
41
42
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
def mask_sensitive_fields(
|
|
45
|
-
connection_secrets: Dict[str, Any], secret_schema: Dict[str, Any]
|
|
46
|
-
) -> Dict[str, Any]:
|
|
47
|
-
"""
|
|
48
|
-
Mask sensitive fields in the given secrets based on the provided schema.
|
|
49
|
-
This function traverses the given secrets dictionary and uses the provided schema to
|
|
50
|
-
identify fields that have been marked as sensitive. The function replaces the sensitive
|
|
51
|
-
field values with a mask string ('********').
|
|
52
|
-
Args:
|
|
53
|
-
connection_secrets (Dict[str, Any]): The secrets to be masked.
|
|
54
|
-
secret_schema (Dict[str, Any]): The schema defining which fields are sensitive.
|
|
55
|
-
Returns:
|
|
56
|
-
Dict[str, Any]: The secrets dictionary with sensitive fields masked.
|
|
57
|
-
"""
|
|
58
|
-
if connection_secrets is None:
|
|
59
|
-
return connection_secrets
|
|
60
|
-
|
|
61
|
-
secret_schema_properties = secret_schema["properties"]
|
|
62
|
-
new_connection_secrets = {}
|
|
63
|
-
|
|
64
|
-
for key, value in connection_secrets.items():
|
|
65
|
-
if key in secret_schema_properties:
|
|
66
|
-
if secret_schema_properties.get(key, {}).get("sensitive", False):
|
|
67
|
-
new_connection_secrets[key] = "**********"
|
|
68
|
-
else:
|
|
69
|
-
new_connection_secrets[key] = value
|
|
70
|
-
|
|
71
|
-
return new_connection_secrets
|
|
72
|
-
|
|
73
|
-
|
|
74
45
|
class ConnectionConfigSecretsMixin(BaseModel):
|
|
75
46
|
"""
|
|
76
47
|
A schema mixin to declare a connection config `secrets` attribute
|
|
@@ -89,6 +89,7 @@ class MessagingActionType(str, Enum):
|
|
|
89
89
|
PRIVACY_REQUEST_REVIEW_APPROVE = "privacy_request_review_approve"
|
|
90
90
|
USER_INVITE = "user_invite"
|
|
91
91
|
EXTERNAL_USER_WELCOME = "external_user_welcome"
|
|
92
|
+
MANUAL_TASK_DIGEST = "manual_task_digest"
|
|
92
93
|
TEST_MESSAGE = "test_message"
|
|
93
94
|
|
|
94
95
|
|
|
@@ -101,6 +102,7 @@ CONFIGURABLE_MESSAGING_ACTION_TYPES: Tuple[str, ...] = (
|
|
|
101
102
|
MessagingActionType.PRIVACY_REQUEST_COMPLETE_DELETION.value,
|
|
102
103
|
MessagingActionType.PRIVACY_REQUEST_REVIEW_DENY.value,
|
|
103
104
|
MessagingActionType.PRIVACY_REQUEST_REVIEW_APPROVE.value,
|
|
105
|
+
MessagingActionType.MANUAL_TASK_DIGEST.value,
|
|
104
106
|
)
|
|
105
107
|
|
|
106
108
|
|
|
@@ -219,6 +221,18 @@ class ExternalUserWelcomeBodyParams(BaseModel):
|
|
|
219
221
|
org_name: str
|
|
220
222
|
|
|
221
223
|
|
|
224
|
+
class ManualTaskDigestBodyParams(BaseModel):
|
|
225
|
+
"""Body params required to send manual task digest emails"""
|
|
226
|
+
|
|
227
|
+
vendor_contact_name: str
|
|
228
|
+
organization_name: str
|
|
229
|
+
portal_url: str
|
|
230
|
+
imminent_task_count: int
|
|
231
|
+
upcoming_task_count: int
|
|
232
|
+
total_task_count: int
|
|
233
|
+
company_logo_url: Optional[str] = None
|
|
234
|
+
|
|
235
|
+
|
|
222
236
|
class FidesopsMessage(
|
|
223
237
|
BaseModel,
|
|
224
238
|
):
|
|
@@ -256,6 +270,7 @@ class FidesopsMessage(
|
|
|
256
270
|
MessagingActionType.PRIVACY_REQUEST_ERROR_NOTIFICATION: ErrorNotificationBodyParams,
|
|
257
271
|
MessagingActionType.USER_INVITE: UserInviteBodyParams,
|
|
258
272
|
MessagingActionType.EXTERNAL_USER_WELCOME: ExternalUserWelcomeBodyParams,
|
|
273
|
+
MessagingActionType.MANUAL_TASK_DIGEST: ManualTaskDigestBodyParams,
|
|
259
274
|
}
|
|
260
275
|
|
|
261
276
|
valid_body_params = valid_body_params_for_action_type.get(
|
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
# pylint: disable=protected-access
|
|
2
2
|
import os
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
|
-
from typing import Dict,
|
|
4
|
+
from typing import Dict, List, Optional, Type
|
|
5
5
|
from zipfile import ZipFile
|
|
6
6
|
|
|
7
7
|
from fideslang.models import Dataset
|
|
8
8
|
from loguru import logger
|
|
9
|
-
from packaging.version import Version
|
|
10
9
|
from packaging.version import parse as parse_version
|
|
11
10
|
from sqlalchemy.orm import Session
|
|
12
11
|
|
|
13
12
|
from fides.api.api.deps import get_api_session
|
|
14
13
|
from fides.api.common_exceptions import ValidationError
|
|
15
14
|
from fides.api.cryptography.cryptographic_util import str_to_b64_str
|
|
16
|
-
from fides.api.models.connectionconfig import ConnectionConfig
|
|
17
15
|
from fides.api.models.custom_connector_template import CustomConnectorTemplate
|
|
18
|
-
from fides.api.models.datasetconfig import DatasetConfig
|
|
19
|
-
from fides.api.schemas.connection_configuration.saas_config_template_values import (
|
|
20
|
-
SaasConnectionTemplateValues,
|
|
21
|
-
)
|
|
22
16
|
from fides.api.schemas.saas.connector_template import ConnectorTemplate
|
|
23
17
|
from fides.api.schemas.saas.saas_config import SaaSConfig
|
|
24
18
|
from fides.api.service.authentication.authentication_strategy_oauth2_authorization_code import (
|
|
@@ -31,8 +25,6 @@ from fides.api.util.saas_util import (
|
|
|
31
25
|
load_config_from_string,
|
|
32
26
|
load_dataset_from_string,
|
|
33
27
|
load_yaml_as_string,
|
|
34
|
-
replace_config_placeholders,
|
|
35
|
-
replace_dataset_placeholders,
|
|
36
28
|
replace_version,
|
|
37
29
|
)
|
|
38
30
|
from fides.api.util.unsafe_file_util import verify_svg, verify_zip
|
|
@@ -317,132 +309,3 @@ class ConnectorRegistry:
|
|
|
317
309
|
Returns an object containing the various SaaS connector artifacts
|
|
318
310
|
"""
|
|
319
311
|
return cls._get_combined_templates().get(connector_type)
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
def create_connection_config_from_template_no_save(
|
|
323
|
-
db: Session,
|
|
324
|
-
template: ConnectorTemplate,
|
|
325
|
-
template_values: SaasConnectionTemplateValues,
|
|
326
|
-
system_id: Optional[str] = None,
|
|
327
|
-
) -> ConnectionConfig:
|
|
328
|
-
"""Creates a SaaS connection config from a template without saving it."""
|
|
329
|
-
# Load SaaS config from template and replace every instance of "<instance_fides_key>" with the fides_key
|
|
330
|
-
# the user has chosen
|
|
331
|
-
config_from_template: Dict = replace_config_placeholders(
|
|
332
|
-
template.config, "<instance_fides_key>", template_values.instance_key
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
data = template_values.generate_config_data_from_template(
|
|
336
|
-
config_from_template=config_from_template
|
|
337
|
-
)
|
|
338
|
-
|
|
339
|
-
if system_id:
|
|
340
|
-
data["system_id"] = system_id
|
|
341
|
-
|
|
342
|
-
# Create SaaS ConnectionConfig
|
|
343
|
-
connection_config = ConnectionConfig.create_without_saving(db, data=data)
|
|
344
|
-
|
|
345
|
-
return connection_config
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
def upsert_dataset_config_from_template(
|
|
349
|
-
db: Session,
|
|
350
|
-
connection_config: ConnectionConfig,
|
|
351
|
-
template: ConnectorTemplate,
|
|
352
|
-
template_values: SaasConnectionTemplateValues,
|
|
353
|
-
) -> DatasetConfig:
|
|
354
|
-
"""
|
|
355
|
-
Creates a `DatasetConfig` from a template
|
|
356
|
-
and associates it with a ConnectionConfig.
|
|
357
|
-
If the `DatasetConfig` already exists in the db,
|
|
358
|
-
then the existing record is updated.
|
|
359
|
-
"""
|
|
360
|
-
# Load the dataset config from template and replace every instance of "<instance_fides_key>" with the fides_key
|
|
361
|
-
# the user has chosen
|
|
362
|
-
dataset_from_template: Dict = replace_dataset_placeholders(
|
|
363
|
-
template.dataset, "<instance_fides_key>", template_values.instance_key
|
|
364
|
-
)
|
|
365
|
-
data = {
|
|
366
|
-
"connection_config_id": connection_config.id,
|
|
367
|
-
"fides_key": template_values.instance_key,
|
|
368
|
-
"dataset": dataset_from_template, # Currently used for upserting a CTL Dataset
|
|
369
|
-
}
|
|
370
|
-
dataset_config = DatasetConfig.create_or_update(db, data=data)
|
|
371
|
-
return dataset_config
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
def update_saas_configs(db: Session) -> None:
|
|
375
|
-
"""
|
|
376
|
-
Updates SaaS config instances currently in the DB if to the
|
|
377
|
-
corresponding template in the registry are found.
|
|
378
|
-
|
|
379
|
-
Effectively an "update script" for SaaS config instances,
|
|
380
|
-
to be run on server bootstrap.
|
|
381
|
-
"""
|
|
382
|
-
for connector_type in ConnectorRegistry.connector_types():
|
|
383
|
-
logger.debug(
|
|
384
|
-
"Determining if any updates are needed for connectors of type {} based on templates...",
|
|
385
|
-
connector_type,
|
|
386
|
-
)
|
|
387
|
-
template: ConnectorTemplate = ConnectorRegistry.get_connector_template( # type: ignore
|
|
388
|
-
connector_type
|
|
389
|
-
)
|
|
390
|
-
saas_config = SaaSConfig(**load_config_from_string(template.config))
|
|
391
|
-
template_version: Version = parse_version(saas_config.version)
|
|
392
|
-
|
|
393
|
-
connection_configs: Iterable[ConnectionConfig] = ConnectionConfig.filter(
|
|
394
|
-
db=db,
|
|
395
|
-
conditions=(ConnectionConfig.saas_config["type"].astext == connector_type),
|
|
396
|
-
).all()
|
|
397
|
-
for connection_config in connection_configs:
|
|
398
|
-
saas_config_instance = SaaSConfig.model_validate(
|
|
399
|
-
connection_config.saas_config
|
|
400
|
-
)
|
|
401
|
-
if parse_version(saas_config_instance.version) < template_version:
|
|
402
|
-
logger.info(
|
|
403
|
-
"Updating SaaS config instance '{}' of type '{}' as its version, {}, was found to be lower than the template version {}",
|
|
404
|
-
saas_config_instance.fides_key,
|
|
405
|
-
connector_type,
|
|
406
|
-
saas_config_instance.version,
|
|
407
|
-
template_version,
|
|
408
|
-
)
|
|
409
|
-
try:
|
|
410
|
-
update_saas_instance(
|
|
411
|
-
db,
|
|
412
|
-
connection_config,
|
|
413
|
-
template,
|
|
414
|
-
saas_config_instance,
|
|
415
|
-
)
|
|
416
|
-
except Exception:
|
|
417
|
-
logger.exception(
|
|
418
|
-
"Encountered error attempting to update SaaS config instance {}",
|
|
419
|
-
saas_config_instance.fides_key,
|
|
420
|
-
)
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
def update_saas_instance(
|
|
424
|
-
db: Session,
|
|
425
|
-
connection_config: ConnectionConfig,
|
|
426
|
-
template: ConnectorTemplate,
|
|
427
|
-
saas_config_instance: SaaSConfig,
|
|
428
|
-
) -> None:
|
|
429
|
-
"""
|
|
430
|
-
Replace in the DB the existing SaaS instance configuration data
|
|
431
|
-
(SaaSConfig, DatasetConfig) associated with the given ConnectionConfig
|
|
432
|
-
with new instance configuration data based on the given ConnectorTemplate
|
|
433
|
-
"""
|
|
434
|
-
template_vals = SaasConnectionTemplateValues(
|
|
435
|
-
name=connection_config.name,
|
|
436
|
-
key=connection_config.key,
|
|
437
|
-
description=connection_config.description,
|
|
438
|
-
secrets=connection_config.secrets,
|
|
439
|
-
instance_key=saas_config_instance.fides_key,
|
|
440
|
-
)
|
|
441
|
-
|
|
442
|
-
config_from_template: Dict = replace_config_placeholders(
|
|
443
|
-
template.config, "<instance_fides_key>", template_vals.instance_key
|
|
444
|
-
)
|
|
445
|
-
|
|
446
|
-
connection_config.update_saas_config(db, SaaSConfig(**config_from_template))
|
|
447
|
-
|
|
448
|
-
upsert_dataset_config_from_template(db, connection_config, template, template_vals)
|
fides/api/service/deps.py
CHANGED
|
@@ -6,6 +6,7 @@ from fides.api.api.deps import get_config, get_config_proxy, get_db
|
|
|
6
6
|
from fides.api.db.ctl_session import get_async_db
|
|
7
7
|
from fides.config import FidesConfig
|
|
8
8
|
from fides.config.config_proxy import ConfigProxy
|
|
9
|
+
from fides.service.connection.connection_service import ConnectionService
|
|
9
10
|
from fides.service.dataset.dataset_config_service import DatasetConfigService
|
|
10
11
|
from fides.service.dataset.dataset_service import DatasetService
|
|
11
12
|
from fides.service.event_audit_service import EventAuditService
|
|
@@ -59,5 +60,12 @@ def get_taxonomy_service(
|
|
|
59
60
|
return TaxonomyService(db, event_audit_service)
|
|
60
61
|
|
|
61
62
|
|
|
63
|
+
def get_connection_service(
|
|
64
|
+
db: Session = Depends(get_db),
|
|
65
|
+
event_audit_service: EventAuditService = Depends(get_event_audit_service),
|
|
66
|
+
) -> ConnectionService:
|
|
67
|
+
return ConnectionService(db, event_audit_service)
|
|
68
|
+
|
|
69
|
+
|
|
62
70
|
def get_system_service(db: AsyncSession = Depends(get_async_db)) -> SystemService:
|
|
63
71
|
return SystemService(db)
|