ethyca-fides 2.64.6b1__py2.py3-none-any.whl → 2.65.0rc0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.64.6b1.dist-info → ethyca_fides-2.65.0rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.64.6b1.dist-info → ethyca_fides-2.65.0rc0.dist-info}/RECORD +213 -211
- fides/_version.py +3 -3
- fides/api/email_templates/get_email_template.py +4 -1
- fides/api/email_templates/template_names.py +1 -0
- fides/api/email_templates/templates/external_user_welcome.html +23 -0
- fides/api/models/fides_user_respondent_email_verification.py +3 -3
- fides/api/schemas/messaging/messaging.py +14 -0
- fides/api/schemas/saas/strategy_configuration.py +6 -0
- fides/api/service/connectors/saas_connector.py +35 -1
- fides/api/service/execution_context.py +59 -0
- fides/api/service/messaging/message_dispatch_service.py +33 -1
- fides/api/service/processors/post_processor_strategy/__init__.py +1 -0
- fides/api/service/processors/post_processor_strategy/post_processor_strategy.py +11 -1
- fides/api/service/processors/post_processor_strategy/post_processor_strategy_extract_for_execution_log.py +73 -0
- fides/api/service/processors/post_processor_strategy/post_processor_strategy_factory.py +4 -0
- fides/api/service/processors/post_processor_strategy/post_processor_strategy_filter.py +2 -0
- fides/api/service/processors/post_processor_strategy/post_processor_strategy_unwrap.py +2 -0
- fides/api/task/graph_task.py +38 -18
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/Wj1CQlHGEpFOn5fep_U4z/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1040-d246ed641088a416.js → 1040-63c82622e8aee766.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1169-ae67fde0c6d69abc.js → 1169-60d4b584fde8ce55.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1817-60f08a3619b9139c.js → 1817-d6531612cc594bf1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2921-85515257dd94ef4d.js → 2921-39af9657977fa42c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3450-4e472b9e2754fa47.js → 3450-1088b1f14a3dc618.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3855-2d045674fbf72a3c.js → 3855-abbb601a0115e0e2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3872-056ddf3ed9d10b51.js → 3872-dc8084d7df0f12e5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3923-257df982a95371b5.js → 3923-da789f963d161387.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{401-3f2160e3910d075b.js → 401-54fe500e30c5ea66.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{409-3e2248a63dd60e58.js → 409-7c75e7a5cd4251a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4121-10bfa009892586fa.js → 4121-a3935e484614d586.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4230-38c6e446801a8729.js → 4230-aeff8d542b494207.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{431-13b0ef67d5a3df2f.js → 431-cc1200b1bec1e1ad.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5309-fd8cd5aedd45f7c1.js → 5309-a7b637d2e3830582.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5574-028ef28c3cf16995.js → 5574-1eb6600d144c90d7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6084-fa1c82d03f6c256a.js → 6084-a596a272a2cc1c93.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6662-d8ae12f69d325004.js → 6662-29c0da492e0686a5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6853-2644f28976b46c25.js → 6853-7abe83702dff33b3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6882-ea071425d25dd2b0.js → 6882-306b98265a440778.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6954-bb360fb60aac9440.js → 6954-0294aa483799cd3a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{7476-7073ec015f84a3e0.js → 7476-c3951a31cc8e30f4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{7630-302a13c63f9bfb45.js → 7630-4797e955264ba37b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{787-b393c03ade9d93dc.js → 787-8c3cff5b5504bbfc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{79-b67ba449b0f2cc9c.js → 79-acd3fc646456c35c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{796-b7608f09607288b8.js → 796-231bc790c78485ec.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9046-ece5efe762b810cb.js → 9046-e28291074efc2b9c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9226-c9111590692341b1.js → 9226-e1ab0a8311cfcef5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9392.9a948112de74781b.js → 9392.bb5a989efef5b329.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9676.cc515c853b8cf578.js → 9676.549c72c3eb3df912.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9767-277a0229aae7662a.js → 9767-5700ef84bfa4689a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9826-82c473dcaf892d00.js → 9826-a7302c609a0ae585.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9951-dbd76d7f3a7f1b9a.js → 9951-81e6a96c892bce10.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-ef01376efb8427e1.js → 404-136cdc66cc546bf9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-7430e1499432b029.js → _app-3c2c13846cf0246c.js} +54 -54
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-4057c399f58d331e.js → manual-ec060a0c3e154265.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-2726ca51f0327347.js → multiple-1115a66a27198dd2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-a2457d5da25aa854.js → add-systems-e857d1d6fa43adb9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-9fe46ed10a7e7a1a.js → add-vendors-01a209a73ca6db10.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-095828301f22cdaa.js → configure-0bafadd4832888a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-de60a5b74f6b20ff.js → [id]-419ce6a7f72b10b1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-1ee05fd0bc012ec6.js → privacy-experience-2733b87269ad53d6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-5a2e61c7d88bdda1.js → [id]-caa7ecb68d6b5c77.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-1bc69669215fa55c.js → new-767c51405b61ad4e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-fa8394d2e1072aba.js → privacy-notices-61625c45fdcf931f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-213c5405e9e4219c.js → properties-ae989bd5c2b202f9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-44aa77149d71a6fe.js → reporting-60272475cb0770fc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-23ab7bd613a0ad53.js → consent-4d2df7770ab3c3c8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-dae11464a091537f.js → [projectUrn]-0b3847fe39d90f6d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-7442023478422295.js → projects-12f7220f0ef3a50c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-5597d2e691313bb0.js → data-catalog-de21ee9984a0e989.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-da06d05d255d0cd0.js → [systemId]-4b1956ba13d00d12.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-895591fe32af0f4c.js → [monitorId]-0d09001cbefac14b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-a932a39e29ac3489.js → action-center-743321764a03e68d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-2cfdf4d55a7594ba.js → activity-741553e7f5e5dad3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-07881d1a5fc03d41.js → datamap-286a2f95a62eaa92.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-57be9d40c67b0acb.js → [...subfieldNames]-1574f9f99f3fbd4d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-bd78d6c6264e2467.js → [collectionName]-7137e44d09c4e66f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-3c9103487b55e76f.js → [datasetId]-4523752f57210b05.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-e30a546a8cfb6658.js → new-5b58be23debaaecc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-500610c0b60f9e7e.js → dataset-d1191d3fbb953e64.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-34958fe8183d9479.js → [id]-8adf2e814c3b9e0d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-761294dbaf59bbe1.js → new-e648583cdd77269f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-59abd36059863e05.js → datastore-connection-b15447b9e74cd9ca.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-ae100a873eb66d59.js → index-215da7ae60a37272.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-c7355ec8b1375390.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-2f51dd2ebc800c0d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-2aada2c7b9156053.js → [id]-4b9ab7dc0267f8a8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-fbb7b0c43dedf072.js → add-template-80b95a87ca4a9a0e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-7230d7ee21368cef.js → messaging-40fa5eff36a01f41.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-7c234412502f8102.js → ant-components-6e551f937e1b70f3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-72791aab60f3a4bf.js → AntForm-49eb4b84e5f07ead.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-da7d11d6146fa746.js → FormikAntFormItem-0c523d8323b900a8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-3045d24344e99017.js → FormikControlled-3bf5a95f470f351b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-5b5b165d3f41a1de.js → FormikField-2056140039ebb8dd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-3afd8b6ba6234366.js → forms-641937410482819f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-52d50286216bcb8c.js → table-migration-00d2be9ac59028cf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-2f2410cdb2f2a918.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-535b6e5003d892eb.js → messaging-d31a1d8f3c573023.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-7ded688a1e832c63.js → storage-f3ec1a691bb7a6b6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-08e0863d432b3348.js → configure-623420abd445b87d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-d731dd036a0eb44d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-b8dcb1f5213521ef.js → [id]-202ba739110fbcc5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-7d8418bb7cb9e1fd.js → add-property-51fc662b550db919.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-537003822f360ae7.js → properties-95f73dad295c22c9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-ac25749935da453b.js → datamap-d9b31c6172f67b4c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-647d59bb0aa060bf.js → alpha-1d96cc94c9f9d57a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-73adc03fe0182e3f.js → about-0102ed2e53aac3f8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-ffa9e9e79ad75828.js → [purpose_id]-492682d276a487c3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-4fb6c8c4bd9cdb3f.js → consent-dbef1e775cae0b4b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-94c1b7bfc6cec4d2.js → custom-fields-1a7786045d55904c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-e9838b8e49e64e57.js → domain-records-c62f0e6538a0f14f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-0de16778ad2f8865.js → domains-f3ccf59e0cef58c6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-aac71677024210ad.js → email-templates-efdf18eadaf4e6df.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-f43e238571b21643.js → locations-c5fdc67504da5d52.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-f5e0a34f6ae473ad.js → organization-d57f3e3a1926ec3c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-05d3c86ca3ca4d5d.js → regulations-a92d6a45948774a4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-31fcf7b52d8028b0.js → test-datasets-f2749e3deaf2de1b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-6db01a1afe2f82d5.js → [id]-5750b7b195f4e050.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-8ec7472a7032301f.js → systems-f23101c2c99a9abf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-84caae0fc02f8ae1.js → taxonomy-40bdf2e4c0a6a6d5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-e452541827698b1f.js → [id]-c9ea4777da2b9148.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-530be849391d2425.js → user-management-542d299555665262.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{webpack-e25ccaae1ef867a2.js → webpack-933716e3b2904850.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/5f8af79f94072e0f.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].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- fides/ui-build/static/admin/lib/fides.js +3 -3
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-8eee4d0314c83e50.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-bf3b87b0dd702551.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-00fb442c4adb7371.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c8b02ae92dd7e45b.js +0 -1
- fides/ui-build/static/admin/_next/static/css/23391a3311f80cfe.css +0 -1
- fides/ui-build/static/admin/_next/static/z7GzAZhoGiO521zm7WPYX/_buildManifest.js +0 -1
- {ethyca_fides-2.64.6b1.dist-info → ethyca_fides-2.65.0rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.64.6b1.dist-info → ethyca_fides-2.65.0rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.64.6b1.dist-info → ethyca_fides-2.65.0rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.64.6b1.dist-info → ethyca_fides-2.65.0rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{z7GzAZhoGiO521zm7WPYX → Wj1CQlHGEpFOn5fep_U4z}/_ssgManifest.js +0 -0
fides/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-07-
|
|
11
|
+
"date": "2025-07-02T16:48:58-0700",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "5d9522adf8b7c04bcf6cf1fcf664289b2e2d0498",
|
|
15
|
+
"version": "2.65.0rc0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -8,6 +8,7 @@ from fides.api.email_templates.template_names import (
|
|
|
8
8
|
CONSENT_REQUEST_EMAIL_FULFILLMENT,
|
|
9
9
|
CONSENT_REQUEST_VERIFICATION_TEMPLATE,
|
|
10
10
|
EMAIL_ERASURE_REQUEST_FULFILLMENT,
|
|
11
|
+
EXTERNAL_USER_WELCOME,
|
|
11
12
|
PRIVACY_REQUEST_COMPLETE_ACCESS_TEMPLATE,
|
|
12
13
|
PRIVACY_REQUEST_COMPLETE_DELETION_TEMPLATE,
|
|
13
14
|
PRIVACY_REQUEST_ERROR_NOTIFICATION_TEMPLATE,
|
|
@@ -29,7 +30,7 @@ template_env = Environment(
|
|
|
29
30
|
)
|
|
30
31
|
|
|
31
32
|
|
|
32
|
-
def get_email_template( # pylint: disable=too-many-return-statements
|
|
33
|
+
def get_email_template( # pylint: disable=too-many-return-statements, too-many-branches
|
|
33
34
|
action_type: MessagingActionType,
|
|
34
35
|
) -> Template:
|
|
35
36
|
if action_type == MessagingActionType.CONSENT_REQUEST:
|
|
@@ -56,6 +57,8 @@ def get_email_template( # pylint: disable=too-many-return-statements
|
|
|
56
57
|
return template_env.get_template(TEST_MESSAGE_TEMPLATE)
|
|
57
58
|
if action_type == MessagingActionType.USER_INVITE:
|
|
58
59
|
return template_env.get_template(USER_INVITE)
|
|
60
|
+
if action_type == MessagingActionType.EXTERNAL_USER_WELCOME:
|
|
61
|
+
return template_env.get_template(EXTERNAL_USER_WELCOME)
|
|
59
62
|
|
|
60
63
|
logger.error("No corresponding template linked to the {}", action_type)
|
|
61
64
|
raise EmailTemplateUnhandledActionType(
|
|
@@ -10,3 +10,4 @@ PRIVACY_REQUEST_REVIEW_DENY_TEMPLATE = "privacy_request_review_deny.html"
|
|
|
10
10
|
PRIVACY_REQUEST_REVIEW_APPROVE_TEMPLATE = "privacy_request_review_approve.html"
|
|
11
11
|
TEST_MESSAGE_TEMPLATE = "test_message.html"
|
|
12
12
|
USER_INVITE = "user_invite.html"
|
|
13
|
+
EXTERNAL_USER_WELCOME = "external_user_welcome.html"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Welcome to Privacy Center</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<main>
|
|
9
|
+
<p>Hello {{ display_name }},</p>
|
|
10
|
+
|
|
11
|
+
<p>An account has been created for you by the privacy team at {{ org_name }} so that you can assist them in responding to data subject requests, as required by the GDPR and many US state laws, for users that have data in your systems.</p>
|
|
12
|
+
|
|
13
|
+
<p>A portal is available to view and take action on these requests at: <a href="{{ portal_link }}">{{ portal_link }}</a>. Through this portal you can upload or provide user data for users who have requested a copy of their information and attest that users have been removed from your system in the case of an erasure request.</p>
|
|
14
|
+
|
|
15
|
+
<p>The provided link is valid for 30 days and you will be asked to verify your email address each time you access the portal.</p>
|
|
16
|
+
|
|
17
|
+
<p>If you have any questions, please reach out first to your contacts at: {{ org_name }}</p>
|
|
18
|
+
|
|
19
|
+
<p>Regards,<br/>
|
|
20
|
+
{{ org_name }} Privacy Team</p>
|
|
21
|
+
</main>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
|
@@ -19,16 +19,16 @@ CONFIG = get_config()
|
|
|
19
19
|
if TYPE_CHECKING:
|
|
20
20
|
from fides.api.models.fides_user import FidesUser
|
|
21
21
|
|
|
22
|
-
# Access links stay active for
|
|
22
|
+
# Access links stay active for 30 days for external login functionality. A new link is generated for each email.
|
|
23
23
|
# The emails are created for new DSRs which are assigned to the respondent.
|
|
24
|
-
ACCESS_LINK_TTL_DAYS =
|
|
24
|
+
ACCESS_LINK_TTL_DAYS = 30
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
|
|
28
28
|
"""Model for handling email verification for external respondents.
|
|
29
29
|
|
|
30
30
|
This handles two types of verification:
|
|
31
|
-
1. Access links - long-lived (
|
|
31
|
+
1. Access links - long-lived (30 days) for initial access
|
|
32
32
|
2. Verification codes - short-lived (1 hour) for actual verification
|
|
33
33
|
|
|
34
34
|
When an email is sent to an external respondent, a new verification is created with a new access token is created.
|
|
@@ -69,6 +69,7 @@ class MessagingActionType(str, Enum):
|
|
|
69
69
|
PRIVACY_REQUEST_REVIEW_DENY = "privacy_request_review_deny"
|
|
70
70
|
PRIVACY_REQUEST_REVIEW_APPROVE = "privacy_request_review_approve"
|
|
71
71
|
USER_INVITE = "user_invite"
|
|
72
|
+
EXTERNAL_USER_WELCOME = "external_user_welcome"
|
|
72
73
|
TEST_MESSAGE = "test_message"
|
|
73
74
|
|
|
74
75
|
|
|
@@ -182,6 +183,17 @@ class UserInviteBodyParams(BaseModel):
|
|
|
182
183
|
invite_code: str
|
|
183
184
|
|
|
184
185
|
|
|
186
|
+
class ExternalUserWelcomeBodyParams(BaseModel):
|
|
187
|
+
"""Body params required to send a welcome email to external users"""
|
|
188
|
+
|
|
189
|
+
username: str
|
|
190
|
+
first_name: Optional[str] = None
|
|
191
|
+
last_name: Optional[str] = None
|
|
192
|
+
privacy_center_url: str
|
|
193
|
+
access_token: str
|
|
194
|
+
org_name: str
|
|
195
|
+
|
|
196
|
+
|
|
185
197
|
class FidesopsMessage(
|
|
186
198
|
BaseModel,
|
|
187
199
|
):
|
|
@@ -198,6 +210,7 @@ class FidesopsMessage(
|
|
|
198
210
|
ErasureRequestBodyParams,
|
|
199
211
|
ErrorNotificationBodyParams,
|
|
200
212
|
UserInviteBodyParams,
|
|
213
|
+
ExternalUserWelcomeBodyParams,
|
|
201
214
|
]
|
|
202
215
|
] = None
|
|
203
216
|
|
|
@@ -217,6 +230,7 @@ class FidesopsMessage(
|
|
|
217
230
|
MessagingActionType.MESSAGE_ERASURE_REQUEST_FULFILLMENT: ErasureRequestBodyParams,
|
|
218
231
|
MessagingActionType.PRIVACY_REQUEST_ERROR_NOTIFICATION: ErrorNotificationBodyParams,
|
|
219
232
|
MessagingActionType.USER_INVITE: UserInviteBodyParams,
|
|
233
|
+
MessagingActionType.EXTERNAL_USER_WELCOME: ExternalUserWelcomeBodyParams,
|
|
220
234
|
}
|
|
221
235
|
|
|
222
236
|
valid_body_params = valid_body_params_for_action_type.get(
|
|
@@ -30,6 +30,12 @@ class FilterPostProcessorConfiguration(StrategyConfiguration):
|
|
|
30
30
|
case_sensitive: bool = True
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
class ExtractForExecutionLogPostProcessorConfiguration(StrategyConfiguration):
|
|
34
|
+
"""Configuration for extracting data from response body and adding to execution log messages"""
|
|
35
|
+
|
|
36
|
+
path: Optional[str] = None
|
|
37
|
+
|
|
38
|
+
|
|
33
39
|
class OffsetPaginationConfiguration(StrategyConfiguration):
|
|
34
40
|
"""
|
|
35
41
|
Increases the value of the query param `incremental_param` by the `increment_by` until the `limit` is hit
|
|
@@ -423,6 +423,7 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
|
|
|
423
423
|
response_data,
|
|
424
424
|
identity_data,
|
|
425
425
|
cast(Optional[List[PostProcessorStrategy]], saas_request.postprocessors),
|
|
426
|
+
response,
|
|
426
427
|
)
|
|
427
428
|
|
|
428
429
|
logger.info(
|
|
@@ -456,6 +457,7 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
|
|
|
456
457
|
response_data: Union[List[Dict[str, Any]], Dict[str, Any]],
|
|
457
458
|
identity_data: Dict[str, Any],
|
|
458
459
|
postprocessors: Optional[List[PostProcessorStrategy]],
|
|
460
|
+
response: Optional[Response] = None,
|
|
459
461
|
) -> List[Row]:
|
|
460
462
|
"""
|
|
461
463
|
Runs the raw response through all available postprocessors for the request,
|
|
@@ -481,7 +483,9 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
|
|
|
481
483
|
processed_data,
|
|
482
484
|
identity_data,
|
|
483
485
|
privacy_request,
|
|
486
|
+
response,
|
|
484
487
|
)
|
|
488
|
+
|
|
485
489
|
except Exception as exc:
|
|
486
490
|
raise PostProcessingException(
|
|
487
491
|
f"Exception occurred during the '{postprocessor.strategy}' postprocessor " # type: ignore
|
|
@@ -567,6 +571,7 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
|
|
|
567
571
|
rows,
|
|
568
572
|
privacy_request.get_cached_identity_data(),
|
|
569
573
|
cast(Optional[List[PostProcessorStrategy]], masking_request.postprocessors),
|
|
574
|
+
None,
|
|
570
575
|
)
|
|
571
576
|
|
|
572
577
|
client = self.create_client()
|
|
@@ -584,9 +589,38 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
|
|
|
584
589
|
)
|
|
585
590
|
continue
|
|
586
591
|
raise exc
|
|
587
|
-
client.send(prepared_request, masking_request.ignore_errors)
|
|
592
|
+
response = client.send(prepared_request, masking_request.ignore_errors)
|
|
588
593
|
rows_updated += 1
|
|
589
594
|
|
|
595
|
+
# Run post-processors against the response from the masking request so that
|
|
596
|
+
# processors such as `extract_for_execution_log` can inspect the API
|
|
597
|
+
# response body (e.g. confirmation, ticket IDs, etc.). We ignore the
|
|
598
|
+
# returned rows because masking responses are not used downstream.
|
|
599
|
+
try:
|
|
600
|
+
handled_response = self._handle_errored_response(
|
|
601
|
+
masking_request, response
|
|
602
|
+
)
|
|
603
|
+
response_data = self._unwrap_response_data(
|
|
604
|
+
masking_request, handled_response
|
|
605
|
+
)
|
|
606
|
+
|
|
607
|
+
self.process_response_data(
|
|
608
|
+
response_data,
|
|
609
|
+
privacy_request.get_cached_identity_data(),
|
|
610
|
+
cast(
|
|
611
|
+
Optional[List[PostProcessorStrategy]],
|
|
612
|
+
masking_request.postprocessors,
|
|
613
|
+
),
|
|
614
|
+
handled_response,
|
|
615
|
+
)
|
|
616
|
+
except Exception as exc: # pylint: disable=broad-except
|
|
617
|
+
# We do not want a post-processing failure to prevent the masking
|
|
618
|
+
# operation itself from succeeding.
|
|
619
|
+
logger.warning(
|
|
620
|
+
"Post-processing of masking request response failed: {}",
|
|
621
|
+
exc,
|
|
622
|
+
)
|
|
623
|
+
|
|
590
624
|
self.unset_connector_state()
|
|
591
625
|
|
|
592
626
|
awaiting_async_callback: bool = bool(
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Execution context for collecting log messages during privacy request processing.
|
|
3
|
+
|
|
4
|
+
Uses Python's contextvars for thread-safe, execution-scoped message collection.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import contextvars
|
|
8
|
+
from contextlib import contextmanager
|
|
9
|
+
from typing import Generator, List, Optional
|
|
10
|
+
|
|
11
|
+
from loguru import logger
|
|
12
|
+
|
|
13
|
+
# Context variable for current execution messages
|
|
14
|
+
_execution_messages: contextvars.ContextVar[Optional[List[str]]] = (
|
|
15
|
+
contextvars.ContextVar("execution_messages")
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@contextmanager
|
|
20
|
+
def collect_execution_log_messages() -> Generator[List[str], None, None]:
|
|
21
|
+
"""
|
|
22
|
+
Context manager for collecting execution log messages.
|
|
23
|
+
|
|
24
|
+
Usage:
|
|
25
|
+
with collect_execution_log_messages() as messages:
|
|
26
|
+
# ... do work that calls add_execution_log_message()
|
|
27
|
+
pass
|
|
28
|
+
# messages now contains all collected messages
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
List[str]: Messages collected during execution
|
|
32
|
+
"""
|
|
33
|
+
messages: List[str] = []
|
|
34
|
+
token = _execution_messages.set(messages)
|
|
35
|
+
try:
|
|
36
|
+
yield messages
|
|
37
|
+
finally:
|
|
38
|
+
_execution_messages.reset(token)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def add_execution_log_message(message: str) -> None:
|
|
42
|
+
"""Add a message to the current execution context"""
|
|
43
|
+
try:
|
|
44
|
+
messages = _execution_messages.get()
|
|
45
|
+
if messages is not None and message.strip():
|
|
46
|
+
messages.append(message.strip())
|
|
47
|
+
except LookupError:
|
|
48
|
+
logger.error(
|
|
49
|
+
f"Attempted to call add_execution_log_message outside of execution context, unable to add message: {message}"
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_execution_log_messages() -> List[str]:
|
|
54
|
+
"""Get messages from current execution context (for testing/debugging)"""
|
|
55
|
+
try:
|
|
56
|
+
messages = _execution_messages.get()
|
|
57
|
+
return messages.copy() if messages is not None else []
|
|
58
|
+
except LookupError:
|
|
59
|
+
return []
|
|
@@ -26,6 +26,7 @@ from fides.api.schemas.messaging.messaging import (
|
|
|
26
26
|
EmailForActionType,
|
|
27
27
|
ErasureRequestBodyParams,
|
|
28
28
|
ErrorNotificationBodyParams,
|
|
29
|
+
ExternalUserWelcomeBodyParams,
|
|
29
30
|
FidesopsMessage,
|
|
30
31
|
MessagingActionType,
|
|
31
32
|
MessagingMethod,
|
|
@@ -176,6 +177,7 @@ def dispatch_message(
|
|
|
176
177
|
ErasureRequestBodyParams,
|
|
177
178
|
UserInviteBodyParams,
|
|
178
179
|
ErrorNotificationBodyParams,
|
|
180
|
+
ExternalUserWelcomeBodyParams,
|
|
179
181
|
]
|
|
180
182
|
] = None,
|
|
181
183
|
subject_override: Optional[str] = None,
|
|
@@ -351,7 +353,7 @@ def _render(template_str: str, variables: Optional[Dict] = None) -> str:
|
|
|
351
353
|
return template_str
|
|
352
354
|
|
|
353
355
|
|
|
354
|
-
def _build_email( # pylint: disable=too-many-return-statements
|
|
356
|
+
def _build_email( # pylint: disable=too-many-return-statements, too-many-branches
|
|
355
357
|
config_proxy: ConfigProxy,
|
|
356
358
|
action_type: MessagingActionType,
|
|
357
359
|
body_params: Any,
|
|
@@ -463,6 +465,36 @@ def _build_email( # pylint: disable=too-many-return-statements
|
|
|
463
465
|
}
|
|
464
466
|
),
|
|
465
467
|
)
|
|
468
|
+
if action_type == MessagingActionType.EXTERNAL_USER_WELCOME:
|
|
469
|
+
base_template = get_email_template(action_type)
|
|
470
|
+
# Generate display name for personalization
|
|
471
|
+
display_name = body_params.username
|
|
472
|
+
if body_params.first_name:
|
|
473
|
+
display_name = body_params.first_name
|
|
474
|
+
if body_params.last_name:
|
|
475
|
+
display_name = f"{body_params.first_name} {body_params.last_name}"
|
|
476
|
+
|
|
477
|
+
portal_link = (
|
|
478
|
+
f"{body_params.privacy_center_url}?access_token={body_params.access_token}"
|
|
479
|
+
)
|
|
480
|
+
|
|
481
|
+
variables = {
|
|
482
|
+
"username": body_params.username,
|
|
483
|
+
"display_name": display_name,
|
|
484
|
+
"first_name": body_params.first_name,
|
|
485
|
+
"last_name": body_params.last_name,
|
|
486
|
+
"org_name": body_params.org_name,
|
|
487
|
+
"portal_link": portal_link,
|
|
488
|
+
"privacy_center_url": body_params.privacy_center_url,
|
|
489
|
+
"access_token": body_params.access_token,
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
return EmailForActionType(
|
|
493
|
+
subject="Welcome to our Privacy Center",
|
|
494
|
+
body=base_template.render(variables),
|
|
495
|
+
template_variables=variables,
|
|
496
|
+
)
|
|
497
|
+
|
|
466
498
|
logger.error("Message action type {} is not implemented", action_type)
|
|
467
499
|
raise MessageDispatchException(
|
|
468
500
|
f"Message action type {action_type} is not implemented"
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
2
|
from typing import Any, Dict, List, Optional, Union
|
|
3
3
|
|
|
4
|
+
from requests import Response
|
|
5
|
+
|
|
4
6
|
from fides.api.models.privacy_request import PrivacyRequest
|
|
5
7
|
from fides.api.service.strategy import Strategy
|
|
6
8
|
|
|
@@ -14,5 +16,13 @@ class PostProcessorStrategy(Strategy):
|
|
|
14
16
|
data: Any,
|
|
15
17
|
identity_data: Optional[Dict[str, Any]] = None,
|
|
16
18
|
privacy_request: Optional[PrivacyRequest] = None,
|
|
19
|
+
response: Optional[Response] = None,
|
|
17
20
|
) -> Union[List[Dict[str, Any]], Dict[str, Any]]:
|
|
18
|
-
"""Process data from SaaS connector
|
|
21
|
+
"""Process data from SaaS connector
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
data: The response data (potentially unwrapped/processed)
|
|
25
|
+
identity_data: Cached identity data for the request
|
|
26
|
+
privacy_request: The privacy request object
|
|
27
|
+
response: The raw HTTP response object (includes headers, status, etc.)
|
|
28
|
+
"""
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Optional, Union
|
|
2
|
+
|
|
3
|
+
import pydash
|
|
4
|
+
from loguru import logger
|
|
5
|
+
from requests import Response
|
|
6
|
+
|
|
7
|
+
from fides.api.models.privacy_request import PrivacyRequest
|
|
8
|
+
from fides.api.schemas.saas.strategy_configuration import (
|
|
9
|
+
ExtractForExecutionLogPostProcessorConfiguration,
|
|
10
|
+
)
|
|
11
|
+
from fides.api.service.execution_context import add_execution_log_message
|
|
12
|
+
from fides.api.service.processors.post_processor_strategy.post_processor_strategy import (
|
|
13
|
+
PostProcessorStrategy,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ExtractForExecutionLogPostProcessorStrategy(PostProcessorStrategy):
|
|
18
|
+
"""Postprocessor that extracts data from API response contents and adds it to execution log messages"""
|
|
19
|
+
|
|
20
|
+
name = "extract_for_execution_log"
|
|
21
|
+
configuration_model = ExtractForExecutionLogPostProcessorConfiguration
|
|
22
|
+
|
|
23
|
+
def __init__(self, configuration: ExtractForExecutionLogPostProcessorConfiguration):
|
|
24
|
+
self.configuration = configuration
|
|
25
|
+
|
|
26
|
+
def process(
|
|
27
|
+
self,
|
|
28
|
+
data: Union[List[Dict[str, Any]], Dict[str, Any]],
|
|
29
|
+
identity_data: Optional[Dict[str, Any]] = None,
|
|
30
|
+
privacy_request: Optional[PrivacyRequest] = None,
|
|
31
|
+
response: Optional[Response] = None,
|
|
32
|
+
) -> Union[List[Dict[str, Any]], Dict[str, Any]]:
|
|
33
|
+
"""
|
|
34
|
+
Extract data from response contents and add to execution log messages.
|
|
35
|
+
Data is passed through unchanged (non-destructive postprocessor).
|
|
36
|
+
"""
|
|
37
|
+
config = self.configuration
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
# Only process if response.contents is available
|
|
41
|
+
if response is None or not response.content:
|
|
42
|
+
return data
|
|
43
|
+
|
|
44
|
+
if config.path is None:
|
|
45
|
+
# No path specified - use entire response contents as string
|
|
46
|
+
message = str(response.content)
|
|
47
|
+
else:
|
|
48
|
+
# Attempt to parse the response content as JSON before extracting
|
|
49
|
+
try:
|
|
50
|
+
json_data: Any = response.json()
|
|
51
|
+
except ValueError:
|
|
52
|
+
logger.debug(
|
|
53
|
+
"Unable to parse response content as JSON for path extraction"
|
|
54
|
+
)
|
|
55
|
+
return data
|
|
56
|
+
|
|
57
|
+
extracted_value = pydash.get(json_data, config.path)
|
|
58
|
+
if extracted_value is None:
|
|
59
|
+
logger.debug(f"No data found at path '{config.path}'")
|
|
60
|
+
return data
|
|
61
|
+
|
|
62
|
+
message = str(extracted_value)
|
|
63
|
+
|
|
64
|
+
# Add message to execution context
|
|
65
|
+
add_execution_log_message(message)
|
|
66
|
+
logger.info(message)
|
|
67
|
+
|
|
68
|
+
except Exception as e:
|
|
69
|
+
error_msg = f"Error in extract_for_execution_log postprocessor: {e}"
|
|
70
|
+
logger.error(error_msg)
|
|
71
|
+
add_execution_log_message(error_msg)
|
|
72
|
+
|
|
73
|
+
return data
|
|
@@ -9,6 +9,9 @@ from fides.api.schemas.saas.strategy_configuration import StrategyConfiguration
|
|
|
9
9
|
from fides.api.service.processors.post_processor_strategy.post_processor_strategy import (
|
|
10
10
|
PostProcessorStrategy,
|
|
11
11
|
)
|
|
12
|
+
from fides.api.service.processors.post_processor_strategy.post_processor_strategy_extract_for_execution_log import (
|
|
13
|
+
ExtractForExecutionLogPostProcessorStrategy,
|
|
14
|
+
)
|
|
12
15
|
from fides.api.service.processors.post_processor_strategy.post_processor_strategy_filter import (
|
|
13
16
|
FilterPostProcessorStrategy,
|
|
14
17
|
)
|
|
@@ -24,6 +27,7 @@ class SupportedPostProcessorStrategies(Enum):
|
|
|
24
27
|
|
|
25
28
|
unwrap = UnwrapPostProcessorStrategy
|
|
26
29
|
filter = FilterPostProcessorStrategy
|
|
30
|
+
extract_for_execution_log = ExtractForExecutionLogPostProcessorStrategy
|
|
27
31
|
|
|
28
32
|
@classmethod
|
|
29
33
|
def __contains__(cls, item: str) -> bool:
|
|
@@ -2,6 +2,7 @@ from typing import Any, Dict, List, Optional, Union
|
|
|
2
2
|
|
|
3
3
|
import pydash
|
|
4
4
|
from loguru import logger
|
|
5
|
+
from requests import Response
|
|
5
6
|
|
|
6
7
|
from fides.api.common_exceptions import FidesopsException
|
|
7
8
|
from fides.api.models.privacy_request import PrivacyRequest
|
|
@@ -54,6 +55,7 @@ class FilterPostProcessorStrategy(PostProcessorStrategy):
|
|
|
54
55
|
data: Union[List[Dict[str, Any]], Dict[str, Any]],
|
|
55
56
|
identity_data: Optional[Dict[str, Any]] = None,
|
|
56
57
|
privacy_request: Optional[PrivacyRequest] = None,
|
|
58
|
+
response: Optional[Response] = None,
|
|
57
59
|
) -> Union[List[Dict[str, Any]], Dict[str, Any]]:
|
|
58
60
|
"""
|
|
59
61
|
- data: A list or a dict
|
|
@@ -2,6 +2,7 @@ from typing import Any, Dict, List, Optional, Union
|
|
|
2
2
|
|
|
3
3
|
import pydash
|
|
4
4
|
from loguru import logger
|
|
5
|
+
from requests import Response
|
|
5
6
|
|
|
6
7
|
from fides.api.models.privacy_request import PrivacyRequest
|
|
7
8
|
from fides.api.schemas.saas.strategy_configuration import (
|
|
@@ -44,6 +45,7 @@ class UnwrapPostProcessorStrategy(PostProcessorStrategy):
|
|
|
44
45
|
data: Union[List[Dict[str, Any]], Dict[str, Any]],
|
|
45
46
|
identity_data: Optional[Dict[str, Any]] = None,
|
|
46
47
|
privacy_request: Optional[PrivacyRequest] = None,
|
|
48
|
+
response: Optional[Response] = None,
|
|
47
49
|
) -> Union[List[Dict[str, Any]], Dict[str, Any]]:
|
|
48
50
|
"""
|
|
49
51
|
:param data: A list or dict
|
fides/api/task/graph_task.py
CHANGED
|
@@ -42,6 +42,7 @@ from fides.api.models.privacy_request import ExecutionLog, PrivacyRequest, Reque
|
|
|
42
42
|
from fides.api.models.worker_task import ExecutionLogStatus
|
|
43
43
|
from fides.api.schemas.policy import ActionType, CurrentStep
|
|
44
44
|
from fides.api.service.connectors.base_connector import BaseConnector
|
|
45
|
+
from fides.api.service.execution_context import collect_execution_log_messages
|
|
45
46
|
from fides.api.task.consolidate_query_matches import consolidate_query_matches
|
|
46
47
|
from fides.api.task.filter_element_match import filter_element_match
|
|
47
48
|
from fides.api.task.refine_target_path import FieldPathNodeInput
|
|
@@ -419,7 +420,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
419
420
|
self,
|
|
420
421
|
action_type: ActionType,
|
|
421
422
|
ex: Optional[BaseException] = None,
|
|
422
|
-
success_override_msg: Optional[
|
|
423
|
+
success_override_msg: Optional[str] = None,
|
|
423
424
|
) -> None:
|
|
424
425
|
"""On completion activities"""
|
|
425
426
|
if ex:
|
|
@@ -615,19 +616,29 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
615
616
|
formatted_input_data: NodeInput = self.pre_process_input_data(
|
|
616
617
|
*inputs, group_dependent_fields=True
|
|
617
618
|
)
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
self.
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
619
|
+
|
|
620
|
+
# Use execution context to capture postprocessor messages
|
|
621
|
+
with collect_execution_log_messages() as messages:
|
|
622
|
+
output: List[Row] = self.connector.retrieve_data(
|
|
623
|
+
self.execution_node,
|
|
624
|
+
self.resources.policy,
|
|
625
|
+
self.resources.request,
|
|
626
|
+
self.resources.privacy_request_task,
|
|
627
|
+
formatted_input_data,
|
|
628
|
+
)
|
|
629
|
+
|
|
625
630
|
filtered_output: List[Row] = self.access_results_post_processing(
|
|
626
631
|
self.pre_process_input_data(*inputs, group_dependent_fields=False),
|
|
627
632
|
output,
|
|
628
633
|
)
|
|
629
|
-
|
|
630
|
-
|
|
634
|
+
|
|
635
|
+
# Include postprocessor messages in success message if available
|
|
636
|
+
success_message = None
|
|
637
|
+
if messages:
|
|
638
|
+
success_message = "\n".join(messages)
|
|
639
|
+
|
|
640
|
+
self.log_end(ActionType.access, success_override_msg=success_message)
|
|
641
|
+
return filtered_output
|
|
631
642
|
|
|
632
643
|
@retry(action_type=ActionType.erasure, default_return=0)
|
|
633
644
|
def erasure_request(
|
|
@@ -683,13 +694,16 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
683
694
|
)
|
|
684
695
|
return 0
|
|
685
696
|
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
self.
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
697
|
+
# Use execution context to capture postprocessor messages
|
|
698
|
+
with collect_execution_log_messages() as messages:
|
|
699
|
+
output = self.connector.mask_data(
|
|
700
|
+
self.execution_node,
|
|
701
|
+
self.resources.policy,
|
|
702
|
+
self.resources.request,
|
|
703
|
+
self.resources.privacy_request_task,
|
|
704
|
+
retrieved_data,
|
|
705
|
+
)
|
|
706
|
+
|
|
693
707
|
if self.request_task.id:
|
|
694
708
|
# For DSR 3.0, largely for testing. DSR 3.0 uses Request Task status
|
|
695
709
|
# instead of presence of cached erasure data to know if we should rerun a node
|
|
@@ -700,7 +714,13 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
700
714
|
self.resources.cache_erasure(
|
|
701
715
|
self.key.value, output
|
|
702
716
|
) # Cache that the erasure was performed in case we need to restart
|
|
703
|
-
|
|
717
|
+
|
|
718
|
+
# Include postprocessor messages in success message if available
|
|
719
|
+
success_message = None
|
|
720
|
+
if messages:
|
|
721
|
+
success_message = "\n".join(messages)
|
|
722
|
+
|
|
723
|
+
self.log_end(ActionType.erasure, success_override_msg=success_message)
|
|
704
724
|
return output
|
|
705
725
|
|
|
706
726
|
@retry(action_type=ActionType.consent, default_return=False)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/5f8af79f94072e0f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/5f8af79f94072e0f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-933716e3b2904850.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3c2c13846cf0246c.js" defer=""></script><script src="/_next/static/chunks/pages/404-136cdc66cc546bf9.js" defer=""></script><script src="/_next/static/Wj1CQlHGEpFOn5fep_U4z/_buildManifest.js" defer=""></script><script src="/_next/static/Wj1CQlHGEpFOn5fep_U4z/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"Wj1CQlHGEpFOn5fep_U4z","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(s,e,t,a,c,n,i,d,o,r,p,u,g,f,m,j,b,k,h,y,l,v,I,F,x,_,U,w,q,N,A,S,B,C,z,D,E,L,M,T,P,G,H,J,K,O){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[l,"static/chunks/pages/index-215da7ae60a37272.js"],"/404":["static/chunks/pages/404-136cdc66cc546bf9.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[l,"static/chunks/pages/add-systems-e857d1d6fa43adb9.js"],"/add-systems/manual":[s,e,t,c,p,a,i,u,j,v,I,"static/chunks/pages/add-systems/manual-ec060a0c3e154265.js"],"/add-systems/multiple":[i,g,F,"static/chunks/pages/add-systems/multiple-1115a66a27198dd2.js"],"/consent":["static/chunks/pages/consent-4d2df7770ab3c3c8.js"],"/consent/configure":[i,g,"static/chunks/pages/consent/configure-0bafadd4832888a2.js"],"/consent/configure/add-vendors":[i,g,F,"static/chunks/pages/consent/configure/add-vendors-01a209a73ca6db10.js"],"/consent/privacy-experience":[p,x,"static/chunks/pages/consent/privacy-experience-2733b87269ad53d6.js"],"/consent/privacy-experience/new":[s,e,d,_,f,U,"static/chunks/pages/consent/privacy-experience/new-06bb3b0bf097fcdb.js"],"/consent/privacy-experience/[id]":[s,e,d,_,f,U,"static/chunks/pages/consent/privacy-experience/[id]-419ce6a7f72b10b1.js"],"/consent/privacy-notices":[x,"static/chunks/pages/consent/privacy-notices-61625c45fdcf931f.js"],"/consent/privacy-notices/new":[s,e,d,w,f,q,"static/chunks/pages/consent/privacy-notices/new-767c51405b61ad4e.js"],"/consent/privacy-notices/[id]":[s,e,d,w,f,q,"static/chunks/pages/consent/privacy-notices/[id]-caa7ecb68d6b5c77.js"],"/consent/properties":[N,"static/chunks/pages/consent/properties-ae989bd5c2b202f9.js"],"/consent/reporting":[s,"static/chunks/pages/consent/reporting-60272475cb0770fc.js"],"/data-catalog":[s,e,t,a,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-de21ee9984a0e989.js"],"/data-catalog/[systemId]/projects":[s,e,t,a,b,n,"static/chunks/pages/data-catalog/[systemId]/projects-12f7220f0ef3a50c.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[A,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-0b3847fe39d90f6d.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,e,t,a,b,S,n,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-11d52f1570759c4d.js"],"/data-catalog/[systemId]/resources":[A,"static/chunks/pages/data-catalog/[systemId]/resources-d8db234a44a2ddf4.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,e,t,a,b,S,n,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-b83afa5565d0c84e.js"],"/data-discovery/action-center":["static/chunks/pages/data-discovery/action-center-743321764a03e68d.js"],"/data-discovery/action-center/[monitorId]":[s,e,t,k,"static/chunks/pages/data-discovery/action-center/[monitorId]-0d09001cbefac14b.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,e,t,a,i,j,"static/css/81642473e38c67a5.css","static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-4b1956ba13d00d12.js"],"/data-discovery/activity":[r,"static/chunks/pages/data-discovery/activity-741553e7f5e5dad3.js"],"/data-discovery/detection":[r,B,"static/chunks/pages/data-discovery/detection-8733807dad4bc96e.js"],"/data-discovery/detection/[resourceUrn]":[r,B,"static/chunks/pages/data-discovery/detection/[resourceUrn]-393e20924c83373e.js"],"/data-discovery/discovery":[s,e,t,a,r,C,n,"static/chunks/pages/data-discovery/discovery-9e7dfd5a6acc2e8f.js"],"/data-discovery/discovery/[resourceUrn]":[s,e,t,a,r,C,n,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-14bd7500362ff224.js"],"/datamap":["static/chunks/255-7db55b0e3a0f9dea.js",u,z,"static/chunks/pages/datamap-286a2f95a62eaa92.js"],"/dataset":[o,m,"static/chunks/pages/dataset-d1191d3fbb953e64.js"],"/dataset/new":[o,m,"static/chunks/pages/dataset/new-5b58be23debaaecc.js"],"/dataset/[datasetId]":["static/chunks/9729-fcf6ff4e3534e4a8.js",h,"static/chunks/pages/dataset/[datasetId]-4523752f57210b05.js"],"/dataset/[datasetId]/[collectionName]":[s,e,t,c,a,h,n,"static/chunks/pages/dataset/[datasetId]/[collectionName]-7137e44d09c4e66f.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,e,t,c,a,h,n,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-1574f9f99f3fbd4d.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-b15447b9e74cd9ca.js"],"/datastore-connection/new":[s,c,o,p,D,m,E,"static/chunks/pages/datastore-connection/new-e648583cdd77269f.js"],"/datastore-connection/[id]":[s,c,o,D,m,E,"static/chunks/pages/datastore-connection/[id]-8adf2e814c3b9e0d.js"],"/fides-js-docs":["static/chunks/2fbcc6de-a6c61724c327e9fa.js","static/chunks/e3251fe7-5777b5d778e6fffa.js",s,e,t,c,o,L,"static/css/ab65b8cc3144bfc8.css","static/chunks/905-ffdbd0b14167e8bd.js","static/chunks/pages/fides-js-docs-5d8fd1af75f19e2f.js"],"/integrations":[s,e,t,c,d,M,T,n,"static/chunks/pages/integrations-2f51dd2ebc800c0d.js"],"/integrations/[id]":[s,e,t,c,d,M,T,n,"static/chunks/pages/integrations/[id]-c7355ec8b1375390.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,e,t,"static/chunks/pages/messaging-40fa5eff36a01f41.js"],"/messaging/add-template":[P,"static/chunks/pages/messaging/add-template-80b95a87ca4a9a0e.js"],"/messaging/[id]":[P,"static/chunks/pages/messaging/[id]-4b9ab7dc0267f8a8.js"],"/poc/ant-components":["static/chunks/pages/poc/ant-components-6e551f937e1b70f3.js"],"/poc/form-experiments/AntForm":["static/chunks/pages/poc/form-experiments/AntForm-49eb4b84e5f07ead.js"],"/poc/form-experiments/FormikAntFormItem":["static/chunks/pages/poc/form-experiments/FormikAntFormItem-0c523d8323b900a8.js"],"/poc/form-experiments/FormikControlled":["static/chunks/pages/poc/form-experiments/FormikControlled-3bf5a95f470f351b.js"],"/poc/form-experiments/FormikField":["static/chunks/pages/poc/form-experiments/FormikField-2056140039ebb8dd.js"],"/poc/form-experiments/FormikSpreadField":[G,"static/chunks/pages/poc/form-experiments/FormikSpreadField-af097d661f6abcf4.js"],"/poc/forms":[G,"static/chunks/pages/poc/forms-641937410482819f.js"],"/poc/table-migration":[i,g,"static/chunks/pages/poc/table-migration-00d2be9ac59028cf.js"],"/privacy-requests":[H,"static/chunks/pages/privacy-requests-d731dd036a0eb44d.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-623420abd445b87d.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-d31a1d8f3c573023.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-f3ec1a691bb7a6b6.js"],"/privacy-requests/[id]":[H,"static/css/399d4757862a3982.css","static/chunks/pages/privacy-requests/[id]-2f2410cdb2f2a918.js"],"/properties":[N,"static/chunks/pages/properties-95f73dad295c22c9.js"],"/properties/add-property":[J,"static/chunks/pages/properties/add-property-51fc662b550db919.js"],"/properties/[id]":[J,"static/chunks/pages/properties/[id]-202ba739110fbcc5.js"],"/reporting/datamap":[s,e,t,L,u,z,"static/chunks/pages/reporting/datamap-d9b31c6172f67b4c.js"],"/settings/about":["static/chunks/pages/settings/about-0102ed2e53aac3f8.js"],"/settings/about/alpha":["static/chunks/pages/settings/about/alpha-1d96cc94c9f9d57a.js"],"/settings/consent":["static/chunks/pages/settings/consent-dbef1e775cae0b4b.js"],"/settings/consent/[configuration_id]/[purpose_id]":["static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-492682d276a487c3.js"],"/settings/custom-fields":["static/chunks/pages/settings/custom-fields-1a7786045d55904c.js"],"/settings/domain-records":["static/chunks/pages/settings/domain-records-c62f0e6538a0f14f.js"],"/settings/domains":["static/chunks/pages/settings/domains-f3ccf59e0cef58c6.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-efdf18eadaf4e6df.js"],"/settings/locations":[K,k,"static/chunks/pages/settings/locations-c5fdc67504da5d52.js"],"/settings/organization":["static/chunks/pages/settings/organization-d57f3e3a1926ec3c.js"],"/settings/regulations":[K,k,"static/chunks/pages/settings/regulations-a92d6a45948774a4.js"],"/systems":["static/chunks/pages/systems-f23101c2c99a9abf.js"],"/systems/configure/[id]":[s,e,t,c,p,a,i,u,j,v,I,"static/chunks/pages/systems/configure/[id]-5750b7b195f4e050.js"],"/systems/configure/[id]/test-datasets":[o,"static/chunks/pages/systems/configure/[id]/test-datasets-f2749e3deaf2de1b.js"],"/taxonomy":["static/chunks/678d4732-50255cc09048e643.js",s,e,t,d,"static/chunks/570-c99f07161bd339cd.js","static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-40bdf2e4c0a6a6d5.js"],"/user-management":[y,"static/chunks/pages/user-management-542d299555665262.js"],"/user-management/new":[y,O,"static/chunks/pages/user-management/new-a2524414e968f862.js"],"/user-management/profile/[id]":[y,O,"static/chunks/pages/user-management/profile/[id]-c9ea4777da2b9148.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/fides-js-docs","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/poc/ant-components","/poc/form-experiments/AntForm","/poc/form-experiments/FormikAntFormItem","/poc/form-experiments/FormikControlled","/poc/form-experiments/FormikField","/poc/form-experiments/FormikSpreadField","/poc/forms","/poc/table-migration","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/about/alpha","/settings/consent","/settings/consent/[configuration_id]/[purpose_id]","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/2858-0b44609b6be7850b.js","static/chunks/2866-a73888c17a195cbe.js","static/chunks/9278-9b1b5970f0702668.js","static/chunks/409-7c75e7a5cd4251a2.js","static/chunks/699-8ca44b0de9fa20f0.js","static/css/d2d4e9a6923e6730.css","static/chunks/401-54fe500e30c5ea66.js","static/chunks/3662-f6a1ddca5ee42076.js","static/chunks/6527-0eed08abe252a918.js","static/chunks/431-cc1200b1bec1e1ad.js","static/chunks/5277-e8a036319456127f.js","static/chunks/9951-81e6a96c892bce10.js","static/chunks/3923-da789f963d161387.js","static/chunks/6084-a596a272a2cc1c93.js","static/chunks/5574-1eb6600d144c90d7.js","static/chunks/1040-63c82622e8aee766.js","static/chunks/6882-306b98265a440778.js","static/css/eb46b504bb5d980d.css","static/chunks/9226-e1ab0a8311cfcef5.js","static/chunks/7476-c3951a31cc8e30f4.js","static/css/972dc7eef106ee7c.css","static/chunks/3450-1088b1f14a3dc618.js","static/css/92fc10cc7ed1aba3.css","static/chunks/796-231bc790c78485ec.js","static/chunks/6853-7abe83702dff33b3.js","static/chunks/9014-eeae6f581158e645.js","static/chunks/1817-d6531612cc594bf1.js","static/chunks/3615-5e2d062d684b8fa1.js","static/chunks/6954-0294aa483799cd3a.js","static/chunks/79-acd3fc646456c35c.js","static/chunks/3872-dc8084d7df0f12e5.js","static/chunks/3855-abbb601a0115e0e2.js","static/chunks/5309-a7b637d2e3830582.js","static/chunks/9046-e28291074efc2b9c.js","static/chunks/4230-aeff8d542b494207.js","static/chunks/1807-3beab149351d5ded.js","static/chunks/9767-5700ef84bfa4689a.js","static/chunks/2599-6c4d22e75028d8b6.js","static/chunks/1316-6cc72a45ebf7ff81.js","static/chunks/6662-29c0da492e0686a5.js","static/chunks/7630-4797e955264ba37b.js","static/chunks/2921-39af9657977fa42c.js","static/chunks/1169-60d4b584fde8ce55.js","static/chunks/787-8c3cff5b5504bbfc.js","static/chunks/9826-a7302c609a0ae585.js","static/chunks/4121-a3935e484614d586.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|