ethyca-fides 2.63.3rc0__py2.py3-none-any.whl → 2.64.1b0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ethyca_fides-2.63.3rc0.dist-info → ethyca_fides-2.64.1b0.dist-info}/METADATA +2 -2
- {ethyca_fides-2.63.3rc0.dist-info → ethyca_fides-2.64.1b0.dist-info}/RECORD +249 -242
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/ba414a58ba90_create_manual_task_config_tables.py +121 -0
- fides/api/api/v1/endpoints/connection_endpoints.py +16 -3
- fides/api/api/v1/endpoints/oauth_endpoints.py +8 -2
- fides/api/db/base.py +4 -0
- fides/api/models/attachment.py +37 -23
- fides/api/models/manual_tasks/__init__.py +6 -0
- fides/api/models/manual_tasks/manual_task.py +11 -1
- fides/api/models/manual_tasks/manual_task_config.py +136 -0
- fides/api/models/manual_tasks/manual_task_log.py +13 -9
- fides/api/schemas/connection_configuration/connection_config.py +19 -4
- fides/api/schemas/manual_tasks/manual_task_config.py +311 -0
- fides/api/schemas/manual_tasks/manual_task_schemas.py +1 -1
- fides/api/schemas/manual_tasks/manual_task_status.py +1 -1
- fides/api/schemas/privacy_request.py +2 -0
- fides/api/service/connectors/query_configs/saas_query_config.py +15 -0
- fides/api/service/privacy_request/attachment_handling.py +132 -0
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +264 -46
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +33 -0
- fides/api/service/privacy_request/dsr_package/templates/collection_index.html +34 -9
- fides/api/service/privacy_request/dsr_package/templates/main.css +45 -2
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +12 -8
- fides/api/service/privacy_request/request_runner_service.py +258 -139
- fides/api/service/storage/gcs.py +15 -3
- fides/api/service/storage/s3.py +28 -14
- fides/api/service/storage/util.py +45 -7
- fides/api/tasks/csv_utils.py +170 -0
- fides/api/tasks/encryption_utils.py +42 -0
- fides/api/tasks/storage.py +85 -91
- fides/api/util/cache.py +6 -3
- fides/api/util/saas_util.py +1 -0
- fides/config/redis_settings.py +105 -44
- fides/service/manual_tasks/manual_task_config_service.py +370 -0
- fides/service/manual_tasks/manual_task_service.py +231 -87
- fides/service/manual_tasks/utils.py +185 -0
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1040-630c7f4284dc6f70.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1100-d43cb04522a6505c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1316-6cc72a45ebf7ff81.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-b4688ba5042ec687.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2599-6c4d22e75028d8b6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2921-aabf41bf3d7573f9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3450-bdaeb35442d810b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3505-a79256cd851dfab4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3513-8677ee280eaef0da.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3855-0dec3e7d9e886550.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-ffa16c2df7ef0ab6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3923-5d580fbb1dd6ae01.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-fceaae662cfca5a5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4060-71cd041e5a57ca5a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/409-037cfc3f096150f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4121-78a76e980acbd539.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4230-1cdb7ea1be370ed3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/431-f72599f01b98f07d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4481-f597a7cf03f8c9e1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5309-4511df9708d5a63c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5574-3cd33b3a6c937899.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-3fb4c7fc790a6d20.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6662-cb11881dcaabe5e2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6853-a4097260e402980e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6882-3cc73d407a088d7d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/69-6889d6674c95e7b5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-13a25cef3a8fdd76.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7553-a95939c32d54b5b7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/79-5670e31eb65d0a53.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/796-9a6b13c838e25538.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8433-adb1fcb29d82f1b7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9046-fdf53cc7e926a8c1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{905-8ab919e7b274ed50.js → 905-742074a074be1055.js} +2 -2
- fides/ui-build/static/admin/_next/static/chunks/9226-ba6587e46ec7659a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9392.81edc11e3a175275.js → 9392.25024e070026343d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.e60a53f1f5890847.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9767-e49b065d03ce4e80.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9951-f9ab5cac7e2c05ab.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/404-ac2f0844e5c4b4cd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-f70bffa5a7903c46.js → _app-8ec6e466f3373ac0.js} +10 -10
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-0a5f2310ce6b1059.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-00cb904825aad7e3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-587e21d14e0a5196.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-fa7305b88c1afd20.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-f140ec9d8e8a0f7a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-0edb7c92518e7d21.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-d8d926f0735a2546.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-5c949f2e3cef2398.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-130155cfb4a0bcc7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-1135ad8924d32c36.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-776855e370414beb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-21c23f75ff1135d9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-4d5ea70a77df1bb8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-18e3faf7963962e4.js → [resourceUrn]-c623d6f1a61c8ea9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-030ee304cbe5e530.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-cfac259a30641e68.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-7320524a47104798.js → [resourceUrn]-57bd5cdf784f059f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-7b5aec33da578745.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-c948f93c833d4358.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-333f53caab751428.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-27205f8457a1ecb0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-20a1043f6a06198f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-4c526db0c30c488a.js → [resourceUrn]-06edce289876dea1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-6f27dbb7c8edc69d.js → detection-faf326a6200637d0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-562d2b8ae90dd1f0.js → [resourceUrn]-64acf269256ee74f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-fe7f51502eda57c9.js → discovery-8c3e4be6d36da66d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-fb50de22f83edd4a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-41ab27c4195cfa93.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-6e2caba24b3e78c2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-904d43e31157aa55.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d4e31a1c4a58800e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-8f7d16bc5e9229c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-4a33dd0371dbaebc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-e88509346b2d2851.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-80b241bf6cddb72e.js → fides-js-docs-5d8fd1af75f19e2f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-1adb6bcb71701ac2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-fdc2964fa7d1d8fd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adc286ff254e7f41.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-9b4d1d61c7c97509.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-f8fd4795e260887c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-aa744ae8b61e5ff2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-3407158757fb3627.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-47e947c02ae90fd0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-24f9a44512ce8827.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-e567a69f8c37fb9a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-35a33f9c7def2220.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-780e18dde8e38099.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7a17dffa515e5560.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-91dd0039cc2b70bc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-b01cbbaac34dadbc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a15410de7f1d0f84.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-1a1aa83a3f88844c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c4e1b69fb5bab61a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-19737d4f21aadbee.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-9ccb295110feee20.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties-3a1037a2e036212a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-4cdbbb8cd1d8698e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-965cc21889b25e44.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-0e1c381d488a7ada.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-d0e350d2a2667883.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-7796fbf458f8f159.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-6f866bc799a5f67f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-0b44b2b224077dcd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-5d00e1155bd11178.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-d2cdbe770683e9df.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-811dadb489f23d7d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-24108f615ff5e1e7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-54f142bc3e4c95ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-6eb886e7b7e6785b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-7b71274334c559a4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-18534d2a79a3850b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-75d41fde668b9025.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dd43755b687c09a7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +1 -0
- fides/ui-build/static/admin/_next/static/css/c693338e3bc8dcc6.css +1 -0
- fides/ui-build/static/admin/_next/static/nRQ3pmK_d3F5PJE39rP2h/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/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/images/connector-logos/salesforce.svg +41 -0
- 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-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
- fides/ui-build/static/admin/lib/fides.js +2 -2
- 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/api/service/privacy_request/dsr_package/templates/item.html +0 -37
- fides/ui-build/static/admin/_next/static/chunks/1099-667e84655846e78c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1100-0b01f500b1eaf60d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-951f58ddd5d46081.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1904-964f8eb328dc2715.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2310-744354001d01f366.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-49af55ad7c631c93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3119-e36ae5071c8f27a5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3505-113f9c95d34b7aae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3513-5c2d412a84a78971.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-45cc725e241211f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3923-b4f701ada3ef0ee0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-7e800aed05537126.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-90a52a9afc655bfc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-66b0e00d5e7ae817.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4132-9b1731bfec6ee537.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4481-7f6710c928bb0cb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-2079138c8cc34f6c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5404-2694509cf5fa96da.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5487-2cbd8d2169eb2a65.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5683-37137111b3e769fb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6202-081545c7822d09af.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-459e054b2702c60e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/641-7e4eef3222cbda70.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6853-688df0b88fe65fd5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/69-00cba94689b9e740.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-4e313b4599b8763d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7553-08bc3d9f66695111.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-fc548561beed136f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-d6586308ed44334b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7980-736f9fd1e749ddd2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8032-74d94f7bd5b81c89.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8433-51870336908fb253.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8499-1fd392d0be9e8ee4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8702-d1c8296f9f6afc10.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9033-fdd87182c15b91e2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-851756440f79cd75.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9327-6a53461c9764b16f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9494-1ffb888b95289891.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.61cf5f6d6a083175.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-afd674014a1d1152.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/404-ec04f826f3dd79ea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-1bec086d567aacff.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-f68bf100e4e60e88.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-effde5cfe49de55f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-ec95ed8cb0712828.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-4cc195e15e0c3cc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-be8972c79fb39705.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-ccf96207de3b74ea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-b9823cc008372cee.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-373f5772ab41bc93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-b9beeee1bde5ca79.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-6ab3a5baafebd199.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-8562790ae07f17c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-42d4d2d6e0253671.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-9d1df6d890671b0c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-7eb08af333baaa8e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-bb57eed84f59a932.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-47eb34aef3e31ac6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-76cefefc53e84c7f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9d8e84a8b4bf568d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-f208fef5e72dafd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-db45aa864e9dda8a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-d5cfdebc74654337.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-618b89228f83435e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-12fc86f15a4c764e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-c23d18a9b56c2e3c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-e3b2d8e3980ab093.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-6e27257eccf65f01.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-bbac1f624424282d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-84eb56f5a07bdf4f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-773182b5e35d0045.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-eb28c927da5bd653.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-781808bca01f8048.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-b51bee8680d66b20.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-1de479533f733fbd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-7dc295b3ed3d2224.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-f64dac3392f5ded7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-eb020bfac4bee532.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-0bd62e28b539e114.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-936877004113c2a6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-6416f01524482af9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-3f4e1313d1f2969b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-1db7a54437db7db0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-64236fd0141414fd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-8cab04871908cfeb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-150d40428245ee0c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b6c876dceb16ad1b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-20cdb2c8a03deae1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-54bcc875592d1fb9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-644dc669b508a79a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties-9a88220d03e7e02f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-70dc1081df37ea69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-3c71b4dbcb6fd6c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-7cb16e0000dd16c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-a18d8f12ee8dcf5d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-dc220e116ad5c09e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-55ddc5f25b86f28e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-5ca7decded228bc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-a6fafa1be2834c40.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-e633750d2b45ddd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-3948686cbd372969.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-04ece499c22d23f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-7752305084280cca.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9e5f9066be6f218d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-86de9e6d72098e45.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-cac52e6c3abf6a15.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-60d5930b6855679b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-b0f4c34752d32c73.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-7dee83dd6d9292aa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-8457bad7859c44f0.js +0 -1
- fides/ui-build/static/admin/_next/static/css/1fdf5c593349dbc6.css +0 -1
- fides/ui-build/static/admin/_next/static/f_8LkSZkhtDM14f8gbC0b/_buildManifest.js +0 -1
- {ethyca_fides-2.63.3rc0.dist-info → ethyca_fides-2.64.1b0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.63.3rc0.dist-info → ethyca_fides-2.64.1b0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.63.3rc0.dist-info → ethyca_fides-2.64.1b0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.63.3rc0.dist-info → ethyca_fides-2.64.1b0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{f_8LkSZkhtDM14f8gbC0b → nRQ3pmK_d3F5PJE39rP2h}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Optional
|
1
|
+
from typing import Any, Optional, cast
|
2
2
|
|
3
3
|
from loguru import logger
|
4
4
|
from sqlalchemy import select
|
@@ -6,18 +6,22 @@ from sqlalchemy.orm import Session
|
|
6
6
|
|
7
7
|
from fides.api.models.fides_user import FidesUser
|
8
8
|
from fides.api.models.manual_tasks.manual_task import ManualTask, ManualTaskReference
|
9
|
-
from fides.api.models.manual_tasks.
|
9
|
+
from fides.api.models.manual_tasks.manual_task_config import ManualTaskConfig
|
10
10
|
from fides.api.schemas.manual_tasks.manual_task_schemas import (
|
11
|
-
ManualTaskLogStatus,
|
12
11
|
ManualTaskParentEntityType,
|
13
12
|
ManualTaskReferenceType,
|
14
13
|
ManualTaskType,
|
15
14
|
)
|
15
|
+
from fides.service.manual_tasks.manual_task_config_service import (
|
16
|
+
ManualTaskConfigService,
|
17
|
+
)
|
18
|
+
from fides.service.manual_tasks.utils import with_task_logging
|
16
19
|
|
17
20
|
|
18
21
|
class ManualTaskService:
|
19
22
|
def __init__(self, db: Session):
|
20
23
|
self.db = db
|
24
|
+
self.config_service = ManualTaskConfigService(db)
|
21
25
|
|
22
26
|
def get_task(
|
23
27
|
self,
|
@@ -25,9 +29,12 @@ class ManualTaskService:
|
|
25
29
|
parent_entity_id: Optional[str] = None,
|
26
30
|
parent_entity_type: Optional[ManualTaskParentEntityType] = None,
|
27
31
|
task_type: Optional[ManualTaskType] = None,
|
28
|
-
) ->
|
32
|
+
) -> ManualTask:
|
29
33
|
"""Get the manual task using provided filters.
|
30
34
|
|
35
|
+
This is a flexible lookup method that can find tasks based on various filters.
|
36
|
+
It's normal for this method to return None if no task matches the given filters.
|
37
|
+
|
31
38
|
Args:
|
32
39
|
task_id: The task ID
|
33
40
|
parent_entity_id: The parent entity ID
|
@@ -35,89 +42,203 @@ class ManualTaskService:
|
|
35
42
|
task_type: The task type
|
36
43
|
|
37
44
|
Returns:
|
38
|
-
|
45
|
+
ManualTask: The matching task
|
39
46
|
"""
|
40
47
|
if not any([task_id, parent_entity_id, parent_entity_type, task_type]):
|
41
|
-
logger.
|
42
|
-
|
48
|
+
logger.debug("No filters provided to get_task")
|
49
|
+
raise ValueError("No filters provided to get_task")
|
43
50
|
|
44
|
-
|
51
|
+
# Build filter conditions and a human-readable description
|
52
|
+
filters = []
|
53
|
+
filter_desc = []
|
45
54
|
if task_id:
|
46
|
-
|
55
|
+
filters.append(ManualTask.id == task_id)
|
56
|
+
filter_desc.append(f"task_id={task_id}")
|
47
57
|
if parent_entity_id:
|
48
|
-
|
58
|
+
filters.append(ManualTask.parent_entity_id == parent_entity_id)
|
59
|
+
filter_desc.append(f"parent_entity_id={parent_entity_id}")
|
49
60
|
if parent_entity_type:
|
50
|
-
|
61
|
+
filters.append(ManualTask.parent_entity_type == parent_entity_type)
|
62
|
+
filter_desc.append(f"parent_entity_type={parent_entity_type}")
|
51
63
|
if task_type:
|
52
|
-
|
53
|
-
|
64
|
+
filters.append(ManualTask.task_type == task_type)
|
65
|
+
filter_desc.append(f"task_type={task_type}")
|
54
66
|
|
55
|
-
|
56
|
-
|
57
|
-
|
67
|
+
# Apply all filters at once
|
68
|
+
stmt = select(ManualTask) # type: ignore[arg-type]
|
69
|
+
if filters:
|
70
|
+
stmt = stmt.where(*filters)
|
71
|
+
|
72
|
+
task = self.db.execute(stmt).scalar_one_or_none()
|
73
|
+
if task is None:
|
74
|
+
logger.debug(f"No task found with filters: {filter_desc}")
|
75
|
+
raise ValueError(f"No task found with filters: {filter_desc}")
|
76
|
+
return task
|
77
|
+
|
78
|
+
@with_task_logging("Provided user IDs verified")
|
79
|
+
def _non_existent_users(
|
80
|
+
self, non_existent_user_ids: list[str], *, task_id: str
|
58
81
|
) -> None:
|
59
|
-
"""
|
82
|
+
"""This is a helper function to raise an error if users do not exist.
|
83
|
+
If non_existent_user_ids is empty, this function will instead create
|
84
|
+
a success log entry.
|
60
85
|
|
61
86
|
Args:
|
62
|
-
|
63
|
-
|
64
|
-
|
87
|
+
non_existent_user_ids: List of non-existent user IDs
|
88
|
+
task_id: The task ID
|
89
|
+
|
90
|
+
Returns:
|
91
|
+
None
|
65
92
|
"""
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
# Create new user assignment
|
71
|
-
for user_id in user_ids:
|
72
|
-
# if user is already assigned, skip
|
73
|
-
if user_id in task.assigned_users:
|
74
|
-
continue
|
75
|
-
# verify user exists
|
76
|
-
user = db.query(FidesUser).filter_by(id=user_id).first()
|
77
|
-
if not user:
|
78
|
-
ManualTaskLog.create_error_log(
|
79
|
-
db=db,
|
80
|
-
task_id=task.id,
|
81
|
-
message=f"Failed to add user {user_id} to task {task.id}: user does not exist",
|
82
|
-
details={"user_id": user_id},
|
83
|
-
)
|
84
|
-
continue
|
85
|
-
|
86
|
-
ManualTaskReference.create(
|
87
|
-
db=db,
|
88
|
-
data={
|
89
|
-
"task_id": task.id,
|
90
|
-
"reference_id": user_id,
|
91
|
-
"reference_type": ManualTaskReferenceType.assigned_user,
|
92
|
-
},
|
93
|
+
if len(non_existent_user_ids) > 0:
|
94
|
+
raise ValueError(
|
95
|
+
f"User(s) {sorted(list(non_existent_user_ids))} do not exist"
|
93
96
|
)
|
94
97
|
|
95
|
-
|
96
|
-
|
97
|
-
db=db,
|
98
|
-
task_id=task.id,
|
99
|
-
status=ManualTaskLogStatus.updated,
|
100
|
-
message=f"User {user_id} assigned to task",
|
101
|
-
details={"assigned_user_id": user_id},
|
102
|
-
)
|
98
|
+
def _create_log_data(self, task_id: str, details: dict[str, Any]) -> dict[str, Any]:
|
99
|
+
"""Create standard log data structure.
|
103
100
|
|
104
|
-
|
105
|
-
|
101
|
+
Args:
|
102
|
+
task_id: The task ID
|
103
|
+
details: The log details
|
104
|
+
|
105
|
+
Returns:
|
106
|
+
dict: The log data structure
|
107
|
+
"""
|
108
|
+
return {
|
109
|
+
"task_id": task_id,
|
110
|
+
"details": details,
|
111
|
+
}
|
112
|
+
|
113
|
+
def _handle_user_errors(
|
114
|
+
self,
|
115
|
+
non_existent_users: list[str],
|
116
|
+
task_id: str,
|
117
|
+
details: dict[str, Any],
|
118
|
+
success_count: int,
|
119
|
+
error_key: str,
|
106
120
|
) -> None:
|
107
|
-
"""
|
121
|
+
"""Handle errors for non-existent users.
|
108
122
|
|
109
123
|
Args:
|
110
|
-
|
111
|
-
|
112
|
-
|
124
|
+
non_existent_users: List of non-existent user IDs
|
125
|
+
task_id: The task ID
|
126
|
+
details: The log details to update
|
127
|
+
success_count: Number of successful operations
|
128
|
+
error_key: Key to use for error details
|
129
|
+
|
130
|
+
Raises:
|
131
|
+
ValueError: If no successful operations and users don't exist
|
132
|
+
"""
|
133
|
+
try:
|
134
|
+
self._non_existent_users(non_existent_users, task_id=task_id)
|
135
|
+
except ValueError as e:
|
136
|
+
details[error_key] = sorted(non_existent_users)
|
137
|
+
if success_count == 0:
|
138
|
+
raise e
|
139
|
+
|
140
|
+
def _get_existing_users(self, user_ids: list[str]) -> set[str]:
|
141
|
+
"""Get set of existing user IDs from the provided list.
|
142
|
+
|
143
|
+
Args:
|
144
|
+
user_ids: List of user IDs to check
|
145
|
+
|
146
|
+
Returns:
|
147
|
+
set: Set of existing user IDs
|
113
148
|
"""
|
114
|
-
|
115
|
-
|
116
|
-
|
149
|
+
return set(
|
150
|
+
user.id
|
151
|
+
for user in self.db.query(FidesUser)
|
152
|
+
.filter(FidesUser.id.in_(user_ids))
|
153
|
+
.all()
|
154
|
+
)
|
117
155
|
|
118
|
-
|
119
|
-
|
120
|
-
|
156
|
+
def _handle_user_operation(
|
157
|
+
self,
|
158
|
+
task_id: str,
|
159
|
+
user_ids: list[str],
|
160
|
+
operation_type: str,
|
161
|
+
current_users: Optional[set[str]] = None,
|
162
|
+
) -> tuple[set[str], dict[str, Any]]:
|
163
|
+
"""Handle user assignment/unassignment operations.
|
164
|
+
|
165
|
+
Args:
|
166
|
+
task_id: The task ID
|
167
|
+
user_ids: List of user IDs to process
|
168
|
+
operation_type: Type of operation ('assign' or 'unassign')
|
169
|
+
current_users: Optional set of current users
|
170
|
+
|
171
|
+
Returns:
|
172
|
+
tuple: (processed_users, log_data)
|
173
|
+
"""
|
174
|
+
if not (user_ids := list(set(user_ids))):
|
175
|
+
raise ValueError(f"User ID is required for {operation_type}ment")
|
176
|
+
|
177
|
+
existing_users = set(
|
178
|
+
u.id
|
179
|
+
for u in self.db.query(FidesUser).filter(FidesUser.id.in_(user_ids)).all()
|
180
|
+
)
|
181
|
+
processed_users = (
|
182
|
+
existing_users - (current_users or set())
|
183
|
+
if operation_type == "assign"
|
184
|
+
else existing_users
|
185
|
+
)
|
186
|
+
details = {f"{operation_type}ed_users": sorted(list(processed_users))}
|
187
|
+
|
188
|
+
if non_existing := list(set(user_ids) - existing_users):
|
189
|
+
try:
|
190
|
+
self._non_existent_users(non_existing, task_id=task_id)
|
191
|
+
except ValueError as e:
|
192
|
+
details[f"user_ids_not_{operation_type}ed"] = sorted(non_existing)
|
193
|
+
if not processed_users:
|
194
|
+
raise e
|
195
|
+
|
196
|
+
return processed_users, {"task_id": task_id, "details": details}
|
197
|
+
|
198
|
+
@with_task_logging("Assign users to task")
|
199
|
+
def assign_users_to_task(
|
200
|
+
self, task_id: str, user_ids: list[str]
|
201
|
+
) -> tuple[ManualTask, dict[str, Any]]:
|
202
|
+
"""Assign users to a task.
|
203
|
+
|
204
|
+
Args:
|
205
|
+
task_id: The task ID
|
206
|
+
user_ids: List of user IDs to assign
|
207
|
+
|
208
|
+
Returns:
|
209
|
+
Tuple containing the task and log data, the log data is
|
210
|
+
captured by the with_task_logging decorator. and the task is
|
211
|
+
returned to the caller.
|
212
|
+
"""
|
213
|
+
task = self.get_task(task_id=task_id)
|
214
|
+
users_to_assign, log_data = self._handle_user_operation(
|
215
|
+
task_id, user_ids, "assign", set(task.assigned_users)
|
216
|
+
)
|
217
|
+
|
218
|
+
if users_to_assign:
|
219
|
+
self.db.bulk_insert_mappings(
|
220
|
+
ManualTaskReference,
|
221
|
+
[
|
222
|
+
{
|
223
|
+
"task_id": task.id,
|
224
|
+
"reference_id": user_id,
|
225
|
+
"reference_type": ManualTaskReferenceType.assigned_user,
|
226
|
+
}
|
227
|
+
for user_id in users_to_assign
|
228
|
+
],
|
229
|
+
)
|
230
|
+
self.db.flush()
|
231
|
+
self.db.refresh(task)
|
232
|
+
|
233
|
+
return task, log_data
|
234
|
+
|
235
|
+
@with_task_logging("Unassign users from task")
|
236
|
+
def unassign_users_from_task(
|
237
|
+
self, task_id: str, user_ids: list[str]
|
238
|
+
) -> tuple[ManualTask, dict[str, Any]]:
|
239
|
+
task = self.get_task(task_id=task_id)
|
240
|
+
refs_to_unassign = (
|
241
|
+
self.db.query(ManualTaskReference)
|
121
242
|
.filter(
|
122
243
|
ManualTaskReference.task_id == task.id,
|
123
244
|
ManualTaskReference.reference_type
|
@@ -127,24 +248,47 @@ class ManualTaskService:
|
|
127
248
|
.all()
|
128
249
|
)
|
129
250
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
status=ManualTaskLogStatus.updated,
|
137
|
-
message=f"User {ref.reference_id} unassigned from task",
|
138
|
-
details={"unassigned_user_id": ref.reference_id},
|
139
|
-
)
|
251
|
+
if refs_to_unassign:
|
252
|
+
self.db.query(ManualTaskReference).filter(
|
253
|
+
ManualTaskReference.id.in_([ref.id for ref in refs_to_unassign])
|
254
|
+
).delete(synchronize_session=False)
|
255
|
+
self.db.flush()
|
256
|
+
self.db.refresh(task)
|
140
257
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
]
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
258
|
+
_, log_data = self._handle_user_operation(task_id, user_ids, "unassign")
|
259
|
+
return task, log_data
|
260
|
+
|
261
|
+
def create_config(
|
262
|
+
self, config_type: str, fields: list[dict], task_id: str
|
263
|
+
) -> ManualTaskConfig:
|
264
|
+
"""Create a new config for a task.
|
265
|
+
|
266
|
+
Args:
|
267
|
+
config_type: The config type
|
268
|
+
fields: The fields for the config
|
269
|
+
task_id: The task ID
|
270
|
+
|
271
|
+
Returns:
|
272
|
+
ManualTaskConfig: The new config
|
273
|
+
"""
|
274
|
+
task = self.get_task(task_id=task_id)
|
275
|
+
config = self.config_service.create_new_version(task, config_type, fields)
|
276
|
+
return cast(ManualTaskConfig, config)
|
277
|
+
|
278
|
+
def delete_config(self, config: ManualTaskConfig, task_id: str) -> None:
|
279
|
+
"""Delete this configuration.
|
280
|
+
Args:
|
281
|
+
config: The config to delete
|
282
|
+
task_id: The task ID
|
283
|
+
Raises:
|
284
|
+
ValueError: If there are active instances using this configuration
|
285
|
+
ValueError: If the task does not exist
|
286
|
+
|
287
|
+
Returns:
|
288
|
+
dict[str, Any]: The log details - intercepted by the `with_task_logging` decorator.
|
289
|
+
"""
|
290
|
+
task = self.get_task(task_id=task_id)
|
291
|
+
|
292
|
+
# Delete the configuration
|
293
|
+
config_id = config.id
|
294
|
+
self.config_service.delete_config(task, config_id)
|
@@ -0,0 +1,185 @@
|
|
1
|
+
from functools import wraps
|
2
|
+
from typing import Any, Callable, Optional, TypeVar
|
3
|
+
|
4
|
+
from loguru import logger
|
5
|
+
from pydantic import ValidationError
|
6
|
+
|
7
|
+
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
8
|
+
from fides.api.schemas.manual_tasks.manual_task_config import ManualTaskFieldBase
|
9
|
+
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
|
10
|
+
from fides.api.schemas.manual_tasks.manual_task_status import StatusType
|
11
|
+
|
12
|
+
T = TypeVar("T")
|
13
|
+
|
14
|
+
|
15
|
+
def validate_fields(fields: list[dict[str, Any]], is_submission: bool = False) -> None:
|
16
|
+
"""Validate field data against the appropriate Pydantic model.
|
17
|
+
|
18
|
+
Args:
|
19
|
+
fields: List of field data to validate
|
20
|
+
is_submission: Whether the fields are for a submission (True) or configuration (False)
|
21
|
+
|
22
|
+
Raises:
|
23
|
+
ValueError: If the field data is invalid
|
24
|
+
"""
|
25
|
+
# Check for duplicate field keys
|
26
|
+
if len({str(field.get("field_key")) for field in fields}) != len(fields):
|
27
|
+
raise ValueError(
|
28
|
+
"Duplicate field keys found in field updates, field keys must be unique."
|
29
|
+
)
|
30
|
+
|
31
|
+
for field in fields:
|
32
|
+
if not field.get("field_key"):
|
33
|
+
raise ValueError("Invalid field data: field_key is required")
|
34
|
+
if not field.get("field_type"):
|
35
|
+
raise ValueError("Invalid field data: field_type is required")
|
36
|
+
if is_submission and "value" not in field:
|
37
|
+
raise ValueError("Invalid field data: value is required for submissions")
|
38
|
+
if not is_submission:
|
39
|
+
try:
|
40
|
+
field_model = ManualTaskFieldBase.get_field_model_for_type(
|
41
|
+
field["field_type"]
|
42
|
+
)
|
43
|
+
field_model.model_validate(field)
|
44
|
+
except ValidationError as e:
|
45
|
+
raise ValueError(f"Invalid field data: {str(e)}")
|
46
|
+
|
47
|
+
|
48
|
+
class TaskLogger:
|
49
|
+
"""Class-based decorator for logging operation success/failure in service methods.
|
50
|
+
Args:
|
51
|
+
operation_name: The name of the operation to log
|
52
|
+
success_status: The status to log for successful operations
|
53
|
+
|
54
|
+
The decorated function can return either:
|
55
|
+
- A tuple of (return_value, log_details)
|
56
|
+
- Just the return value (in which case log details will be extracted from it)
|
57
|
+
"""
|
58
|
+
|
59
|
+
def __init__(
|
60
|
+
self,
|
61
|
+
operation_name: str,
|
62
|
+
success_status: ManualTaskLogStatus = ManualTaskLogStatus.complete,
|
63
|
+
) -> None:
|
64
|
+
self.operation_name = operation_name
|
65
|
+
self.success_status = success_status
|
66
|
+
|
67
|
+
def __call__(self, func: Callable[..., T]) -> Callable[..., T]:
|
68
|
+
@wraps(func)
|
69
|
+
def wrapped(service_self: Any, *args: Any, **kwargs: Any) -> T:
|
70
|
+
try:
|
71
|
+
result = func(service_self, *args, **kwargs)
|
72
|
+
return_value, log_data = (
|
73
|
+
result
|
74
|
+
if isinstance(result, tuple) and len(result) == 2
|
75
|
+
else (result, {})
|
76
|
+
)
|
77
|
+
if hasattr(service_self, "db") and (
|
78
|
+
task_id := self._get_task_id(return_value, kwargs)
|
79
|
+
):
|
80
|
+
self._log_success(
|
81
|
+
service_self.db, task_id, return_value, log_data, kwargs
|
82
|
+
)
|
83
|
+
return return_value
|
84
|
+
except Exception as e:
|
85
|
+
self._log_error(service_self, e, kwargs)
|
86
|
+
raise
|
87
|
+
|
88
|
+
return wrapped
|
89
|
+
|
90
|
+
def _get_task_id(self, result: Any, kwargs: dict) -> Optional[str]:
|
91
|
+
"""Extract task_id from result or kwargs."""
|
92
|
+
return getattr(result, "task_id", None) or kwargs.get("task_id")
|
93
|
+
|
94
|
+
def _get_log_data(self, result: Any, kwargs: dict) -> dict:
|
95
|
+
"""Create log data from result and kwargs."""
|
96
|
+
log_data = {}
|
97
|
+
for field in ["task_id", "config_id", "instance_id"]:
|
98
|
+
if value := getattr(result, field, None) or kwargs.get(field):
|
99
|
+
log_data[field] = value
|
100
|
+
log_data["details"] = kwargs.get("details", {})
|
101
|
+
return log_data
|
102
|
+
|
103
|
+
def _log_success(
|
104
|
+
self, db: Any, task_id: str, result: Any, log_data: dict, kwargs: dict
|
105
|
+
) -> None:
|
106
|
+
"""Log successful operation."""
|
107
|
+
ManualTaskLog.create_log(
|
108
|
+
db=db,
|
109
|
+
**self._get_log_data(result, kwargs | log_data),
|
110
|
+
status=self.success_status,
|
111
|
+
message=self.operation_name,
|
112
|
+
)
|
113
|
+
|
114
|
+
def _log_error(self, service_self: Any, error: Exception, kwargs: dict) -> None:
|
115
|
+
"""Log operation error."""
|
116
|
+
logger.error(f"Error in {self.operation_name}: {str(error)}")
|
117
|
+
if hasattr(service_self, "db") and (task_id := self._get_task_id({}, kwargs)):
|
118
|
+
ManualTaskLog.create_log(
|
119
|
+
db=service_self.db,
|
120
|
+
task_id=task_id,
|
121
|
+
**{
|
122
|
+
k: v
|
123
|
+
for k, v in self._get_log_data({}, kwargs).items()
|
124
|
+
if k != "task_id"
|
125
|
+
},
|
126
|
+
status=ManualTaskLogStatus.error,
|
127
|
+
message=f"Error in {self.operation_name}: {str(error)}",
|
128
|
+
)
|
129
|
+
|
130
|
+
@staticmethod
|
131
|
+
def log_status_change(
|
132
|
+
db: Any,
|
133
|
+
task_id: str,
|
134
|
+
config_id: Optional[str] = None,
|
135
|
+
instance_id: Optional[str] = None,
|
136
|
+
previous_status: Optional[StatusType] = None,
|
137
|
+
new_status: Optional[StatusType] = None,
|
138
|
+
user_id: Optional[str] = None,
|
139
|
+
) -> None:
|
140
|
+
"""Log a status change event."""
|
141
|
+
ManualTaskLog.create_log(
|
142
|
+
db=db,
|
143
|
+
task_id=task_id,
|
144
|
+
config_id=config_id,
|
145
|
+
instance_id=instance_id,
|
146
|
+
status=ManualTaskLogStatus.in_progress,
|
147
|
+
message=f"Task instance status transitioning from {previous_status} to {new_status}",
|
148
|
+
details={
|
149
|
+
"previous_status": previous_status,
|
150
|
+
"new_status": new_status,
|
151
|
+
"user_id": user_id,
|
152
|
+
},
|
153
|
+
)
|
154
|
+
|
155
|
+
@staticmethod
|
156
|
+
def log_create(
|
157
|
+
db: Any,
|
158
|
+
task_id: str,
|
159
|
+
entity_type: str,
|
160
|
+
entity_id: str,
|
161
|
+
details: Optional[dict] = None,
|
162
|
+
user_id: Optional[str] = None,
|
163
|
+
status: ManualTaskLogStatus = ManualTaskLogStatus.created,
|
164
|
+
) -> None:
|
165
|
+
"""Log a creation event."""
|
166
|
+
id_fields = {
|
167
|
+
"task": {"task_id": task_id},
|
168
|
+
"config": {"task_id": task_id, "config_id": entity_id},
|
169
|
+
"instance": {"task_id": task_id, "instance_id": entity_id},
|
170
|
+
"submission": {"task_id": task_id, "instance_id": entity_id},
|
171
|
+
}
|
172
|
+
if entity_type not in id_fields:
|
173
|
+
raise ValueError(f"Invalid entity type: {entity_type}")
|
174
|
+
|
175
|
+
ManualTaskLog.create_log(
|
176
|
+
db=db,
|
177
|
+
**id_fields[entity_type],
|
178
|
+
status=status,
|
179
|
+
message=f"Created new {entity_type}",
|
180
|
+
details=(details or {}) | ({"user_id": user_id} if user_id else {}),
|
181
|
+
)
|
182
|
+
|
183
|
+
|
184
|
+
# Alias the class to maintain the original decorator name
|
185
|
+
with_task_logging = TaskLogger
|
@@ -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/c693338e3bc8dcc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/c693338e3bc8dcc6.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-0a61b5bd21a41fe6.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-8ec6e466f3373ac0.js" defer=""></script><script src="/_next/static/chunks/pages/404-ac2f0844e5c4b4cd.js" defer=""></script><script src="/_next/static/nRQ3pmK_d3F5PJE39rP2h/_buildManifest.js" defer=""></script><script src="/_next/static/nRQ3pmK_d3F5PJE39rP2h/_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":"nRQ3pmK_d3F5PJE39rP2h","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -0,0 +1 @@
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1040],{66726:function(e,a,n){var i=n(11611),t=n(82846),s=n(91936),r=Math.max,o=Math.min;e.exports=function(e,a,n){var _,l,F,d,c,u,m=0,S=!1,h=!1,C=!0;if("function"!=typeof e)throw TypeError("Expected a function");function g(a){var n=_,i=l;return _=l=void 0,m=a,d=e.apply(i,n)}function y(e){var n=e-u,i=e-m;return void 0===u||n>=a||n<0||h&&i>=F}function p(){var e,n,i,s=t();if(y(s))return f(s);c=setTimeout(p,(e=s-u,n=s-m,i=a-e,h?o(i,F-n):i))}function f(e){return(c=void 0,C&&_)?g(e):(_=l=void 0,d)}function b(){var e,n=t(),i=y(n);if(_=arguments,l=this,u=n,i){if(void 0===c)return m=e=u,c=setTimeout(p,a),S?g(e):d;if(h)return clearTimeout(c),c=setTimeout(p,a),g(u)}return void 0===c&&(c=setTimeout(p,a)),d}return a=s(a)||0,i(n)&&(S=!!n.leading,F=(h="maxWait"in n)?r(s(n.maxWait)||0,a):F,C="trailing"in n?!!n.trailing:C),b.cancel=function(){void 0!==c&&clearTimeout(c),m=0,_=u=l=c=void 0},b.flush=function(){return void 0===c?d:f(t())},b}},82846:function(e,a,n){var i=n(77400);e.exports=function(){return i.Date.now()}},7617:function(e,a,n){"use strict";n.d(a,{q:function(){return s}});var i=n(24246),t=n(62051);let s=e=>{let{label:a,isDisabled:n,...s}=e;return(0,i.jsx)(t.OK9,{"data-testid":"tab-".concat(a),_selected:{fontWeight:"600",color:"complimentary.500",borderColor:"complimentary.500"},fontSize:s.fontSize,fontWeight:"500",color:"gray.500",isDisabled:n||!1,children:a})};a.Z=e=>{let{data:a,border:n="partial",...r}=e;return(0,i.jsxs)(t.mQc,{colorScheme:"complimentary",...r,children:[(0,i.jsx)(t.tdY,{width:"partial"===n?"max-content":void 0,children:a.map(e=>(0,i.jsx)(s,{label:e.label,isDisabled:e.isDisabled,fontSize:r.fontSize},e.label))}),(0,i.jsx)(t.nPR,{children:a.map(e=>(0,i.jsx)(t.x45,{px:0,"data-testid":"tab-panel-".concat(e.label),children:e.content},e.label))})]})}},30952:function(e,a,n){"use strict";n.d(a,{f:function(){return _}});var i=n(24246),t=n(66726),s=n.n(t),r=n(27378),o=n(26917);let _=e=>{let{value:a,onChange:n,placeholder:t,..._}=e,[l,F]=(0,r.useState)(a),d=s()(n,500),c=(0,r.useCallback)(e=>{F(e),d(e)},[]);return(0,i.jsx)(o.Z,{value:l,onChange:c,onClear:()=>{F(""),n("")},placeholder:t,..._})}},26089:function(e,a,n){"use strict";var i=n(24246),t=n(62051),s=n(99830),r=n.n(s);a.Z=e=>{let{onClick:a,children:n}=e;return(0,i.jsx)(t.wpx,{onClick:a,type:"link",role:"link",size:"small",className:r().toastLink,children:n})}},29850:function(e,a,n){"use strict";n.d(a,{R:function(){return F}});var i=n(24246),t=n(62051),s=n(27378),r=n(65450);let o=e=>{let{children:a,className:n,style:s,...r}=e;return(0,i.jsx)(t.wpx,{...r,type:"text",className:"w-full justify-start ".concat(n),style:{fontWeight:600,padding:"var(--ant-select-option-padding)",backgroundColor:"var(--ant-select-option-selected-bg)",...s},children:a})};var _=n(16394);let l=(e,a)=>(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o,{onClick:a,"data-testid":"add-new-system",id:"add-new-system",children:"Add new system +"}),e]}),F=e=>{var a;let{onAddSystem:n,...o}=e,[F,d]=(0,s.useState)(),{data:c,isFetching:u}=(0,r.xF)({page:1,size:25,search:F||void 0}),m=null==c?void 0:null===(a=c.items)||void 0===a?void 0:a.map(e=>({value:e.fides_key,label:e.name})),S=(0,s.useCallback)(e=>{(null==e?void 0:e.length)>1&&d(e),(null==e?void 0:e.length)===0&&d(void 0)},[d]),h=(0,s.useMemo)(()=>(0,_.Ds)(S,300),[S]);return(0,i.jsx)(t.WPr,{placeholder:"Search...","aria-label":"Search for a system to select",dropdownStyle:{minWidth:"500px"},dropdownRender:n?e=>l(e,n):void 0,"data-testid":"system-select",...o,filterOption:!1,options:m,onSearch:h,loading:o.loading||u})}},8411:function(e,a,n){"use strict";n.d(a,{NA:function(){return s},Z8:function(){return t}});var i=n(46420);let t={[i._F.ER]:"Eritrea",[i._F.DJ]:"Djibouti",[i._F.MR]:"Mauritania",[i._F.NA]:"Namibia",[i._F.GH]:"Ghana",[i._F.SS]:"South Sudan",[i._F.SC]:"Seychelles",[i._F.IO]:"British Indian Ocean Territory",[i._F.GQ]:"Equatorial Guinea",[i._F.AO]:"Angola",[i._F.CG]:"Republic of the Congo",[i._F.BW]:"Botswana",[i._F.BI]:"Burundi",[i._F.DZ]:"Algeria",[i._F.TD]:"Chad",[i._F.NG]:"Nigeria",[i._F.TZ]:"Tanzania",[i._F.EH]:"Western Sahara",[i._F.SN]:"Senegal",[i._F.LR]:"Liberia",[i._F.ZA]:"South Africa",[i._F.CV]:"Cape Verde",[i._F.GM]:"Gambia",[i._F.SD]:"Sudan",[i._F.KM]:"Comoros",[i._F.SZ]:"Eswatini",[i._F.UG]:"Uganda",[i._F.MG]:"Madagascar",[i._F.RW]:"Rwanda",[i._F.CD]:"DR Congo",[i._F.CM]:"Cameroon",[i._F.SH]:"Saint Helena, Ascension and Tristan da Cunha",[i._F.TG]:"Togo",[i._F.MU]:"Mauritius",[i._F.NE]:"Niger",[i._F.BJ]:"Benin",[i._F.EG]:"Egypt",[i._F.LS]:"Lesotho",[i._F.ET]:"Ethiopia",[i._F.MA]:"Morocco",[i._F.YT]:"Mayotte",[i._F.BF]:"Burkina Faso",[i._F.RE]:"R\xe9union",[i._F.ST]:"S\xe3o Tom\xe9 and Pr\xedncipe",[i._F.CF]:"Central African Republic",[i._F.MZ]:"Mozambique",[i._F.MW]:"Malawi",[i._F.ML]:"Mali",[i._F.ZM]:"Zambia",[i._F.LY]:"Libya",[i._F.GW]:"Guinea-Bissau",[i._F.SO]:"Somalia",[i._F.KE]:"Kenya",[i._F.GN]:"Guinea",[i._F.ZW]:"Zimbabwe",[i._F.TN]:"Tunisia",[i._F.SL]:"Sierra Leone",[i._F.GA]:"Gabon",[i._F.CI]:"Ivory Coast",[i._F.JO]:"Jordan",[i._F.PK]:"Pakistan",[i._F.KP]:"North Korea",[i._F.MO]:"Macau",[i._F.AM]:"Armenia",[i._F.SY]:"Syria",[i._F.TJ]:"Tajikistan",[i._F.SA]:"Saudi Arabia",[i._F.KR]:"South Korea",[i._F.NP]:"Nepal",[i._F.PH]:"Philippines",[i._F.IQ]:"Iraq",[i._F.LB]:"Lebanon",[i._F.MN]:"Mongolia",[i._F.PS]:"Palestine",[i._F.YE]:"Yemen",[i._F.JP]:"Japan",[i._F.KZ]:"Kazakhstan",[i._F.LK]:"Sri Lanka",[i._F.MM]:"Myanmar",[i._F.KG]:"Kyrgyzstan",[i._F.CN]:"China",[i._F.AF]:"Afghanistan",[i._F.OM]:"Oman",[i._F.IN]:"India",[i._F.LA]:"Laos",[i._F.UZ]:"Uzbekistan",[i._F.MV]:"Maldives",[i._F.ID]:"Indonesia",[i._F.VN]:"Vietnam",[i._F.MY]:"Malaysia",[i._F.TW]:"Taiwan",[i._F.KH]:"Cambodia",[i._F.AE]:"United Arab Emirates",[i._F.HK]:"Hong Kong",[i._F.GE]:"Georgia (Country)",[i._F.BD]:"Bangladesh",[i._F.KW]:"Kuwait",[i._F.TM]:"Turkmenistan",[i._F.QA]:"Qatar",[i._F.BH]:"Bahrain",[i._F.BN]:"Brunei",[i._F.TH]:"Thailand",[i._F.BT]:"Bhutan",[i._F.SG]:"Singapore",[i._F.IL]:"Israel",[i._F.AZ]:"Azerbaijan",[i._F.TL]:"Timor-Leste",[i._F.IR]:"Iran",[i._F.TR]:"Turkey",[i._F.MK]:"North Macedonia",[i._F.IE]:"Ireland",[i._F.DK]:"Denmark",[i._F.SK]:"Slovakia",[i._F.MD]:"Moldova",[i._F.AX]:"\xc5land Islands",[i._F.PL]:"Poland",[i._F.BA]:"Bosnia and Herzegovina",[i._F.SM]:"San Marino",[i._F.CZ]:"Czechia",[i._F.EE]:"Estonia",[i._F.XK]:"Kosovo",[i._F.FO]:"Faroe Islands",[i._F.SJ]:"Svalbard and Jan Mayen",[i._F.GG]:"Guernsey",[i._F.FR]:"France",[i._F.NL]:"Netherlands",[i._F.FI]:"Finland",[i._F.PT]:"Portugal",[i._F.DE]:"Germany",[i._F.MT]:"Malta",[i._F.JE]:"Jersey",[i._F.IS]:"Iceland",[i._F.ES]:"Spain",[i._F.GI]:"Gibraltar",[i._F.NO]:"Norway",[i._F.CY]:"Cyprus",[i._F.RS]:"Serbia",[i._F.LT]:"Lithuania",[i._F.MC]:"Monaco",[i._F.LU]:"Luxembourg",[i._F.UA]:"Ukraine",[i._F.IM]:"Isle of Man",[i._F.RO]:"Romania",[i._F.BE]:"Belgium",[i._F.SE]:"Sweden",[i._F.ME]:"Montenegro",[i._F.LV]:"Latvia",[i._F.VA]:"Vatican City",[i._F.AT]:"Austria",[i._F.AL]:"Albania",[i._F.LI]:"Liechtenstein",[i._F.GR]:"Greece",[i._F.IT]:"Italy",[i._F.AD]:"Andorra",[i._F.GB]:"United Kingdom",[i._F.RU]:"Russia",[i._F.SI]:"Slovenia",[i._F.BY]:"Belarus",[i._F.CH]:"Switzerland",[i._F.HU]:"Hungary",[i._F.BG]:"Bulgaria",[i._F.HR]:"Croatia",[i._F.TC]:"Turks and Caicos Islands",[i._F.CW]:"Cura\xe7ao",[i._F.GP]:"Guadeloupe",[i._F.UM]:"United States Minor Outlying Islands",[i._F.GT]:"Guatemala",[i._F.PM]:"Saint Pierre and Miquelon",[i._F.BQ]:"Caribbean Netherlands",[i._F.GL]:"Greenland",[i._F.SX]:"Sint Maarten",[i._F.PA]:"Panama",[i._F.AW]:"Aruba",[i._F.MQ]:"Martinique",[i._F.AG]:"Antigua and Barbuda",[i._F.BM]:"Bermuda",[i._F.CU]:"Cuba",[i._F.GD]:"Grenada",[i._F.NI]:"Nicaragua",[i._F.LC]:"Saint Lucia",[i._F.KN]:"Saint Kitts and Nevis",[i._F.DO]:"Dominican Republic",[i._F.VC]:"Saint Vincent and the Grenadines",[i._F.BZ]:"Belize",[i._F.HT]:"Haiti",[i._F.JM]:"Jamaica",[i._F.BS]:"Bahamas",[i._F.MX]:"Mexico",[i._F.MF]:"Saint Martin",[i._F.SV]:"El Salvador",[i._F.BL]:"Saint Barth\xe9lemy",[i._F.AI]:"Anguilla",[i._F.MS]:"Montserrat",[i._F.VG]:"British Virgin Islands",[i._F.BB]:"Barbados",[i._F.HN]:"Honduras",[i._F.KY]:"Cayman Islands",[i._F.DM]:"Dominica",[i._F.TT]:"Trinidad and Tobago",[i._F.CR]:"Costa Rica",[i._F.SR]:"Suriname",[i._F.CX]:"Christmas Island",[i._F.WS]:"Samoa",[i._F.PF]:"French Polynesia",[i._F.AS]:"American Samoa",[i._F.NC]:"New Caledonia",[i._F.TK]:"Tokelau",[i._F.PW]:"Palau",[i._F.KI]:"Kiribati",[i._F.VU]:"Vanuatu",[i._F.PN]:"Pitcairn Islands",[i._F.CK]:"Cook Islands",[i._F.FJ]:"Fiji",[i._F.PG]:"Papua New Guinea",[i._F.MP]:"Northern Mariana Islands",[i._F.NU]:"Niue",[i._F.TV]:"Tuvalu",[i._F.NF]:"Norfolk Island",[i._F.TO]:"Tonga",[i._F.FM]:"Micronesia",[i._F.SB]:"Solomon Islands",[i._F.NR]:"Nauru",[i._F.WF]:"Wallis and Futuna",[i._F.GU]:"Guam",[i._F.AU]:"Australia",[i._F.NZ]:"New Zealand",[i._F.MH]:"Marshall Islands",[i._F.CC]:"Cocos (Keeling) Islands",[i._F.VE]:"Venezuela",[i._F.PY]:"Paraguay",[i._F.BR]:"Brazil",[i._F.CO]:"Colombia",[i._F.PE]:"Peru",[i._F.CL]:"Chile",[i._F.UY]:"Uruguay",[i._F.AR]:"Argentina",[i._F.GY]:"Guyana",[i._F.BO]:"Bolivia",[i._F.GF]:"French Guiana",[i._F.EC]:"Ecuador",[i._F.FK]:"Falkland Islands",[i._F.US_AL]:"Alabama",[i._F.US_AK]:"Alaska",[i._F.US_AZ]:"Arizona",[i._F.US_AR]:"Arkansas",[i._F.US_CA]:"California",[i._F.US_CO]:"Colorado",[i._F.US_CT]:"Connecticut",[i._F.US_DE]:"Delaware",[i._F.US_DC]:"District of Columbia (DC)",[i._F.US_FL]:"Florida",[i._F.US_GA]:"Georgia",[i._F.US_HI]:"Hawaii",[i._F.US_ID]:"Idaho",[i._F.US_IL]:"Illinois",[i._F.US_IN]:"Indiana",[i._F.US_IA]:"Iowa",[i._F.US_KS]:"Kansas",[i._F.US_KY]:"Kentucky",[i._F.US_LA]:"Louisiana",[i._F.US_ME]:"Maine",[i._F.US_MD]:"Maryland",[i._F.US_MA]:"Massachusetts",[i._F.US_MI]:"Michigan",[i._F.US_MN]:"Minnesota",[i._F.US_MS]:"Mississippi",[i._F.US_MO]:"Missouri",[i._F.US_MT]:"Montana",[i._F.US_NE]:"Nebraska",[i._F.US_NV]:"Nevada",[i._F.US_NH]:"New Hampshire",[i._F.US_NJ]:"New Jersey",[i._F.US_NM]:"New Mexico",[i._F.US_NY]:"New York",[i._F.US_NC]:"North Carolina",[i._F.US_ND]:"North Dakota",[i._F.US_OH]:"Ohio",[i._F.US_OK]:"Oklahoma",[i._F.US_OR]:"Oregon",[i._F.US_PA]:"Pennsylvania",[i._F.US_PR]:"Puerto Rico",[i._F.US_RI]:"Rhode Island",[i._F.US_SC]:"South Carolina",[i._F.US_SD]:"South Dakota",[i._F.US_TN]:"Tennessee",[i._F.US_TX]:"Texas",[i._F.US_UT]:"Utah",[i._F.US_VA]:"Virginia",[i._F.US_VI]:"United States Virgin Islands",[i._F.US_VT]:"Vermont",[i._F.US_WA]:"Washington",[i._F.US_WV]:"West Virginia",[i._F.US_WI]:"Wisconsin",[i._F.US_WY]:"Wyoming",[i._F.CA_AB]:"Alberta",[i._F.CA_BC]:"British Columbia",[i._F.CA_MB]:"Manitoba",[i._F.CA_NB]:"New Brunswick",[i._F.CA_NL]:"Newfoundland and Labrador",[i._F.CA_NS]:"Nova Scotia",[i._F.CA_ON]:"Ontario",[i._F.CA_PE]:"Prince Edward Island",[i._F.CA_QC]:"Quebec",[i._F.CA_SK]:"Saskatchewan",[i._F.CA_NT]:"Northwest Territories",[i._F.CA_NU]:"Nunavut",[i._F.CA_YT]:"Yukon",[i._F.CA]:"Canada",[i._F.US]:"United States",[i._F.MEXICO_CENTRAL_AMERICA]:"Mexico and Central America",[i._F.CARIBBEAN]:"Caribbean",[i._F.EEA]:"European Economic Area (EEA)",[i._F.NON_EEA]:"Non European Economic Area",[i._F.GLOBAL]:"Global"},s=new Map(Object.entries(t));Object.entries(t).map(e=>({value:e[0],label:e[1]}))},77685:function(e,a,n){"use strict";n.d(a,{i:function(){return M}});var i=n(24246),t=n(62051),s=n(34090),r=n(27378),o=n(55484),_=n(16134),l=n(25980),F=n(97181),d=n(40324),c=n(812),u=n(14047),m=n(45938),S=n(8133),h=n(33335),C=n(32885),g=n(57865),y=n(93237),p=n(65450),f=n(36345);let{Text:b}=t.AntTypography,v={name:"",vendor_id:void 0,description:"",tags:[]},M=e=>{let{onSuccessfulSubmit:a,toastOnSuccess:n,...M}=e,[A,N]=(0,r.useState)(!1),x=(0,_.T)(),{tcf:U,dictionaryService:I}=(0,l.hz)(),{isLoading:j}=(0,C.Rd)(void 0,{skip:!I}),T=(0,_.C)(C.o),w=(0,_.C)(g.gU),[B]=(0,p.in)(),[E]=(0,C.Qk)(),[G]=(0,p.f7)(),{successAlert:k,errorAlert:L}=(0,u.V)(),{setSuggestions:R,setLockedForGVL:D}=g.dictSuggestionsSlice.actions,K=(0,r.useRef)(null),P=(0,r.useMemo)(()=>o.Ry().shape({name:o.Z_().required().label("System name").test("is-unique","",async(e,a)=>{let{data:n}=await B({page:1,size:10,search:e});return!((null==n?void 0:n.items)||[]).filter(a=>a.name===e).some(a=>a.name===e)||a.createError({message:'You already have a system called "'.concat(e,'". Please specify a unique name for this system.')})})}),[B]),O=e=>{if(I){if(!e){x(R("hiding")),x(D(!1));return}x(R("showing")),U&&(0,c.cj)(e)===c.c6.GVL?x(D(!0)):x(D(!1))}},W=()=>{M.onClose(),x(R("initial")),x(D(!1))},V=async e=>{if(N(!0),e.vendor_id){let i=await E([e.vendor_id]);if((0,c.D4)(i))L((0,c.e$)(i.error));else{let{data:e}=i,t=e.systems[0];null==a||a(t.fides_key,t.name),n&&k("".concat(e.name," has been added to your system inventory."))}}else{let i={...e,fides_key:(0,h.E)(e.name),system_type:"",body:"",privacy_declarations:[]},t=await G(i);if((0,c.D4)(t))L((0,c.e$)(t.error));else{let{fides_key:i,name:s}=t.data;null==a||a(i,s),n&&k("".concat(e.name," has been added to your system inventory."))}W()}N(!1)};return(0,i.jsx)(S.Z,{title:"Add New System",...M,onClose:W,children:(0,i.jsx)(s.J9,{initialValues:v,onSubmit:V,validationSchema:P,innerRef:K,children:e=>{let{dirty:a,isValid:n}=e;return(0,i.jsxs)(s.l0,{children:[(0,i.jsx)(m.Gt,{id:"new-system-modal",name:"Add New System"}),(0,i.jsxs)(t.jqI,{vertical:!0,gap:20,className:"pb-6 pt-4",children:[(0,i.jsx)(b,{children:"Fides will add this system to your inventory and configure it for consent using the categories of consent listed below. Optionally, you can check if this system is listed within the Fides compass library by selecting the compass icon below."}),I?(0,i.jsx)(f.Z,{label:"System name",options:T,onVendorSelected:O,isCreate:!0,lockedForGVL:w,isLoading:j}):(0,i.jsx)(d.j0,{id:"name",name:"name",label:"System name",tooltip:"Give the system a unique, and relevant name for reporting purposes. e.g. “Email Data Warehouse”",variant:"stacked",isRequired:!0}),(0,i.jsx)(y.Sv,{id:"description",name:"description",label:"Description",tooltip:"What services does this system perform?",disabled:w}),(0,i.jsx)(F.d,{mode:"tags",id:"tags",name:"tags",label:"System Tags",options:[],layout:"stacked",tooltip:"Are there any tags to associate with this system?",disabled:w})]}),(0,i.jsxs)(t.jqI,{justify:"space-between",children:[(0,i.jsx)(t.wpx,{htmlType:"reset",onClick:W,disabled:j||!a||!n,"data-testid":"cancel-btn",children:"Cancel"}),(0,i.jsx)(t.wpx,{htmlType:"submit",type:"primary",disabled:j||!a||!n,loading:A,"data-testid":"save-btn",children:"Save"})]})]})}})})}},93237:function(e,a,n){"use strict";n.d(a,{Sv:function(){return m},Yb:function(){return u},dQ:function(){return S},lm:function(){return h}});var i=n(24246),t=n(62051),s=n(34090),r=n(27378),o=n(16134),_=n(40324),l=n(46238),F=n(32885),d=n(57865);let c=(e,a,n)=>{var i,t;let[_,l,{setValue:c,setTouched:u}]=(0,s.U$)({name:e,type:n||void 0}),m=!!(l.touched&&l.error),{error:S}=l,h={..._,value:null!==(i=_.value)&&void 0!==i?i:""},[C,g]=(0,r.useState)(null!==(t=h.value)&&void 0!==t?t:""),{values:y}=(0,s.u6)(),{vendor_id:p}=y,f=(0,o.C)((0,F.$e)(p||"")),b=(0,o.C)(d.bN),v=(0,r.useRef)();return(0,r.useEffect)(()=>{"showing"===b&&g(h.value)},[b,g]),(0,r.useEffect)(()=>{if("showing"===b&&f){let n=a?a(f):f[e];h.value!==n&&(c(n),setTimeout(()=>{var e;u(!0),null===(e=v.current)||void 0===e||e.blur()},300))}},[b,c,f,v.current]),(0,r.useEffect)(()=>{"hiding"===b&&c(C)},[b,c,C]),{field:h,isInvalid:m,isShowingSuggestions:b,error:S,inputRef:v}},u=e=>{let{label:a,tooltip:n,disabled:s,isRequired:r=!1,dictField:o,name:F,placeholder:d,id:u}=e,{field:m,isInvalid:S,isShowingSuggestions:h,error:C,inputRef:g}=c(F,o);return(0,i.jsx)(t.NIc,{isInvalid:S,isRequired:r,children:(0,i.jsxs)(t.gCW,{alignItems:"start",children:[(0,i.jsxs)(t.kCb,{alignItems:"center",children:[(0,i.jsx)(_.__,{htmlFor:u||F,fontSize:"xs",my:0,mr:1,children:a}),(0,i.jsx)(l.b,{label:n})]}),(0,i.jsx)(_.oi,{...m,ref:g,isRequired:r,isDisabled:s,"data-testid":"input-".concat(m.name),placeholder:d,isPassword:!1,color:"showing"===h?"complimentary.500":"gray.800"}),(0,i.jsx)(_.Bc,{isInvalid:S,message:C,fieldName:m.name})]})})},m=e=>{let{label:a,tooltip:n,disabled:s,isRequired:r=!1,dictField:o,name:F,id:d}=e,{field:u,isInvalid:m,isShowingSuggestions:S,error:h}=c(F,o);return(0,i.jsx)(t.NIc,{isInvalid:m,isRequired:r,children:(0,i.jsxs)(t.gCW,{alignItems:"start",children:[(0,i.jsxs)(t.kCb,{alignItems:"center",children:[(0,i.jsx)(_.__,{htmlFor:d||F,fontSize:"xs",my:0,mr:1,children:a}),(0,i.jsx)(l.b,{label:n})]}),(0,i.jsx)(t.gxH,{...u,size:"sm","data-testid":"input-".concat(u.name),focusBorderColor:"primary.600",color:"showing"===S?"complimentary.500":"gray.800",isDisabled:s}),(0,i.jsx)(_.Bc,{isInvalid:m,message:h,fieldName:u.name})]})})},S=e=>{let{label:a,tooltip:n,dictField:r,name:o,id:F,disabled:d}=e,{field:u,isInvalid:m,error:S}=c(o,r,"checkbox");return(0,i.jsxs)(t.NIc,{isInvalid:m,width:"full",children:[(0,i.jsxs)(t.xuv,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,i.jsxs)(t.Ugi,{spacing:1,children:[(0,i.jsx)(_.__,{htmlFor:F||o,fontSize:"xs",my:0,mr:0,children:a}),(0,i.jsx)(l.b,{label:n})]}),(0,i.jsx)(t.Ugi,{children:(0,i.jsx)(s.gN,{name:u.name,children:e=>{let{form:{setFieldValue:a}}=e;return(0,i.jsx)(t.rAg,{checked:u.checked,onChange:e=>{a(u.name,e)},disabled:d,className:"mr-2","data-testid":"input-".concat(u.name),size:"small"})}})})]}),(0,i.jsx)(_.Bc,{isInvalid:m,message:S,fieldName:u.name})]})},h=e=>{let{label:a,tooltip:n,dictField:r,name:o,id:F,disabled:d}=e,{field:u,isInvalid:m,error:S,isShowingSuggestions:h}=c(o,r,"numeric"),{setFieldValue:C}=(0,s.u6)();return(0,i.jsxs)(t.NIc,{isInvalid:m,width:"full",children:[(0,i.jsxs)(t.xuv,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,i.jsxs)(t.Ugi,{spacing:1,children:[(0,i.jsx)(_.__,{htmlFor:F||o,fontSize:"xs",my:0,mr:0,children:a}),(0,i.jsx)(l.b,{label:n})]}),(0,i.jsx)(t.Ugi,{children:(0,i.jsxs)(t.Y2U,{value:u.value,name:u.name,size:"xs",onBlur:u.onBlur,onChange:e=>{C(u.name,e)},w:"100%",colorScheme:"terracotta",inputMode:"numeric","data-testid":"input-".concat(u.name),color:"showing"===h?"complimentary.500":"gray.800",focusBorderColor:"primary.600",isDisabled:d,children:[(0,i.jsx)(t.zuI,{}),(0,i.jsxs)(t.FiK,{children:[(0,i.jsx)(t.WQu,{}),(0,i.jsx)(t.Y_d,{})]})]})})]}),(0,i.jsx)(_.Bc,{isInvalid:m,message:S,fieldName:u.name})]})}},99830:function(e){e.exports={toastLink:"ToastLink_toastLink__OLSeq"}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1100],{58754:function(e,t,n){var r=n(24246),i=n(62051),s=n(70788);t.Z=e=>{let{heading:t,breadcrumbItems:n,isSticky:a=!0,children:l,rightContent:o,style:u,...c}=e;return(0,r.jsxs)("div",{...c,style:a?{position:"sticky",top:"-24px",paddingTop:"24px",paddingBottom:"24px",paddingLeft:"40px",marginLeft:"-40px",paddingRight:"40px",marginRight:"-40px",marginTop:"-24px",left:0,zIndex:20,backgroundColor:"white",...u}:{paddingBottom:"24px",...u},children:[(0,r.jsxs)(i.jqI,{justify:"space-between",children:["string"==typeof t?(0,r.jsx)(i.lQT,{className:n||l?"pb-4":void 0,level:1,"data-testid":"page-heading",children:t}):t,o&&(0,r.jsx)("div",{"data-testid":"page-header-right-content",children:o})]}),!!n&&(0,r.jsx)(s.m,{className:l?"pb-4":void 0,items:n,"data-testid":"page-breadcrumb"}),l]})}},10342:function(e,t,n){var r=n(24246),i=n(62051),s=n(46238);t.Z=e=>{let{title:t,tooltip:n,children:a,...l}=e;return(0,r.jsxs)(i.xuv,{borderRadius:"md",border:"1px solid",borderColor:"gray.200",...l,children:[(0,r.jsxs)(i.X6q,{as:"h3",fontSize:"sm",fontWeight:"semibold",color:"gray.700",py:4,px:6,backgroundColor:"gray.50",borderRadius:"md",textAlign:"left",children:[t,n?(0,r.jsx)(i.xvT,{as:"span",mx:1,children:(0,r.jsx)(s.b,{label:n})}):void 0]}),(0,r.jsx)(i.Kqy,{p:6,spacing:6,children:a})]})}},70788:function(e,t,n){n.d(t,{m:function(){return u}});var r=n(24246),i=n(62051),s=n(79894),a=n.n(s),l=n(27378);let{Text:o}=i.AntTypography,u=e=>{let{items:t,...n}=e,s=(0,l.useMemo)(()=>null==t?void 0:t.map((e,n)=>{let s=n===t.length-1,l={...e},u=l.onClick&&!l.href;return("string"==typeof l.title&&(l.title=(0,r.jsx)(o,{style:{color:"inherit",maxWidth:s?void 0:400},ellipsis:!s,children:l.title})),u)?l.title=(0,r.jsx)(i.wpx,{type:"text",size:"small",icon:l.icon,onClick:l.onClick,className:"ant-breadcrumb-link -mt-px px-1 text-inherit",children:l.title}):(l.icon&&(l.title=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"anticon align-text-bottom",children:l.icon}),l.title]})),l.href&&l.title&&(l.title=(0,r.jsx)(a(),{href:l.href,className:"ant-breadcrumb-link",children:l.title}),delete l.href)),l}),[t]);return(0,r.jsx)(i.zrq,{items:s,...n})}},67810:function(e,t,n){n.d(t,{Z:function(){return s}}),(r=i||(i={})).PRIVACY_REQUEST_REVIEW_APPROVE="privacy_request_review_approve",r.PRIVACY_REQUEST_REVIEW_DENY="privacy_request_review_deny",r.PRIVACY_REQUEST_RECEIPT="privacy_request_receipt",r.PRIVACY_REQUEST_COMPLETE_ACCESS="privacy_request_complete_access",r.PRIVACY_REQUEST_COMPLETE_DELETION="privacy_request_complete_deletion",r.SUBJECT_IDENTITY_VERIFICATION="subject_identity_verification";var r,i,s={[i.PRIVACY_REQUEST_COMPLETE_ACCESS]:"Access request completed",[i.PRIVACY_REQUEST_COMPLETE_DELETION]:"Erasure request completed",[i.PRIVACY_REQUEST_RECEIPT]:"Privacy request received",[i.PRIVACY_REQUEST_REVIEW_APPROVE]:"Privacy request approved",[i.PRIVACY_REQUEST_REVIEW_DENY]:"Privacy request denied",[i.SUBJECT_IDENTITY_VERIFICATION]:"Subject identity verification"}},20149:function(e,t,n){var r=n(24246),i=n(77830),s=n(62051),a=n(34090),l=n(86677),o=n(16134),u=n(10342),c=n(40324),d=n(51472),p=n(67810),m=n(64826);let g=()=>{var e;let t=(0,o.C)(m.Zp),n=(0,o.C)(m.G1);(0,m.gz)({page:t,size:n});let i=(0,o.C)(m.YO),{values:s,setFieldValue:l}=(0,a.u6)();return(0,r.jsx)(d.Z,{label:"Associated properties",addButtonLabel:"Add property",idField:"id",nameField:"name",allItems:i.map(e=>({id:e.id,name:e.name})),values:null!==(e=s.properties)&&void 0!==e?e:[],setValues:e=>l("properties",e),draggable:!0,maxHeight:100,baseTestId:"property"})};t.Z=e=>{let{template:t,handleSubmit:n,handleDelete:o}=e,d=(0,l.useRouter)(),m=()=>{d.push(i.q)},f={type:t.type,content:t.content,properties:t.properties||[],is_enabled:t.is_enabled,id:t.id||""};return(0,r.jsx)(a.J9,{enableReinitialize:!0,initialValues:f,onSubmit:n,children:e=>{let{dirty:t,isValid:n,isSubmitting:i}=e;return(0,r.jsxs)(a.l0,{style:{paddingTop:"12px",paddingBottom:"12px"},children:[(0,r.jsx)(s.xuv,{py:3,children:(0,r.jsxs)(u.Z,{title:"".concat(p.Z[f.type]),children:[(0,r.jsx)(c.j0,{isRequired:!0,label:"Email subject",name:"content.subject",variant:"stacked"}),(0,r.jsx)(c.Ks,{isRequired:!0,label:"Message body",name:"content.body",value:"test",variant:"stacked",resize:!0}),(0,r.jsx)(s.xuv,{py:3,children:(0,r.jsx)(g,{})}),(0,r.jsx)(c.w8,{name:"is_enabled",label:"Enable message",variant:"switchFirst"})]})}),(0,r.jsxs)(s.kCb,{justifyContent:"space-between",width:"100%",paddingTop:2,children:[f.id&&o&&(0,r.jsx)(s.wpx,{"data-testid":"delete-template-button",loading:!1,className:"mr-3",onClick:o,children:"Delete"}),(0,r.jsxs)(s.kCb,{justifyContent:"right",width:"100%",paddingTop:2,children:[(0,r.jsx)(s.wpx,{loading:!1,className:"mr-3",onClick:m,children:"Cancel"}),(0,r.jsx)(s.wpx,{htmlType:"submit",type:"primary",disabled:i||!t||!n,loading:i,"data-testid":"submit-btn",children:"Save"})]})]})]})}})}},5058:function(e,t,n){n.d(t,{Vw:function(){return s},ms:function(){return r},pS:function(){return i},vm:function(){return a}});let{useGetSummaryMessagingTemplatesQuery:r,usePutMessagingTemplateByIdMutation:i,useCreateMessagingTemplateByTypeMutation:s,usePatchMessagingTemplateByIdMutation:a}=n(78780).u.injectEndpoints({endpoints:e=>({getSummaryMessagingTemplates:e.query({query:e=>({method:"GET",url:"plus/messaging/templates/summary",params:e}),providesTags:()=>["Property-Specific Messaging Templates"]}),putMessagingTemplateById:e.mutation({query:e=>{let{templateId:t,template:n}=e;return{url:"plus/messaging/templates/".concat(t),method:"PUT",body:n}},invalidatesTags:()=>["Property-Specific Messaging Templates"]}),patchMessagingTemplateById:e.mutation({query:e=>{let{templateId:t,template:n}=e;return{url:"plus/messaging/templates/".concat(t),method:"PATCH",body:n}},invalidatesTags:()=>["Property-Specific Messaging Templates"]}),createMessagingTemplateByType:e.mutation({query:e=>{let{templateType:t,template:n}=e;return{url:"plus/messaging/templates/".concat(t),method:"POST",body:n}},invalidatesTags:()=>["Property-Specific Messaging Templates"]})})})},47466:function(e,t,n){n.d(t,{KC:function(){return a},ew:function(){return l},gQ:function(){return s},jM:function(){return r},lE:function(){return i}});let{useGetMessagingTemplatesQuery:r,useUpdateMessagingTemplatesMutation:i,useGetMessagingTemplateByIdQuery:s,useGetMessagingTemplateDefaultQuery:a,useDeleteMessagingTemplateByIdMutation:l}=n(78780).u.injectEndpoints({endpoints:e=>({getMessagingTemplates:e.query({query:()=>({url:"messaging/templates"}),providesTags:()=>["Messaging Templates"]}),updateMessagingTemplates:e.mutation({query:e=>({url:"messaging/templates",method:"PUT",body:e}),invalidatesTags:()=>["Messaging Templates"]}),getMessagingTemplateById:e.query({query:e=>({url:"/messaging/templates/".concat(e)}),providesTags:()=>["Property-Specific Messaging Templates"]}),getMessagingTemplateDefault:e.query({query:e=>({url:"/messaging/templates/default/".concat(e)})}),deleteMessagingTemplateById:e.mutation({query:e=>({url:"/messaging/templates/".concat(e),method:"DELETE"}),invalidatesTags:()=>["Property-Specific Messaging Templates"]})})})},31883:function(e,t,n){n.d(t,{Bw:function(){return r.Bw},D4:function(){return r.D4}});var r=n(19043)},11055:function(e,t,n){n.d(t,{M:function(){return d}});var r=n(24246),i=n(29427),s=n(27378),a=n(40976),l=n(18397),o=n(42308),u=n(25431),c=n(39556);let d=(0,s.forwardRef)(function({children:e,as:t="ul",axis:n="y",onReorder:d,values:g,...f},y){let h=(0,o.h)(()=>l.E[t]),x=[],E=(0,s.useRef)(!1);return(0,i.k)(!!g,"Reorder.Group must be provided a values prop"),(0,s.useEffect)(()=>{E.current=!1}),(0,r.jsx)(h,{...f,ref:y,ignoreStrict:!0,children:(0,r.jsx)(a.Y.Provider,{value:{axis:n,registerItem:(e,t)=>{let r=x.findIndex(t=>e===t.value);-1!==r?x[r].layout=t[n]:x.push({value:e,layout:t[n]}),x.sort(m)},updateOrder:(e,t,n)=>{if(E.current)return;let r=function(e,t,n,r){if(!r)return e;let i=e.findIndex(e=>e.value===t);if(-1===i)return e;let s=r>0?1:-1,a=e[i+s];if(!a)return e;let l=e[i],o=a.layout,d=(0,c.t)(o.min,o.max,.5);return 1===s&&l.layout.max+n>d||-1===s&&l.layout.min+n<d?(0,u.uo)(e,i,i+s):e}(x,e,t,n);x!==r&&(E.current=!0,d(r.map(p).filter(e=>-1!==g.indexOf(e))))}},children:e})})});function p(e){return e.value}function m(e,t){return e.layout.min-t.layout.min}},7078:function(e,t,n){n.d(t,{e:function(){return T}});var r=n(24246),i=n(29427),s=n(27378),a=n(40976),l=n(18397),o=n(42308),u=n(69222),c=n(67412);function d(e){let t=(0,o.h)(()=>(0,u.BX)(e)),{isStatic:n}=(0,s.useContext)(c._);if(n){let[,n]=(0,s.useState)(e);(0,s.useEffect)(()=>t.on("change",n),[])}return t}var p=n(13998);let m=e=>e&&"object"==typeof e&&e.mix,g=e=>m(e)?e.mix:void 0;var f=n(64306),y=n(95984);function h(e,t){let n=d(t()),r=()=>n.set(t());return r(),(0,f.L)(()=>{let t=()=>y.Wi.preRender(r,!1,!0),n=e.map(e=>e.on("change",t));return()=>{n.forEach(e=>e()),(0,y.Pn)(r)}}),n}function x(e,t){let n=(0,o.h)(()=>[]);return h(e,()=>{n.length=0;let r=e.length;for(let t=0;t<r;t++)n[t]=e[t].get();return t(n)})}var E=n(3522);function v(e,t=0){return(0,E.i)(e)?e:d(t)}let T=(0,s.forwardRef)(function({children:e,style:t={},value:n,as:c="li",onDrag:d,layout:m=!0,...f},y){let E=(0,o.h)(()=>l.E[c]),T=(0,s.useContext)(a.Y),b={x:v(t.x),y:v(t.y)},_=function(e,t,n,r){if("function"==typeof e)return function(e){u.S1.current=[],e();let t=h(u.S1.current,e);return u.S1.current=void 0,t}(e);let i="function"==typeof t?t:function(...e){let t=!Array.isArray(e[0]),n=t?0:-1,r=e[0+n],i=e[1+n],s=e[2+n],a=e[3+n],l=(0,p.s)(i,s,{mixer:g(s[0]),...a});return t?l(r):l}(t,void 0,void 0);return Array.isArray(e)?x(e,i):x([e],([e])=>i(e))}([b.x,b.y],([e,t])=>e||t?1:"unset");(0,i.k)(!!T,"Reorder.Item must be a child of Reorder.Group");let{axis:C,registerItem:j,updateOrder:R}=T;return(0,r.jsx)(E,{drag:C,...f,dragSnapToOrigin:!0,style:{...t,x:b.x,y:b.y,zIndex:_},layout:m,onDrag:(e,t)=>{let{velocity:r}=t;r[C]&&R(n,b[C].get(),r[C]),d&&d(e,t)},onLayoutMeasure:e=>j(n,e),ref:y,ignoreStrict:!0,children:e})})},40976:function(e,t,n){n.d(t,{Y:function(){return r}});let r=(0,n(27378).createContext)(null)},47397:function(e,t,n){n.d(t,{o:function(){return a}});var r=n(42308);class i{constructor(){this.componentControls=new Set}subscribe(e){return this.componentControls.add(e),()=>this.componentControls.delete(e)}start(e,t){this.componentControls.forEach(n=>{n.start(e.nativeEvent||e,t)})}}let s=()=>new i;function a(){return(0,r.h)(s)}},76649:function(e,t,n){n.d(t,{Ln:function(){return r}});let r=(e,t)=>s(e,t),i=Symbol("SOME"),s=(e,t)=>"string"==typeof e?e===typeof t:Array.isArray(e)?i in e?e.some(e=>s(e,t)):!!Array.isArray(t)&&(0===e.length||t.every(t=>e.some(e=>s(e,t)))):"object"==typeof t&&null!==t&&Object.entries(e).every(([e,n])=>s(n,t[e]));class a{static narrow(e){return new a(t=>r(e,t))}constructor(e){this.NF=void 0,this.NF=e}satisfied(e){return this.NF(e)}build(e){return e}and(e){let t=this.NF,n=e instanceof a?e.NF:e instanceof Function?e:t=>r(e,t);return new a(e=>t(e)&&n(e))}}new a(e=>!0)}}]);
|