ethyca-fides 2.73.1b0__py2.py3-none-any.whl → 2.73.1rc1__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.73.1b0.dist-info → ethyca_fides-2.73.1rc1.dist-info}/METADATA +1 -1
- {ethyca_fides-2.73.1b0.dist-info → ethyca_fides-2.73.1rc1.dist-info}/RECORD +190 -184
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/c09e76282dd1_add_privacy_request_duplication_cols.py +64 -0
- fides/api/alembic/migrations/versions/xx_2025_10_27_1834_67f0f2f4748e_adding_identity_definition_model.py +45 -0
- fides/api/db/base.py +2 -0
- fides/api/db/database.py +0 -1
- fides/api/models/identity_definition.py +65 -0
- fides/api/models/privacy_request/privacy_request.py +3 -0
- fides/api/models/v3/__init__.py +0 -0
- fides/api/models/v3/privacy_preferences.py +85 -0
- fides/api/schemas/application_config.py +28 -0
- fides/api/schemas/privacy_request.py +2 -0
- fides/config/__init__.py +3 -0
- fides/config/config_proxy.py +10 -0
- fides/config/duplicate_detection_settings.py +31 -0
- fides/config/utils.py +5 -0
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7059-2bb7c38578549703.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7488-cf92601852e3c509.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-0390fd020ce63363.js → _app-ee588a308812715d.js} +59 -59
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-426097f4730ab047.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/{[monitorId]-83aaac4f203d4e1e.js → [monitorId]-73085f50abb775c0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-823d0dd77e66585b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-cc39d61f64dccdc8.js → new-3d1e48f4b95d7f6b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-b2d3d28b10a758e6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-df0c95e408c54c7e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-cdd3754289a28317.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-632b3ee563d070f2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-d2eb5a81d4a19c7d.js +1 -0
- fides/ui-build/static/admin/_next/static/css/d78390d6134d8328.css +1 -0
- fides/ui-build/static/admin/_next/static/{XSgYbMHjEskI5VguCfcBR → raCA7Jc_kK8LyF2UZXIrh}/_buildManifest.js +1 -1
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website.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/new-privacy-requests.html +1 -1
- fides/ui-build/static/admin/notifications/digests/[id].html +1 -1
- fides/ui-build/static/admin/notifications/digests/new.html +1 -1
- fides/ui-build/static/admin/notifications/digests.html +1 -1
- fides/ui-build/static/admin/notifications/providers/[key].html +1 -1
- fides/ui-build/static/admin/notifications/providers/new.html +1 -1
- fides/ui-build/static/admin/notifications/providers.html +1 -1
- fides/ui-build/static/admin/notifications/templates/[id].html +1 -1
- fides/ui-build/static/admin/notifications/templates/add-template.html +1 -1
- fides/ui-build/static/admin/notifications/templates.html +1 -1
- fides/ui-build/static/admin/notifications.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/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/sandbox/privacy-notices.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/7059-5bd586186ec0b048.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7488-a3181357c4cce471.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-40b499229d5c2092.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-179cb2673fb04f82.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-d9fa9283fcffdbad.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-f5e954e44cac8c21.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-0f0f63b84617792e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-3d499c861a0c2913.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-3248059d6f6060e6.js +0 -1
- fides/ui-build/static/admin/_next/static/css/598d88c40c789cbd.css +0 -1
- {ethyca_fides-2.73.1b0.dist-info → ethyca_fides-2.73.1rc1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.73.1b0.dist-info → ethyca_fides-2.73.1rc1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.73.1b0.dist-info → ethyca_fides-2.73.1rc1.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.73.1b0.dist-info → ethyca_fides-2.73.1rc1.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1437-f0a5939b876d9c17.js → 1437-8b1f6c8797c68bfd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{155-ac6ad9b8dcca4838.js → 155-f6302d32cba4cab6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1817-e6bc6adb2c7fa009.js → 1817-2d5cf537a2992c79.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2040-7c4bf37c65dd7efa.js → 2040-7eed8491ca7276ed.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2397-d015b0f3da9292ea.js → 2397-083fc511acb6105d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3696-06bce0f3d97a4253.js → 3696-6f90e41a53d22920.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3700-33ae8d975461a592.js → 3700-f695f2f6b8251971.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3873-a20fdd3e4dc02037.js → 3873-d18e47b327445db5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-724809b7b01193c5.js → 3923-f0a85dc5c3684fa0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4496-bad79edfbd60c0aa.js → 4496-4ff19366c597ec16.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5185-950138b6e2ea9189.js → 5185-e7f8b81dd3dfbe0b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5258-99ddc37f9293e654.js → 5258-62d6bc19add60aa6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5279-a5ad59b09569d4a6.js → 5279-bd6cccabdd6ca447.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5643-3f88087bcb270f9d.js → 5643-3459282d296a3c59.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5783-e4683535810bf833.js → 5783-21775c232dce7af7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6277-0948f689ad31baf5.js → 6277-3759894435cb8569.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6315-14862cf3c0926cc4.js → 6315-e2fb5ea77179a871.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-3545785c1264ac62.js → 6853-de9905d28e5b19b3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-750d97672d7f236c.js → 6954-84789a4e4fb04eb9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7245-10e52bfd2268d1ea.js → 7245-c9bc628d078c2170.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7476-a0cb2b5987d5f06b.js → 7476-a02d970ea4d3f7d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8011-da0efcd90c1af2f9.js → 8011-75af8b480fa114e6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8212-4e17ad3e2b18b1b2.js → 8212-393420e5a9751791.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8373-eddc22623b904f77.js → 8373-22b4d20e8cc06b3a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9046-37cc2a63e11821cf.js → 9046-d9c6498368b993d1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9330-a40d1db55b2a3b38.js → 9330-f753636a31c4ea04.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9682-095307ea3955935a.js → 9682-d1a3afa1394f8304.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9899-977da69f7dcc79a4.js → 9899-addc35c81190203d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9965-f175f3cbf6c01945.js → 9965-25621dd507e0cfd6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-4fa95c55c0d9a9fa.js → add-systems-ee9df33ebd471099.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-a218f663656c1c1f.js → privacy-experience-b08abefec298ccf1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-1f8fd945fbc47ddf.js → privacy-notices-6528eb24165aceb6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-c84cb8f86e537d05.js → reporting-11f1683aa15e1a62.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-f4f4a8d135573e7d.js → projects-07e7d38ce34e1e6c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-00fde32bfe883f11.js → data-catalog-127c114dd8f102ed.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/{[systemId]-3f0665ea305feb9a.js → [systemId]-899bf30dde8b3292.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-5cecc3db1b476419.js → activity-24a82e07a0008516.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-116b92a622ed7191.js → dataset-d3c6ecf7f29bea6e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-f40921f41ea86a4d.js → [id]-0a4aa42be2da0255.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-48204230f9b28f9a.js → new-14313e441a13192c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-5c660814b844888d.js → datastore-connection-f139d1ce26404f30.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-1be29ec61e36ca69.js → index-1343fa525a206571.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-88588fd42ec4b8c6.js → integrations-a733e5d7c3ce9bb8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{[id]-aa358be796271bf9.js → [id]-63b3be660fb12c0f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{new-09b57c415163db68.js → new-d3b577962dd33266.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{digests-fc9c9c88e86d73ec.js → digests-aed9afd988a48acf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{providers-617d0754570a09e8.js → providers-36a0ac36062abd02.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{templates-e57aba990f23b454.js → templates-a14c876b49422597.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-696222c67a086ddd.js → storage-cc41ae605f2b55ae.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-6d9569f5c2da2aa4.js → privacy-requests-6e4c535b6d614596.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-971b628eec9d84d3.js → [purpose_id]-19de0024418a4924.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-1702f4d95e93c1a2.js → consent-5b6807dced8d03c5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-181b9b545ad38141.js → custom-fields-7dce52bfc1b2652c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-5763dd57a6e15292.js → locations-61076eedbfd137b9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-2d98e0170bc33490.js → organization-b07b11d6002f8c8c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-7e62b3024a7c668c.js → test-datasets-b72d36243a0a545c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-1db858c1a3d0fcd7.js → systems-cfaa37a0df83674b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-0f66bab70f303524.js → [id]-5d5a68e555d18693.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-f172e96aed81651b.js → user-management-e6a211d8a0401086.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{XSgYbMHjEskI5VguCfcBR → raCA7Jc_kK8LyF2UZXIrh}/_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-10-
|
|
11
|
+
"date": "2025-10-30T11:37:44-0600",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.73.
|
|
14
|
+
"full-revisionid": "a486d7c399b140c10d69d298eea1d5c6abcfbe59",
|
|
15
|
+
"version": "2.73.1rc1"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""add privacy request duplication cols
|
|
2
|
+
|
|
3
|
+
Revision ID: c09e76282dd1
|
|
4
|
+
Revises: 67f0f2f4748e
|
|
5
|
+
Create Date: 2025-10-21 21:46:38.006328
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "c09e76282dd1"
|
|
14
|
+
down_revision = "67f0f2f4748e"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
+
# Add duplicate group tracking column
|
|
22
|
+
op.add_column(
|
|
23
|
+
"privacyrequest",
|
|
24
|
+
sa.Column("duplicate_request_group_id", sa.String(), nullable=True),
|
|
25
|
+
)
|
|
26
|
+
op.create_index(
|
|
27
|
+
op.f("ix_privacyrequest_duplicate_request_group_id"),
|
|
28
|
+
"privacyrequest",
|
|
29
|
+
["duplicate_request_group_id"],
|
|
30
|
+
unique=False,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Add 'duplicate' status to enum
|
|
34
|
+
op.execute("alter type privacyrequeststatus add value 'duplicate'")
|
|
35
|
+
# ### end Alembic commands ###
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def downgrade():
|
|
39
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
40
|
+
# Drop group tracking column and index
|
|
41
|
+
op.drop_index(
|
|
42
|
+
op.f("ix_privacyrequest_duplicate_request_group_id"),
|
|
43
|
+
table_name="privacyrequest",
|
|
44
|
+
)
|
|
45
|
+
op.drop_column("privacyrequest", "duplicate_request_group_id")
|
|
46
|
+
|
|
47
|
+
# Remove 'duplicate' status from enum
|
|
48
|
+
# First delete any requests with duplicate status
|
|
49
|
+
op.execute("UPDATE privacyrequest SET status = 'error' WHERE status = 'duplicate'")
|
|
50
|
+
|
|
51
|
+
# Recreate enum without 'duplicate'
|
|
52
|
+
op.execute("alter type privacyrequeststatus rename to privacyrequeststatus_old")
|
|
53
|
+
op.execute(
|
|
54
|
+
"create type privacyrequeststatus as enum("
|
|
55
|
+
"'identity_unverified', 'requires_input', 'pending', 'approved', 'denied', "
|
|
56
|
+
"'in_processing', 'complete', 'paused', 'awaiting_email_send', "
|
|
57
|
+
"'requires_manual_finalization', 'canceled', 'error')"
|
|
58
|
+
)
|
|
59
|
+
op.execute(
|
|
60
|
+
"alter table privacyrequest alter column status type privacyrequeststatus "
|
|
61
|
+
"using status::text::privacyrequeststatus"
|
|
62
|
+
)
|
|
63
|
+
op.execute("drop type privacyrequeststatus_old")
|
|
64
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""adding identity definition model
|
|
2
|
+
|
|
3
|
+
Revision ID: 67f0f2f4748e
|
|
4
|
+
Revises: 5093e92e2a5a
|
|
5
|
+
Create Date: 2025-10-27 18:34:38.326608
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "67f0f2f4748e"
|
|
14
|
+
down_revision = "5093e92e2a5a"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
op.create_table(
|
|
21
|
+
"identity_definition",
|
|
22
|
+
sa.Column("id", sa.String(length=255), nullable=False, unique=True),
|
|
23
|
+
sa.Column(
|
|
24
|
+
"created_at",
|
|
25
|
+
sa.DateTime(timezone=True),
|
|
26
|
+
server_default=sa.text("now()"),
|
|
27
|
+
nullable=True,
|
|
28
|
+
),
|
|
29
|
+
sa.Column(
|
|
30
|
+
"updated_at",
|
|
31
|
+
sa.DateTime(timezone=True),
|
|
32
|
+
server_default=sa.text("now()"),
|
|
33
|
+
nullable=True,
|
|
34
|
+
),
|
|
35
|
+
sa.Column("identity_key", sa.String(length=255), nullable=False),
|
|
36
|
+
sa.Column("name", sa.String(length=255), nullable=False),
|
|
37
|
+
sa.Column("description", sa.Text(), nullable=True),
|
|
38
|
+
sa.Column("type", sa.String(length=255), nullable=False),
|
|
39
|
+
sa.Column("created_by", sa.String(length=255), nullable=True),
|
|
40
|
+
sa.PrimaryKeyConstraint("identity_key"),
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def downgrade():
|
|
45
|
+
op.drop_table("identity_definition")
|
fides/api/db/base.py
CHANGED
|
@@ -33,6 +33,7 @@ from fides.api.models.fides_user_permissions import FidesUserPermissions
|
|
|
33
33
|
from fides.api.models.fides_user_respondent_email_verification import (
|
|
34
34
|
FidesUserRespondentEmailVerification,
|
|
35
35
|
)
|
|
36
|
+
from fides.api.models.identity_definition import IdentityDefinition
|
|
36
37
|
from fides.api.models.identity_salt import IdentitySalt
|
|
37
38
|
from fides.api.models.location_regulation_selections import LocationRegulationSelections
|
|
38
39
|
from fides.api.models.manual_task import (
|
|
@@ -95,3 +96,4 @@ from fides.api.models.tcf_publisher_restrictions import (
|
|
|
95
96
|
TCFPublisherRestriction,
|
|
96
97
|
)
|
|
97
98
|
from fides.api.models.tcf_purpose_overrides import TCFPurposeOverride
|
|
99
|
+
from fides.api.models.v3.privacy_preferences import PrivacyPreferences
|
fides/api/db/database.py
CHANGED
|
@@ -24,7 +24,6 @@ DatabaseHealth = Literal["healthy", "unhealthy", "needs migration"]
|
|
|
24
24
|
|
|
25
25
|
# Tables to exclude from migration auto-generation (e.g., tables without SQLAlchemy models)
|
|
26
26
|
EXCLUDED_TABLES = {
|
|
27
|
-
"privacy_preferences",
|
|
28
27
|
"privacy_preferences_current",
|
|
29
28
|
"privacy_preferences_historic",
|
|
30
29
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import Column, String, Text
|
|
4
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
5
|
+
|
|
6
|
+
from fides.api.db.base_class import Base, FidesBase
|
|
7
|
+
from fides.api.db.util import EnumColumn
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class IdentityDefinitionType(str, Enum):
|
|
11
|
+
"""Enum for the type of identity"""
|
|
12
|
+
|
|
13
|
+
EMAIL = "email"
|
|
14
|
+
PHONE_NUMBER = "phone_number"
|
|
15
|
+
UUID = "uuid"
|
|
16
|
+
STRING = "string"
|
|
17
|
+
INTEGER = "integer"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class IdentityDefinition(Base):
|
|
21
|
+
"""
|
|
22
|
+
Model for identity definitions in Fides. This isn't for specific identity values,
|
|
23
|
+
but for the types of identities that can be used in Fides.
|
|
24
|
+
|
|
25
|
+
For example:
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"identity_key": "customer_id",
|
|
29
|
+
"name": "Customer ID",
|
|
30
|
+
"description": "The unique identifier for the customer",
|
|
31
|
+
"type": "string"
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
@declared_attr
|
|
37
|
+
def __tablename__(self) -> str:
|
|
38
|
+
return "identity_definition"
|
|
39
|
+
|
|
40
|
+
# Overriding the id definition from Base so we don't treat this as the primary key
|
|
41
|
+
id = Column(
|
|
42
|
+
String(255),
|
|
43
|
+
nullable=False,
|
|
44
|
+
index=False,
|
|
45
|
+
unique=True,
|
|
46
|
+
default=FidesBase.generate_uuid,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# Primary key
|
|
50
|
+
identity_key = Column(String(255), primary_key=True)
|
|
51
|
+
|
|
52
|
+
# Schema definition
|
|
53
|
+
name = Column(String(255), nullable=False)
|
|
54
|
+
description = Column(Text, nullable=True)
|
|
55
|
+
type = Column(
|
|
56
|
+
EnumColumn(
|
|
57
|
+
IdentityDefinitionType,
|
|
58
|
+
native_enum=False,
|
|
59
|
+
values_callable=lambda x: [
|
|
60
|
+
i.value for i in x
|
|
61
|
+
], # allows enum _values_ to be stored rather than name
|
|
62
|
+
),
|
|
63
|
+
nullable=False,
|
|
64
|
+
)
|
|
65
|
+
created_by = Column(String(255), nullable=True)
|
|
@@ -224,6 +224,9 @@ class PrivacyRequest(
|
|
|
224
224
|
source = Column(EnumColumn(PrivacyRequestSource), nullable=True)
|
|
225
225
|
location = Column(String, nullable=True)
|
|
226
226
|
|
|
227
|
+
# Duplicate detection - group ID to link duplicates together
|
|
228
|
+
duplicate_request_group_id = Column(String, index=True, nullable=True)
|
|
229
|
+
|
|
227
230
|
# A PrivacyRequest can be soft deleted, so we store when it was deleted
|
|
228
231
|
deleted_at = Column(DateTime(timezone=True), nullable=True)
|
|
229
232
|
# and who deleted it
|
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""SQLAlchemy model for the v3 privacy_preferences table."""
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import ( # type: ignore[attr-defined]
|
|
4
|
+
BigInteger,
|
|
5
|
+
Boolean,
|
|
6
|
+
Column,
|
|
7
|
+
DateTime,
|
|
8
|
+
Identity,
|
|
9
|
+
Text,
|
|
10
|
+
text,
|
|
11
|
+
)
|
|
12
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
|
13
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
14
|
+
from sqlalchemy_utils.types.encrypted.encrypted_type import (
|
|
15
|
+
AesGcmEngine,
|
|
16
|
+
StringEncryptedType,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from fides.api.cryptography.cryptographic_util import hash_value_with_salt
|
|
20
|
+
from fides.api.cryptography.identity_salt import get_identity_salt
|
|
21
|
+
from fides.api.db.base_class import Base
|
|
22
|
+
from fides.api.schemas.redis_cache import MultiValue
|
|
23
|
+
from fides.config import CONFIG
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class PrivacyPreferences(Base):
|
|
27
|
+
"""
|
|
28
|
+
Model for the v3 privacy_preferences table.
|
|
29
|
+
This is used for the v3 privacy preferences API.
|
|
30
|
+
|
|
31
|
+
This table stores privacy preference records with a partitioning scheme
|
|
32
|
+
based on the is_latest flag, splitting records into current and historic partitions.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
@declared_attr
|
|
36
|
+
def __tablename__(self) -> str:
|
|
37
|
+
return "privacy_preferences"
|
|
38
|
+
|
|
39
|
+
# Override the default id column from Base (which is a String UUID)
|
|
40
|
+
# with a BigInteger identity column for this table
|
|
41
|
+
id = Column(
|
|
42
|
+
BigInteger, # type: ignore[arg-type]
|
|
43
|
+
Identity(start=1, increment=1, always=True),
|
|
44
|
+
primary_key=True,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Searchable/queryable data stored as JSONB
|
|
48
|
+
search_data = Column(JSONB, nullable=True)
|
|
49
|
+
|
|
50
|
+
# Full record data stored as encrypted text (contains PII)
|
|
51
|
+
record_data = Column(
|
|
52
|
+
StringEncryptedType(
|
|
53
|
+
type_in=Text(),
|
|
54
|
+
key=CONFIG.security.app_encryption_key,
|
|
55
|
+
engine=AesGcmEngine,
|
|
56
|
+
padding="pkcs5",
|
|
57
|
+
),
|
|
58
|
+
nullable=True,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# Partition key - determines if record goes to _current or _historic partition
|
|
62
|
+
is_latest = Column(
|
|
63
|
+
Boolean, nullable=False, server_default=text("false"), primary_key=True
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Override base class timestamp columns to match migration
|
|
67
|
+
created_at = Column(
|
|
68
|
+
DateTime(timezone=True), nullable=False, server_default=text("now()")
|
|
69
|
+
)
|
|
70
|
+
updated_at = Column(DateTime(timezone=True), nullable=True)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
def hash_value(
|
|
74
|
+
cls,
|
|
75
|
+
value: MultiValue,
|
|
76
|
+
encoding: str = "UTF-8",
|
|
77
|
+
) -> str:
|
|
78
|
+
"""Utility function to hash the value with a generated salt"""
|
|
79
|
+
salt = get_identity_salt()
|
|
80
|
+
value_str = str(value)
|
|
81
|
+
hashed_value = hash_value_with_salt(
|
|
82
|
+
value_str.encode(encoding),
|
|
83
|
+
salt.encode(encoding),
|
|
84
|
+
)
|
|
85
|
+
return hashed_value
|
|
@@ -101,6 +101,31 @@ class ConsentConfig(FidesSchema):
|
|
|
101
101
|
model_config = ConfigDict(extra="forbid")
|
|
102
102
|
|
|
103
103
|
|
|
104
|
+
class DuplicateDetectionApplicationConfig(FidesSchema):
|
|
105
|
+
"""
|
|
106
|
+
API model - configuration settings for duplicate privacy request detection.
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
enabled: Optional[bool] = Field(
|
|
110
|
+
default=False,
|
|
111
|
+
description="Whether duplicate detection is enabled. Disabled by default.",
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
time_window_days: Optional[int] = Field(
|
|
115
|
+
default=365,
|
|
116
|
+
description="Time window in days for duplicate detection. Default is 1 year.",
|
|
117
|
+
ge=1,
|
|
118
|
+
le=3650, # Max 10 years
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
match_identity_fields: Optional[List[str]] = Field(
|
|
122
|
+
default=["email"],
|
|
123
|
+
description="Identity field names to match on for duplicate detection (e.g., 'email', 'phone_number'). Default is email only.",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
model_config = ConfigDict(extra="forbid")
|
|
127
|
+
|
|
128
|
+
|
|
104
129
|
class SecurityApplicationConfig(FidesSchema):
|
|
105
130
|
# only valid URLs should be set as cors_origins
|
|
106
131
|
# for advanced usage of non-URLs, e.g. wildcards (`*`), the related
|
|
@@ -129,6 +154,9 @@ class ApplicationConfig(FidesSchema):
|
|
|
129
154
|
consent: Optional[ConsentConfig] = None
|
|
130
155
|
admin_ui: Optional[AdminUIConfig] = None
|
|
131
156
|
privacy_center: Optional[PrivacyCenterConfig] = None
|
|
157
|
+
privacy_request_duplicate_detection: Optional[
|
|
158
|
+
DuplicateDetectionApplicationConfig
|
|
159
|
+
] = None
|
|
132
160
|
|
|
133
161
|
@model_validator(mode="before")
|
|
134
162
|
@classmethod
|
|
@@ -306,6 +306,7 @@ class PrivacyRequestStatus(str, EnumType):
|
|
|
306
306
|
requires_manual_finalization = "requires_manual_finalization"
|
|
307
307
|
canceled = "canceled"
|
|
308
308
|
error = "error"
|
|
309
|
+
duplicate = "duplicate" # Request identified as duplicate of another request
|
|
309
310
|
|
|
310
311
|
|
|
311
312
|
class PrivacyRequestResponse(FidesSchema):
|
|
@@ -342,6 +343,7 @@ class PrivacyRequestResponse(FidesSchema):
|
|
|
342
343
|
deleted_by: Optional[str] = None
|
|
343
344
|
finalized_at: Optional[datetime] = None
|
|
344
345
|
finalized_by: Optional[str] = None
|
|
346
|
+
duplicate_request_group_id: Optional[str] = None
|
|
345
347
|
|
|
346
348
|
model_config = ConfigDict(from_attributes=True, use_enum_values=True)
|
|
347
349
|
|
fides/config/__init__.py
CHANGED
|
@@ -24,6 +24,7 @@ from .cli_settings import CLISettings
|
|
|
24
24
|
from .consent_settings import ConsentSettings
|
|
25
25
|
from .credentials_settings import merge_credentials_environment
|
|
26
26
|
from .database_settings import DatabaseSettings
|
|
27
|
+
from .duplicate_detection_settings import DuplicateDetectionSettings
|
|
27
28
|
from .execution_settings import ExecutionSettings
|
|
28
29
|
from .fides_settings import FidesSettings
|
|
29
30
|
from .helpers import handle_deprecated_env_variables, handle_deprecated_fields
|
|
@@ -79,6 +80,7 @@ class FidesConfig(FidesSettings):
|
|
|
79
80
|
description="This is a special section that is used to store arbitrary key/value pairs to be used as credentials."
|
|
80
81
|
)
|
|
81
82
|
database: DatabaseSettings
|
|
83
|
+
privacy_request_duplicate_detection: DuplicateDetectionSettings
|
|
82
84
|
execution: ExecutionSettings
|
|
83
85
|
logging: LoggingSettings
|
|
84
86
|
notifications: NotificationSettings
|
|
@@ -161,6 +163,7 @@ def build_config(config_dict: Dict[str, Any]) -> FidesConfig:
|
|
|
161
163
|
"consent": ConsentSettings,
|
|
162
164
|
"cli": CLISettings,
|
|
163
165
|
"database": DatabaseSettings,
|
|
166
|
+
"privacy_request_duplicate_detection": DuplicateDetectionSettings,
|
|
164
167
|
"execution": ExecutionSettings,
|
|
165
168
|
"logging": LoggingSettings,
|
|
166
169
|
"notifications": NotificationSettings,
|
fides/config/config_proxy.py
CHANGED
|
@@ -155,6 +155,15 @@ class ConsentSettingsProxy(ConfigProxyBase):
|
|
|
155
155
|
override_vendor_purposes: bool
|
|
156
156
|
|
|
157
157
|
|
|
158
|
+
class DuplicateDetectionSettingsProxy(ConfigProxyBase):
|
|
159
|
+
prefix = "privacy_request_duplicate_detection"
|
|
160
|
+
|
|
161
|
+
enabled: bool
|
|
162
|
+
time_window_days: int
|
|
163
|
+
match_identity_fields: List[str]
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
# pylint: disable=too-many-instance-attributes
|
|
158
167
|
class ConfigProxy:
|
|
159
168
|
"""
|
|
160
169
|
ConfigProxy instances allow access to "resolved" config properties
|
|
@@ -183,6 +192,7 @@ class ConfigProxy:
|
|
|
183
192
|
self.storage = StorageSettingsProxy(db)
|
|
184
193
|
self.security = SecuritySettingsProxy(db)
|
|
185
194
|
self.consent = ConsentSettingsProxy(db)
|
|
195
|
+
self.privacy_request_duplicate_detection = DuplicateDetectionSettingsProxy(db)
|
|
186
196
|
self.privacy_center = PrivacyCenterSettingsProxy(db)
|
|
187
197
|
|
|
188
198
|
def load_current_cors_domains_into_middleware(self, app: FastAPI) -> None:
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
from pydantic_settings import SettingsConfigDict
|
|
5
|
+
|
|
6
|
+
from .fides_settings import FidesSettings
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DuplicateDetectionSettings(FidesSettings):
|
|
10
|
+
"""Configuration settings for Duplicate Privacy Request Detection."""
|
|
11
|
+
|
|
12
|
+
enabled: bool = Field(
|
|
13
|
+
default=False,
|
|
14
|
+
description="Whether duplicate detection is enabled. Disabled by default.",
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
time_window_days: int = Field(
|
|
18
|
+
default=365,
|
|
19
|
+
description="Time window in days for duplicate detection. Default is 1 year.",
|
|
20
|
+
ge=1,
|
|
21
|
+
le=3650, # Max 10 years
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
match_identity_fields: List[str] = Field(
|
|
25
|
+
default=["email"],
|
|
26
|
+
description="Identity field names to match on for duplicate detection (e.g., 'email', 'phone_number'). Default is email only.",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
model_config = SettingsConfigDict(
|
|
30
|
+
env_prefix="FIDES__PRIVACY_REQUEST_DUPLICATE_DETECTION__"
|
|
31
|
+
)
|
fides/config/utils.py
CHANGED
|
@@ -70,4 +70,9 @@ CONFIG_KEY_ALLOWLIST = {
|
|
|
70
70
|
"consent": ["override_vendor_purposes"],
|
|
71
71
|
"admin_ui": ["enabled", "url", "error_notification_mode"],
|
|
72
72
|
"privacy_center": ["url"],
|
|
73
|
+
"privacy_request_duplicate_detection": [
|
|
74
|
+
"enabled",
|
|
75
|
+
"time_window_days",
|
|
76
|
+
"match_identity_fields",
|
|
77
|
+
],
|
|
73
78
|
}
|
|
@@ -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/d78390d6134d8328.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d78390d6134d8328.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-c2c11809187b9f84.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-ee588a308812715d.js" defer=""></script><script src="/_next/static/chunks/pages/404-eb019192ce498f32.js" defer=""></script><script src="/_next/static/raCA7Jc_kK8LyF2UZXIrh/_buildManifest.js" defer=""></script><script src="/_next/static/raCA7Jc_kK8LyF2UZXIrh/_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":"raCA7Jc_kK8LyF2UZXIrh","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7059],{37059:function(e,t,r){r.d(t,{$h:function(){return E},Ak:function(){return v},Av:function(){return q},EY:function(){return g},M8:function(){return O},QC:function(){return M},RV:function(){return N},S0:function(){return P},Tj:function(){return p},Ud:function(){return u},Vr:function(){return _},WJ:function(){return l},mC:function(){return I},mL:function(){return R},mi:function(){return f},nP:function(){return m},nS:function(){return y},rs:function(){return d},sX:function(){return T},ut:function(){return S},vc:function(){return C},wi:function(){return c}});var s=r(78780),o=r(16394),n=r(65735),i=r(98145),a=r(71985);let{useGetAggregateMonitorResultsQuery:u,useGetDiscoveredSystemAggregateQuery:c,useGetDiscoveredAssetsQuery:l,useAddMonitorResultSystemsMutation:d,useIgnoreMonitorResultSystemsMutation:m,useAddMonitorResultAssetsMutation:g,useIgnoreMonitorResultAssetsMutation:y,useRestoreMonitorResultAssetsMutation:p,useUpdateAssetsSystemMutation:T,useUpdateAssetsDataUseMutation:v,useUpdateAssetsMutation:_,useGetConsentBreakdownQuery:f,useGetWebsiteMonitorResourceFiltersQuery:S,useGetInProgressMonitorTasksQuery:E,useRetryMonitorTaskMutation:R,useDismissMonitorTaskMutation:M,useUndismissMonitorTaskMutation:A,useGetMonitorTreeQuery:h,useLazyGetMonitorTreeQuery:N,useLazyGetMonitorTreeAncestorsStatusesQuery:O,useGetMonitorConfigQuery:C,useGetDatastoreFiltersQuery:P,useClassifyStagedResourcesMutation:q,useGetStagedResourceDetailsQuery:D,useLazyGetStagedResourceDetailsQuery:I}=s.u.injectEndpoints({endpoints:e=>({getAggregateMonitorResults:e.query({query:e=>{let{page:t=1,size:r=20,search:s,monitor_type:n}=e,i=(0,o.$J)({monitor_type:n});return{url:"/plus/discovery-monitor/aggregate-results?".concat(i.toString()),params:{page:t,size:r,search:s,diff_status:"addition"}}},transformResponse:e=>({...e,items:e.items.map(e=>({...e,monitorType:(0,a.G)(e.connection_type),isTestMonitor:e.connection_type===n.Rj.TEST_WEBSITE||e.connection_type===n.Rj.FIDES}))}),providesTags:["Discovery Monitor Results"]}),getMonitorConfig:e.query({query:e=>{let{monitor_config_id:t}=e;return{url:"/plus/discovery-monitor/".concat(t)}}}),getDatastoreFilters:e.query({query:e=>{let{monitor_config_id:t,staged_resource_urn:r}=e;return{url:"/plus/filters/datastore_monitor_resources?monitor_config_id=".concat(t,"&").concat((0,o.du)(r,"staged_resource_urn"))}}}),getMonitorTree:e.query({query:e=>{let{page:t=1,size:r=20,monitor_config_id:s,staged_resource_urn:o,include_descendant_details:n}=e;return{url:"/plus/discovery-monitor/".concat(s,"/tree"),params:{staged_resource_urn:o,include_descendant_details:n,page:t,size:r}}}}),getMonitorTreeAncestorsStatuses:e.query({query:e=>{let{monitor_config_id:t,staged_resource_urn:r}=e;return{url:"/plus/discovery-monitor/".concat(t,"/tree/ancestors-statuses"),params:{staged_resource_urn:r}}}}),getDiscoveredSystemAggregate:e.query({query:e=>{let{key:t,resolved_system_id:r,page:s=1,size:o=20,search:n,diff_status:i}=e;return{url:"/plus/discovery-monitor/system-aggregate-results",params:{monitor_config_id:t,resolved_system_id:r,page:s,size:o,search:n,diff_status:i}}},providesTags:["Discovery Monitor Results"]}),getDiscoveredAssets:e.query({query:e=>{let{key:t,system:r,page:s=1,size:a=20,search:u,diff_status:c=[n.LL.ADDITION],sort_by:l=[i.r6.NAME],sort_asc:d=!0,resource_type:m,data_uses:g,locations:y,consent_aggregated:p}=e,T=Array.isArray(l)?l:[l],v=(0,o.$J)({sort_by:T,resource_type:m,data_uses:g,locations:y,consent_aggregated:p});return{url:"/plus/discovery-monitor/".concat(t,"/results?").concat(v.toString()),params:{resolved_system_id:r,page:s,size:a,search:u,diff_status:c,sort_asc:d}}},providesTags:()=>["Discovery Monitor Results"]}),addMonitorResultSystems:e.mutation({query:e=>{let{monitor_config_key:t,resolved_system_ids:r}=e,s=(0,o.du)(r,"resolved_system_ids");return{url:"/plus/discovery-monitor/".concat(t,"/promote"),method:"POST",params:s?new URLSearchParams(s):new URLSearchParams}},invalidatesTags:["Discovery Monitor Results"]}),ignoreMonitorResultSystems:e.mutation({query:e=>{let{monitor_config_key:t,resolved_system_ids:r}=e,s=(0,o.du)(r,"resolved_system_ids");return{method:"POST",url:"/plus/discovery-monitor/".concat(t,"/mute?").concat(s)}},invalidatesTags:["Discovery Monitor Results"]}),addMonitorResultAssets:e.mutation({query:e=>{var t;let r=new URLSearchParams;return null===(t=e.urnList)||void 0===t||t.forEach(e=>r.append("staged_resource_urns",e)),{method:"POST",url:"/plus/discovery-monitor/promote?".concat(r)}},invalidatesTags:["Discovery Monitor Results"]}),ignoreMonitorResultAssets:e.mutation({query:e=>({method:"POST",url:"/plus/discovery-monitor/mute",body:{staged_resource_urns:e.urnList}}),invalidatesTags:["Discovery Monitor Results","Monitor Field Results","Monitor Field Details"]}),restoreMonitorResultAssets:e.mutation({query:e=>{var t;let r=new URLSearchParams({status_to_set:n.LL.ADDITION});return null===(t=e.urnList)||void 0===t||t.forEach(e=>r.append("staged_resource_urns",e)),{method:"POST",url:"/plus/discovery-monitor/un-mute?".concat(r)}},invalidatesTags:["Discovery Monitor Results"]}),updateAssetsSystem:e.mutation({query:e=>({method:"PATCH",url:"/plus/discovery-monitor/".concat(e.monitorId,"/results"),body:e.urnList.map(t=>({urn:t,user_assigned_system_key:e.systemKey}))}),invalidatesTags:["Discovery Monitor Results","System Assets"]}),updateAssetsDataUse:e.mutation({query:e=>({method:"PATCH",url:"/plus/discovery-monitor/".concat(e.monitorId,"/results"),body:e.urnList.map(t=>({urn:t,user_assigned_data_uses:e.dataUses}))}),invalidatesTags:["Discovery Monitor Results"]}),updateAssets:e.mutation({query:e=>({method:"PATCH",url:"/plus/discovery-monitor/".concat(e.monitorId,"/results"),body:e.assets}),invalidatesTags:["Discovery Monitor Results"]}),getConsentBreakdown:e.query({query:e=>{let{stagedResourceUrn:t,statuses:r,page:s=1,size:o=20}=e,n=new URLSearchParams;return n.append("page",String(s)),n.append("size",String(o)),r.forEach(e=>{n.append("status",e)}),{url:"/plus/discovery-monitor/staged_resource/".concat(encodeURIComponent(t),"/consent"),params:n}}}),getStagedResourceDetails:e.query({query:e=>{let{stagedResourceUrn:t}=e;return{url:"/plus/discovery-monitor/staged_resource/".concat(encodeURIComponent(t))}},providesTags:["Monitor Field Details"]}),getWebsiteMonitorResourceFilters:e.query({query:e=>{let{monitor_config_id:t,resolved_system_id:r,diff_status:s=[n.LL.ADDITION],search:i,resource_type:a,data_uses:u,locations:c,consent_aggregated:l}=e,d={monitor_config_id:t,resolved_system_id:r,diff_status:s};i&&(d.search=i);let m=(0,o.$J)({resource_type:a,data_uses:u,locations:c,consent_aggregated:l}).toString();return{url:m?"/plus/filters/website_monitor_resources?".concat(m):"/plus/filters/website_monitor_resources",params:d}},providesTags:["Discovery Monitor Results"]}),getInProgressMonitorTasks:e.query({query:e=>{let{page:t=1,size:r=20,search:s,task_types:o,statuses:n,return_dismissed:i=!1}=e,a=new URLSearchParams({page:t.toString(),size:r.toString(),return_dismissed:i.toString()});return s&&a.append("search",s),(null==o?void 0:o.length)&&o.forEach(e=>a.append("action_type",e)),(null==n?void 0:n.length)&&n.forEach(e=>a.append("status",e)),{url:"/plus/discovery-monitor/tasks?".concat(a.toString())}},providesTags:["Monitor Tasks"]}),retryMonitorTask:e.mutation({query:e=>{let{taskId:t}=e;return{url:"/plus/discovery-monitor/tasks/".concat(t,"/retry"),method:"POST"}},invalidatesTags:["Monitor Tasks"]}),dismissMonitorTask:e.mutation({query:e=>{let{taskId:t}=e;return{url:"/plus/discovery-monitor/tasks/".concat(t,"/dismissed"),method:"POST"}},invalidatesTags:["Monitor Tasks"]}),undismissMonitorTask:e.mutation({query:e=>{let{taskId:t}=e;return{url:"/plus/discovery-monitor/tasks/".concat(t,"/dismissed"),method:"DELETE"}},invalidatesTags:["Monitor Tasks"]}),classifyStagedResources:e.mutation({query:e=>{let{monitor_config_key:t,...r}=e;return{url:"/plus/discovery-monitor/".concat(t,"/classify"),method:"POST",body:r}},invalidatesTags:["Monitor Field Results","Monitor Field Details"]})})})},98145:function(e,t,r){r.d(t,{EI:function(){return u},EP:function(){return g},H6:function(){return p},LM:function(){return m},Vq:function(){return d},X1:function(){return l},r6:function(){return i},v8:function(){return y},vQ:function(){return a}});var s,o,n,i,a,u,c=r(65735);let l={[c.lg.WITH_CONSENT]:"Consent respected",[c.lg.WITHOUT_CONSENT]:"Consent ignored",[c.lg.EXEMPT]:"Exempt",[c.lg.UNKNOWN]:"Unknown",[c.lg.PRE_CONSENT]:"Pre-Consent",[c.lg.CMP_ERROR]:"CMP failure",[c.lg.NOT_APPLICABLE]:"Not applicable"},d={[c.lg.WITH_CONSENT]:"Asset was detected after the user gave consent",[c.lg.WITHOUT_CONSENT]:"The user explicitly opted out, but this asset still loaded. This is a serious compliance issue and may indicate that consent settings are not being enforced.",[c.lg.EXEMPT]:"Asset is valid regardless of consent",[c.lg.UNKNOWN]:"Did not find consent information for this asset. You may need to re-run the monitor.",[c.lg.PRE_CONSENT]:"Assets loaded before the user had a chance to give consent. This violates opt-in compliance requirements if your CMP is configured for explicit consent.",[c.lg.CMP_ERROR]:"The Consent Management Platform (CMP) was not detected when the service ran. It likely failed to load or wasn't available.",[c.lg.NOT_APPLICABLE]:"No privacy notices apply to this asset"},m=[c.lg.WITHOUT_CONSENT,c.lg.PRE_CONSENT,c.lg.CMP_ERROR];(s=i||(i={})).NAME="name",s.RESOURCE_TYPE="resource_type",s.SYSTEM="system",s.DATA_USES="data_uses",s.LOCATIONS="locations",s.DOMAIN="domain",s.PAGE="page",s.CONSENT_AGGREGATED="consent_aggregated",s.ACTIONS="actions",(o=a||(a={})).SYSTEM_NAME="system_name",o.TOTAL_UPDATES="total_updates",o.DATA_USE="data_use",o.LOCATIONS="locations",o.DOMAINS="domains",o.ACTIONS="actions",(n=u||(u={})).LOCATION="location",n.PAGE="page",n.STATUS="status";let g=["classified_low_confidence","classified_high_confidence"],y=new Map([["cookie","Cookie"],["browser_request","Browser request"],["image","Image"],["iframe","iFrame"],["javascript_tag","JavaScript tag"],["unlabeled","Unlabeled"],["in_review","In review"],["classifying","Classifying"],["removals","Removals"],["approved","Approved"]]),p=["cookie","image","javascript_tag","iframe","browser_request","unlabeled","classifying","in_review","approved","removals"]},71985:function(e,t,r){r.d(t,{G:function(){return i},w:function(){return o}});var s,o,n=r(65735);(s=o||(o={})).WEBSITE="website",s.DATASTORE="datastore",s.INFRASTRUCTURE="infrastructure";let i=e=>e===n.Rj.WEBSITE||e===n.Rj.TEST_WEBSITE?"website":e===n.Rj.OKTA?"infrastructure":"datastore"}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7488],{624:function(e,t,a){var r=a(24246),l=a(98227),n=a(27378);let i=e=>{let t=e.split("."),a=[];return t.forEach(e=>{let t=a.length>0?a[a.length-1]:null;t?a.push("".concat(t,".").concat(e)):a.push(e)}),a},s=(e,t)=>{let a=i(t).filter(e=>e!==t);return e.filter(e=>a.includes(e)).length>0},c=(e,t)=>!!(e===t||e.startsWith("".concat(t,"."))),o=(e,t,a)=>{let r=null!=a?a:[];return e.forEach(e=>{e.children&&o(e.children,t,r),c(e.value,t)&&r.push(e)}),r},d=e=>{let{node:t,isChecked:a,onChecked:n,isExpanded:i,onExpanded:s,isIndeterminate:c,isDisabled:o,children:d}=e,{value:u,label:h}=t,E=!!t.children&&t.children.length>0;return(0,r.jsxs)(l.xuv,{children:[(0,r.jsxs)(l.xuv,{display:"flex",justifyContent:"space-between",_hover:{backgroundColor:"gray.100",cursor:"pointer"},onClick:()=>s(t),minHeight:8,children:[(0,r.jsx)(l.XZJ,{colorScheme:"complimentary",value:u,isChecked:!c&&a,isIndeterminate:c,isDisabled:o,onChange:()=>n(t),mx:2,"data-testid":"checkbox-".concat(h),children:h}),E?(0,r.jsx)(l.wpx,{"data-testid":"expand-".concat(h),"aria-label":i?"collapse":"expand",icon:(0,r.jsx)(l.v4q,{boxSize:5}),type:"text",onClick:()=>s(t),className:i?"rotate-180":void 0}):null]}),d&&(0,r.jsx)(l.xuv,{ml:5,children:d})]})};t.ZP=e=>{let{nodes:t,selected:a,onSelected:u,...h}=e,[E,A]=(0,n.useState)([]),[f,p]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=Array.from(new Set([...a.map(e=>i(e)).reduce((e,t)=>e.concat(t),[]),...a.map(e=>o(t,e)).reduce((e,t)=>e.concat(t),[]).map(e=>e.value)]));p(e),A(e)},[a,t]);let _=e=>{let r=[],l=[];E.indexOf(e.value)>=0?(r=E.filter(t=>!c(t,e.value)),l=a.filter(t=>!c(t,e.value))):(r=[...E,...o(t,e.value).map(e=>e.value)],l=[...a,e.value]),A(r),u(l)},x=e=>{f.indexOf(e.value)>=0?p(f.filter(t=>!c(t,e.value))):p([...f,e.value])},T=e=>{if(e.children){let l=E.indexOf(e.value)>=0,i=f.indexOf(e.value)>=0,c=o(t,e.value),u=l&&e.children.length>0&&E.filter(t=>t.startsWith("".concat(e.value,"."))).length+1!==c.length,h=s(a,e.value);return(0,r.jsx)(d,{node:e,isChecked:l,onChecked:_,isExpanded:i,onExpanded:x,isDisabled:h,isIndeterminate:u,children:i?e.children.map(e=>(0,r.jsx)(n.Fragment,{children:T(e)},e.value)):void 0})}return null};return(0,r.jsx)(l.xuv,{...h,children:t.map(e=>(0,r.jsx)(l.xuv,{children:T(e)},e.value))})}},69828:function(e,t,a){a.d(t,{Y:function(){return i}});var r=a(24246),l=a(98227),n=a(70788);let i=[(0,r.jsx)(l.PJP.S9g,{},"layers"),(0,r.jsx)(l.PJP.ehp,{},"dataset"),(0,r.jsx)(l.PJP.iA_,{},"table"),(0,r.jsx)(l.PJP.$4y,{style:{transform:"rotate(-90deg)"}},"field")];t.Z=e=>{let{resourceUrn:t,parentLink:a,onPathClick:l=()=>{}}=e,s=[];if(t||s.push({title:"All activity"}),t){s.push({title:"All activity",href:a});let e=t.split(".");e.forEach((t,a)=>{0!==a&&s.push({title:t,icon:i[a-1],onClick:t=>{t.preventDefault(),l(e.slice(0,a+1).join("."))}})})}return(0,r.jsx)(n.m,{"data-testid":"results-breadcrumb",items:s})}},63927:function(e,t,a){a.d(t,{e:function(){return p},Z:function(){return _}});var r=a(24246),l=a(98227),n=a(34090),i=a(27378),s=a(16125),c=a(40324),o=a(5785),d=a(56026),u=a(46238),h=a(624),E=a(90673),A=e=>{let{dataCategories:t,checked:a,onChecked:n,buttonLabel:s}=e,c=(0,i.useMemo)(()=>(0,E.Cd)(t),[t]);return(0,r.jsxs)(l.v2r,{closeOnSelect:!0,children:[(0,r.jsx)(l.j2t,{as:l.wpx,icon:(0,r.jsx)(l.mCO,{}),className:"!bg-transparent",block:!0,"data-testid":"data-category-dropdown",children:null!=s?s:"Select data categories"}),(0,r.jsx)(l.qyq,{children:(0,r.jsxs)(l.xuv,{maxHeight:"50vh",minWidth:"300px",maxW:"full",overflowY:"scroll",children:[(0,r.jsxs)(l.xuv,{position:"sticky",top:0,zIndex:1,backgroundColor:"white",pt:1,children:[(0,r.jsx)(l.__7,{children:(0,r.jsxs)(l.xuv,{display:"flex",justifyContent:"space-between",px:2,mb:2,children:[(0,r.jsx)(l.sNh,{as:l.wpx,size:"small",className:"mr-2 !w-auto",onClick:()=>n([]),closeOnSelect:!1,"data-testid":"data-category-clear-btn",children:"Clear"}),(0,r.jsx)(l.xvT,{mr:2,children:"Data Categories"}),(0,r.jsx)(l.sNh,{as:l.wpx,size:"small",className:"!w-auto","data-testid":"data-category-done-btn",children:"Done"})]})}),(0,r.jsx)(l.RaW,{})]}),(0,r.jsx)(l.xuv,{px:2,"data-testid":"data-category-checkbox-tree",children:(0,r.jsx)(h.ZP,{nodes:c,selected:a,onSelected:n})})]})})]})},f=e=>{let{dataCategories:t,checked:a,onChecked:n,tooltip:i}=e,s=e=>{n(a.filter(t=>t!==e))},c=a.slice().sort((e,t)=>e.localeCompare(t));return(0,r.jsxs)(l.rjZ,{templateColumns:"1fr 3fr",children:[(0,r.jsx)(l.lXp,{children:"Data Categories"}),(0,r.jsxs)(l.vyj,{direction:"vertical",size:"small",children:[(0,r.jsxs)(l.xuv,{display:"flex",alignItems:"center",children:[(0,r.jsx)(l.xuv,{mr:"2",width:"100%",children:(0,r.jsx)(A,{dataCategories:t,checked:a,onChecked:n})}),(0,r.jsx)(u.b,{label:i})]}),(0,r.jsx)(l.vyj,{direction:"vertical",size:2,"data-testid":"selected-categories",children:c.map(e=>(0,r.jsx)(l.j8w,{closable:!0,onClose:()=>{s(e)},children:e},e))})]})]})};let p="edit-collection-or-field-form";var _=e=>{var t;let{values:a,onSubmit:u,dataType:h,showDataCategories:E=!0}=e,A={description:null!==(t=a.description)&&void 0!==t?t:"",data_categories:a.data_categories},_=(0,s.v9)(o.qb).filter(e=>e.active),[x,T]=(0,i.useState)(A.data_categories||[]),D="collection"===h?d.du.description.tooltip:d.QL.description.tooltip,S="collection"===h?d.du.data_categories.tooltip:d.QL.data_categories.tooltip;return(0,r.jsx)(n.J9,{initialValues:A,onSubmit:e=>{u({...e,data_categories:x})},children:(0,r.jsx)(n.l0,{id:p,children:(0,r.jsxs)(l.Kqy,{children:[(0,r.jsx)(c.j0,{name:"description",label:"Description",tooltip:D,"data-testid":"description-input"}),E&&(0,r.jsx)(f,{dataCategories:_,checked:x,onChecked:T,tooltip:S})]})})})}},56026:function(e,t,a){a.d(t,{QL:function(){return n},du:function(){return l},tz:function(){return r}});let r={name:{tooltip:"A UI-friendly label for the Dataset."},description:{tooltip:"A human-readable description of the Dataset."},data_categories:{tooltip:"Arrays of Data Category resources, identified by fides_key, that apply to all collections in the Dataset."}},l={description:{tooltip:"A human-readable description of the collection."},data_categories:{tooltip:"Arrays of Data Category resources, identified by fides_key, that apply to all fields in the collection."}},n={description:{tooltip:"A human-readable description of the field."},data_categories:{tooltip:"Arrays of Data Category resources, identified by fides_key, that apply to this field."}}},69435:function(e,t,a){a.d(t,{Fk:function(){return o},_n:function(){return s},jC:function(){return n},qe:function(){return c}});var r=a(99729),l=a.n(r);let n=(e,t,a)=>{let r=e.collections.map((e,r)=>r===a?t:e);return{...e,collections:r}},i=(e,t,a)=>{let r=e.fields.map((e,r)=>r===a?t:e);return{...e,fields:r}},s=(e,t,a,r)=>{let l=i(e.collections[a],t,r);return n(e,l,a)},c=(e,t)=>{let a=e.collections.filter((e,a)=>a!==t);return{...e,collections:a}},o=e=>{let{dataset:t,collectionName:a,subfields:r}=e,n="",i=t.collections.findIndex(e=>e.name===a);return n+="collections[".concat(i,"]"),r&&r.forEach(e=>{let a=l()(t,n).fields.findIndex(t=>t.name===e);n+=".fields[".concat(a,"]")}),n}},59001:function(e,t,a){a.d(t,{Ch:function(){return c},Lo:function(){return i},_g:function(){return o},ac:function(){return n},aq:function(){return d}});var r,l,n,i,s=a(65735);let c="root";(r=n||(n={})).DATA_CATEGORY="data_category",r.DATA_USE="data_use",r.DATA_SUBJECT="data_subject",r.SYSTEM_GROUP="system_group",(l=i||(i={})).DATA_CATEGORIES="Data categories",l.DATA_USES="Data uses",l.DATA_SUBJECTS="Data subjects",l.SYSTEM_GROUPS="System groups";let o=e=>{switch(e){case"data_category":return"Data categories";case"data_use":return"Data uses";case"data_subject":return"Data subjects";case"system_group":return"System groups";default:return e}},d=e=>{switch(e){case"data_category":return{UPDATE:s.Sh.DATA_CATEGORY_UPDATE,CREATE:s.Sh.DATA_CATEGORY_CREATE,DELETE:s.Sh.DATA_CATEGORY_DELETE,READ:s.Sh.DATA_CATEGORY_READ};case"data_use":return{UPDATE:s.Sh.DATA_USE_UPDATE,CREATE:s.Sh.DATA_USE_CREATE,DELETE:s.Sh.DATA_USE_DELETE,READ:s.Sh.DATA_USE_READ};case"data_subject":return{UPDATE:s.Sh.DATA_SUBJECT_UPDATE,CREATE:s.Sh.DATA_SUBJECT_CREATE,DELETE:s.Sh.DATA_SUBJECT_DELETE,READ:s.Sh.DATA_SUBJECT_READ};case"system_group":return{UPDATE:s.Sh.SYSTEM_GROUP_UPDATE,CREATE:s.Sh.SYSTEM_GROUP_CREATE,DELETE:s.Sh.SYSTEM_GROUP_DELETE,READ:s.Sh.SYSTEM_GROUP_READ};default:return{UPDATE:s.Sh.TAXONOMY_UPDATE,CREATE:s.Sh.TAXONOMY_CREATE,DELETE:s.Sh.TAXONOMY_DELETE,READ:s.Sh.TAXONOMY_READ}}}},90673:function(e,t,a){a.d(t,{Cd:function(){return n},Xl:function(){return i}});var r=a(65735),l=a(59001);let n=(e,t)=>{let a;if(null==t&&e.every(e=>void 0===e.parent_key))a=e;else{let r=null!=t?t:null;a=e.filter(e=>e.parent_key===r)}return a.map(t=>{var a,r;let l=t.fides_key;return{value:t.fides_key,label:t.name||t.fides_key,description:t.description,children:n(e,l),is_default:null!==(a=t.is_default)&&void 0!==a&&a,active:null!==(r=t.active)&&void 0!==r&&r}})},i=e=>{switch(e){case l.ac.DATA_CATEGORY:return r.P6.DATA_CATEGORY;case l.ac.DATA_SUBJECT:return r.P6.DATA_SUBJECT;case l.ac.DATA_USE:return r.P6.DATA_USE;default:return}}}}]);
|