ethyca-fides 2.69.0rc1__py2.py3-none-any.whl → 2.69.0rc3__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.69.0rc1.dist-info → ethyca_fides-2.69.0rc3.dist-info}/METADATA +1 -1
- {ethyca_fides-2.69.0rc1.dist-info → ethyca_fides-2.69.0rc3.dist-info}/RECORD +201 -201
- fides/_version.py +3 -3
- fides/api/api/v1/endpoints/user_endpoints.py +0 -23
- fides/api/models/client.py +5 -9
- fides/api/models/fides_user.py +2 -1
- fides/api/oauth/utils.py +2 -21
- fides/api/schemas/saas/connector_template.py +5 -0
- fides/api/service/connectors/saas/connector_registry_service.py +7 -0
- fides/api/util/connection_type.py +3 -20
- fides/api/util/saas_util.py +12 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-bd6f467aacd80f91.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-36bec04369a1a7c4.js → _app-11b4a4ade9d6979e.js} +9 -9
- fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-c9c1c02d7e68c4f8.js → privacy-requests-91f578139548652c.js} +1 -1
- fides/ui-build/static/admin/_next/static/psdvcOGkJ2TvIpb4oMjqu/_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/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/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-b04a7859ee8f0b59.js +0 -1
- fides/ui-build/static/admin/_next/static/zEliM9juvmcu4yond1mtG/_buildManifest.js +0 -1
- {ethyca_fides-2.69.0rc1.dist-info → ethyca_fides-2.69.0rc3.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.69.0rc1.dist-info → ethyca_fides-2.69.0rc3.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.69.0rc1.dist-info → ethyca_fides-2.69.0rc3.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.69.0rc1.dist-info → ethyca_fides-2.69.0rc3.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1099-db533dd22b80bca6.js → 1099-c34f76b4da5f3d15.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1345-6986414ab6ad3389.js → 1345-04e37a66c0d40dc1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1817-fcb2fd28034d5070.js → 1817-e6934e258111a961.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-8a63ec72fa8e1bc0.js → 2921-0696287bb8de1f0b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3620-1fba74849114e70f.js → 3620-8c0ee3d0b19c342d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3729-79255d8b0d22922d.js → 3729-f5f2976904dce90d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3847-a868f83c065f54fb.js → 3847-2c0126e6eb54c526.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3855-3154d56888ac46ed.js → 3855-9dd54ded74f4036b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3872-25eec062abd0f847.js → 3872-72ea3eb040366277.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-3be9b867f33e524c.js → 3923-c4f2b03706ddbe39.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-029e2ff644cae40c.js → 401-959a15ed18a8abdf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4608-99e453c666a7b89a.js → 4608-d101417a3abb4ad6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4786-289c505d7d835feb.js → 4786-7aafb744445445b2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4808-5b799757d4564807.js → 4808-357ca7ea7bbd24c6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4844-a1784e2823ccd0ee.js → 4844-707b20a6c4b127cc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5258-45ec38e6c3780f24.js → 5258-7c8d2dcc71b9f51d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5487-aad0e8a240a1979b.js → 5487-fd9724519f31caff.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{549-81279a1a816487a7.js → 549-d3bef0990071230c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6084-3379ca3c1fc77aa9.js → 6084-487d27d017c45e05.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-04b15a7b02b1fc19.js → 6853-f7ab74e30abbdeaf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-0f5d6c1757013eb7.js → 6954-b0a7b8ac6db238f8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7476-2227e21f574bee70.js → 7476-9a57db910472b48e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-267de03b93bbae8d.js → 7630-46807321449479c7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{768-24269f30db223720.js → 768-7eac4b30d7477b0a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{787-0aa4d9802c976f92.js → 787-79e8e558bd80ece6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{79-0102f2711b8455cd.js → 79-3e5047415bee9391.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-53f0ea567d1da2b9.js → 796-fb2af44165f37ecc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8002-98ecd56535cdefa3.js → 8002-c1f66179adabece8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9046-a349c22448593f94.js → 9046-058a4d8f0b5e08f9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-f4755a75d00c1c8c.js → 9826-0d9a7f61c08ed88a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9951-07989276d153c848.js → 9951-b954027a046ce553.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-fde1f56225d1ef4f.js → 404-9c9efb820bb6b432.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-aff671eda846719f.js → manual-20253dd047fb9736.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-04894ddffc2a66fc.js → multiple-caadc3c0e86a7bfe.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-e98c4154535bf37d.js → add-systems-169099ff7b305cf5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-b2f80cdb75183bfa.js → add-vendors-acefb9e08c6c4082.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-207cabf1b5c453fc.js → configure-558fbb1667473abb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-b3db5610ae7e94fb.js → [id]-b1ff1c9683841815.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-3009481bdd479fd7.js → privacy-experience-674906d2d9a0a3a6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-72e3cd6740c5c5de.js → [id]-5b7aa7971f070513.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2aa4d13fb26b59ca.js → new-285958a12a66575e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-6b0885a8c871804f.js → privacy-notices-dc56bbdb6dd7a670.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-20bc3cf67727dfd3.js → properties-0843757f00eeaaec.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-77b491108663a2de.js → reporting-60e3394c887f3d5e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-b3c8efbd960f4e34.js → consent-5cba58ebecb4511f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-fe5f6fb33e34baa7.js → [projectUrn]-0f90cac9f190130c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-3584c90cf3670146.js → projects-f9117645c941342c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-a6cecf48e4e27645.js → data-catalog-c566640eecc6f3fe.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-844abdb5ea7d78af.js → [systemId]-cfb0b1200bc1a2c9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-215d6e2fefc9a5e1.js → [monitorId]-fed8b879c13c2bf3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-7721508cc2a9ab3a.js → action-center-991659e916ad60b1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-6169e49c3787a9bf.js → activity-58a110542d6bcd0f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-e17dd4ffcaa4836d.js → datamap-60e27b673c68bd27.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-4af946dc8c6c967f.js → [...subfieldNames]-3f4ba87513e030a2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-a65a8ea3872800e7.js → [collectionName]-a6cd31103deba465.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-ccc844caef652a7e.js → [datasetId]-491d2c8dd559d0cb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-3b65c6e9af65ea2e.js → new-2c7b1213b6604d30.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-0566189a0236078d.js → dataset-c8bcd568d3b0ee7f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-38a7b8826e0abb01.js → [id]-7ed3f05700dc397b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-c8d2599814eefd35.js → new-95f6d64f84fc6bf3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-00ba79f6b47bd161.js → datastore-connection-9a33a412a5f36960.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-053db342725dc127.js → index-1299410f671fac23.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-3db44d6839e8dbd9.js → [id]-3d24c1510aa4c555.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-5f34de3c24e67368.js → integrations-0f12d5b658c98c9f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-707b72e959233112.js → [id]-ba232c4b17576ccb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-c68b413f3c9cf318.js → add-template-b97883026fbc5b1e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-d95588f3ef137030.js → messaging-38189c1058aa4acf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-36cac6f4379587ea.js → ant-components-3119bdb3811409bf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-d44606c0cf203b47.js → AntForm-8f9d0434dc3eb8cf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-341b571fd8da4142.js → FormikAntFormItem-a14e51c7f22f3395.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-2e99b5eb12982aeb.js → FormikControlled-a40645b57822684d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-c7d62113680196dd.js → FormikField-c55df6527b700701.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-89a24591c3d9e7a8.js → forms-292d761616b162a0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-c54bcfb6b0de8a71.js → table-migration-135bcf384b81820a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-71b89f125d817d47.js → [id]-b379873a5771e55b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-4c8e1a7e407d3c7f.js → messaging-a9bb257906dcd7e0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-faf42d1a9cd6a861.js → storage-de0036c74b78e9b7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-3823ee301161be4f.js → configure-70efccbe0732786b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-8973618b9ba28a50.js → [id]-63c6f0193634add5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-b449da44de56fd3f.js → add-property-e76567f0374d5912.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-5bb059b7057b5583.js → properties-2050b7dac0413c11.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-6b26740aeb247bc8.js → datamap-83019a6753e14857.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-98c1492dca52f4f8.js → alpha-913f8eab62460f31.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-d176ec152b70f82d.js → about-2ed1ee6017c0656a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-ea5077aca3d01dfb.js → [purpose_id]-bffd6292e7e0302a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-68b812269e38c8c3.js → consent-e5331508e81222fc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-79cdee37ceb8665f.js → custom-fields-74f0fe9656f4a1f6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-056f36a8a0509006.js → domain-records-a649ca07ce51b0fe.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-fea15607939cab70.js → domains-eb675ba600cea2a8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-cce73ddc0012b089.js → email-templates-4db2f42f90867890.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-8b0a408ed7e3ff28.js → locations-89b404989b4ea21c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-a01838a53677d69e.js → organization-eb1ecff37fd85c72.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-43e9cafaeb869069.js → regulations-07d883b5aaec58f2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-ea1e2483ddf6af6c.js → test-datasets-61ecb7546830c345.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-7856e694b009ded3.js → [id]-e91da49c0681a300.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-2c6dca19bf0a4f0c.js → systems-44d714017dd87e62.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-ede8ddce10d7d055.js → taxonomy-78c3a5200d362cff.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-af9bf43612c9676c.js → [id]-4f9001870e2b3aff.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-3b7fea8781dc18b5.js → user-management-583a7f0c1bead240.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{webpack-aa7ff73977a15cb3.js → webpack-b5eb3e1da37616d2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{zEliM9juvmcu4yond1mtG → psdvcOGkJ2TvIpb4oMjqu}/_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-08-
|
|
11
|
+
"date": "2025-08-29T09:53:24-0700",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.69.
|
|
14
|
+
"full-revisionid": "f143c508f26aa8241e7b79378e76ca087c9e8487",
|
|
15
|
+
"version": "2.69.0rc3"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -208,17 +208,6 @@ def update_user_password(
|
|
|
208
208
|
|
|
209
209
|
current_user.update_password(db=db, new_password=data.new_password)
|
|
210
210
|
|
|
211
|
-
# Delete the user's associated OAuth client to invalidate all existing sessions
|
|
212
|
-
if current_user.client:
|
|
213
|
-
try:
|
|
214
|
-
current_user.client.delete(db)
|
|
215
|
-
except Exception as exc:
|
|
216
|
-
logger.exception(
|
|
217
|
-
"Unable to delete user client during password reset for user {}: {}",
|
|
218
|
-
current_user.id,
|
|
219
|
-
exc,
|
|
220
|
-
)
|
|
221
|
-
|
|
222
211
|
logger.info("Updated user with id: '{}'.", current_user.id)
|
|
223
212
|
return current_user
|
|
224
213
|
|
|
@@ -247,18 +236,6 @@ def force_update_password(
|
|
|
247
236
|
)
|
|
248
237
|
|
|
249
238
|
user.update_password(db=db, new_password=data.new_password)
|
|
250
|
-
|
|
251
|
-
# Delete the user's associated OAuth client to invalidate all existing sessions
|
|
252
|
-
if user.client:
|
|
253
|
-
try:
|
|
254
|
-
user.client.delete(db)
|
|
255
|
-
except Exception as exc:
|
|
256
|
-
logger.exception(
|
|
257
|
-
"Unable to delete user client during admin-forced password reset for user {}: {}",
|
|
258
|
-
user.id,
|
|
259
|
-
exc,
|
|
260
|
-
)
|
|
261
|
-
|
|
262
239
|
logger.info("Updated user with id: '{}'.", user.id)
|
|
263
240
|
return user
|
|
264
241
|
|
fides/api/models/client.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
from datetime import datetime
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import Any, Optional
|
|
6
6
|
|
|
7
7
|
from sqlalchemy import ARRAY, Column, ForeignKey, String
|
|
8
8
|
from sqlalchemy.ext.declarative import declared_attr
|
|
@@ -22,12 +22,10 @@ from fides.api.cryptography.schemas.jwt import (
|
|
|
22
22
|
JWE_PAYLOAD_SYSTEMS,
|
|
23
23
|
)
|
|
24
24
|
from fides.api.db.base_class import Base
|
|
25
|
+
from fides.api.models.fides_user import FidesUser
|
|
25
26
|
from fides.api.oauth.jwt import generate_jwe
|
|
26
27
|
from fides.config import FidesConfig
|
|
27
28
|
|
|
28
|
-
if TYPE_CHECKING:
|
|
29
|
-
from fides.api.models.fides_user import FidesUser
|
|
30
|
-
|
|
31
29
|
DEFAULT_SCOPES: list[str] = []
|
|
32
30
|
DEFAULT_ROLES: list[str] = []
|
|
33
31
|
DEFAULT_SYSTEMS: list[str] = []
|
|
@@ -50,11 +48,9 @@ class ClientDetail(Base):
|
|
|
50
48
|
ARRAY(String), nullable=False, server_default="{}", default=dict
|
|
51
49
|
)
|
|
52
50
|
fides_key = Column(String, index=True, unique=True, nullable=True)
|
|
53
|
-
user_id = Column(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
# Explicitly annotate the backref relationship for mypy
|
|
57
|
-
user: Optional["FidesUser"]
|
|
51
|
+
user_id = Column(
|
|
52
|
+
String, ForeignKey(FidesUser.id_field_path), nullable=True, unique=True
|
|
53
|
+
)
|
|
58
54
|
|
|
59
55
|
@classmethod
|
|
60
56
|
def create_client_and_secret(
|
fides/api/models/fides_user.py
CHANGED
|
@@ -22,7 +22,7 @@ from fides.api.cryptography.cryptographic_util import (
|
|
|
22
22
|
from fides.api.db.base_class import Base
|
|
23
23
|
from fides.api.models.audit_log import AuditLog
|
|
24
24
|
|
|
25
|
-
# SystemManager
|
|
25
|
+
# Intentionally importing SystemManager here to build the FidesUser.systems relationship
|
|
26
26
|
from fides.api.schemas.user import DisabledReason
|
|
27
27
|
from fides.config import CONFIG
|
|
28
28
|
|
|
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
|
|
|
32
32
|
FidesUserRespondentEmailVerification,
|
|
33
33
|
)
|
|
34
34
|
from fides.api.models.sql_models import System # type: ignore[attr-defined]
|
|
35
|
+
from fides.api.models.system_manager import SystemManager
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
class FidesUser(Base):
|
fides/api/oauth/utils.py
CHANGED
|
@@ -222,9 +222,7 @@ async def get_current_user(
|
|
|
222
222
|
created_at=datetime.utcnow(),
|
|
223
223
|
)
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
raise AuthorizationError(detail="Client has no associated user")
|
|
227
|
-
return client.user
|
|
225
|
+
return client.user # type: ignore[attr-defined]
|
|
228
226
|
|
|
229
227
|
|
|
230
228
|
def verify_callback_oauth_policy_pre_webhook(
|
|
@@ -369,10 +367,8 @@ def extract_token_and_load_client(
|
|
|
369
367
|
logger.debug("Auth token expired.")
|
|
370
368
|
raise AuthorizationError(detail="Not Authorized for this action")
|
|
371
369
|
|
|
372
|
-
issued_at_dt = datetime.fromisoformat(issued_at)
|
|
373
|
-
|
|
374
370
|
if is_token_expired(
|
|
375
|
-
|
|
371
|
+
datetime.fromisoformat(issued_at),
|
|
376
372
|
token_duration_override or CONFIG.security.oauth_access_token_expire_minutes,
|
|
377
373
|
):
|
|
378
374
|
raise AuthorizationError(detail="Not Authorized for this action")
|
|
@@ -395,21 +391,6 @@ def extract_token_and_load_client(
|
|
|
395
391
|
logger.debug("Auth token belongs to an invalid client_id.")
|
|
396
392
|
raise AuthorizationError(detail="Not Authorized for this action")
|
|
397
393
|
|
|
398
|
-
# Invalidate tokens issued prior to the user's most recent password reset.
|
|
399
|
-
# This ensures any existing sessions are expired immediately after a password change.
|
|
400
|
-
try:
|
|
401
|
-
if client.user is not None and client.user.password_reset_at is not None:
|
|
402
|
-
password_reset_at = client.user.password_reset_at
|
|
403
|
-
if password_reset_at and issued_at_dt < password_reset_at:
|
|
404
|
-
logger.debug("Auth token issued before latest password reset.")
|
|
405
|
-
raise AuthorizationError(detail="Not Authorized for this action")
|
|
406
|
-
except (
|
|
407
|
-
Exception
|
|
408
|
-
) as exc: # pragma: no cover - defensive: never block auth on relationship issues
|
|
409
|
-
logger.exception(
|
|
410
|
-
"Unable to evaluate password reset timestamp for client user: {}", exc
|
|
411
|
-
)
|
|
412
|
-
|
|
413
394
|
# Populate request-scoped context with the authenticated user identifier.
|
|
414
395
|
# Prefer the linked user_id; fall back to the client id when this is the
|
|
415
396
|
# special root client (which has no associated FidesUser row).
|
|
@@ -4,6 +4,8 @@ from fideslang.models import Dataset
|
|
|
4
4
|
from pydantic import BaseModel, field_validator
|
|
5
5
|
|
|
6
6
|
from fides.api.models.datasetconfig import validate_masking_strategy_override
|
|
7
|
+
from fides.api.schemas.enums.connection_category import ConnectionCategory
|
|
8
|
+
from fides.api.schemas.enums.integration_feature import IntegrationFeature
|
|
7
9
|
from fides.api.schemas.policy import ActionType
|
|
8
10
|
from fides.api.schemas.saas.saas_config import SaaSConfig
|
|
9
11
|
from fides.api.util.saas_util import load_config_from_string, load_dataset_from_string
|
|
@@ -22,6 +24,9 @@ class ConnectorTemplate(BaseModel):
|
|
|
22
24
|
authorization_required: bool
|
|
23
25
|
user_guide: Optional[str] = None
|
|
24
26
|
supported_actions: List[ActionType]
|
|
27
|
+
category: Optional[ConnectionCategory] = None
|
|
28
|
+
tags: Optional[List[str]] = None
|
|
29
|
+
enabled_features: Optional[List[IntegrationFeature]] = None
|
|
25
30
|
|
|
26
31
|
@field_validator("config")
|
|
27
32
|
@classmethod
|
|
@@ -26,6 +26,7 @@ from fides.api.service.authentication.authentication_strategy_oauth2_authorizati
|
|
|
26
26
|
)
|
|
27
27
|
from fides.api.util.saas_util import (
|
|
28
28
|
encode_file_contents,
|
|
29
|
+
extract_display_info_from_config,
|
|
29
30
|
load_config,
|
|
30
31
|
load_config_from_string,
|
|
31
32
|
load_dataset_from_string,
|
|
@@ -78,6 +79,8 @@ class FileConnectorTemplateLoader(ConnectorTemplateLoader):
|
|
|
78
79
|
== OAuth2AuthorizationCodeAuthenticationStrategy.name
|
|
79
80
|
)
|
|
80
81
|
|
|
82
|
+
display_info = extract_display_info_from_config(config)
|
|
83
|
+
|
|
81
84
|
try:
|
|
82
85
|
icon = encode_file_contents(f"data/saas/icon/{connector_type}.svg")
|
|
83
86
|
except FileNotFoundError:
|
|
@@ -100,6 +103,7 @@ class FileConnectorTemplateLoader(ConnectorTemplateLoader):
|
|
|
100
103
|
authorization_required=authorization_required,
|
|
101
104
|
user_guide=config.user_guide,
|
|
102
105
|
supported_actions=config.supported_actions,
|
|
106
|
+
**display_info,
|
|
103
107
|
)
|
|
104
108
|
except Exception:
|
|
105
109
|
logger.exception("Unable to load {} connector", connector_type)
|
|
@@ -165,6 +169,8 @@ class CustomConnectorTemplateLoader(ConnectorTemplateLoader):
|
|
|
165
169
|
== OAuth2AuthorizationCodeAuthenticationStrategy.name
|
|
166
170
|
)
|
|
167
171
|
|
|
172
|
+
display_info = extract_display_info_from_config(config)
|
|
173
|
+
|
|
168
174
|
connector_template = ConnectorTemplate(
|
|
169
175
|
config=template.config,
|
|
170
176
|
dataset=template.dataset,
|
|
@@ -173,6 +179,7 @@ class CustomConnectorTemplateLoader(ConnectorTemplateLoader):
|
|
|
173
179
|
authorization_required=authorization_required,
|
|
174
180
|
user_guide=config.user_guide,
|
|
175
181
|
supported_actions=config.supported_actions,
|
|
182
|
+
**display_info,
|
|
176
183
|
)
|
|
177
184
|
|
|
178
185
|
# register the template in the loader's template dictionary
|
|
@@ -230,23 +230,6 @@ def get_saas_connection_types(
|
|
|
230
230
|
for item in saas_types:
|
|
231
231
|
connector_template = ConnectorRegistry.get_connector_template(item)
|
|
232
232
|
if connector_template is not None:
|
|
233
|
-
# Read display info from SAAS config if available
|
|
234
|
-
category = None
|
|
235
|
-
tags = None
|
|
236
|
-
enabled_features = None
|
|
237
|
-
|
|
238
|
-
try:
|
|
239
|
-
saas_config = SaaSConfig(
|
|
240
|
-
**load_config_from_string(connector_template.config)
|
|
241
|
-
)
|
|
242
|
-
if saas_config.display_info:
|
|
243
|
-
category = saas_config.display_info.category
|
|
244
|
-
tags = saas_config.display_info.tags
|
|
245
|
-
enabled_features = saas_config.display_info.enabled_features
|
|
246
|
-
except Exception:
|
|
247
|
-
# If config parsing fails, leave display info as None
|
|
248
|
-
pass
|
|
249
|
-
|
|
250
233
|
saas_connection_types.append(
|
|
251
234
|
ConnectionSystemTypeMap(
|
|
252
235
|
identifier=item,
|
|
@@ -256,9 +239,9 @@ def get_saas_connection_types(
|
|
|
256
239
|
authorization_required=connector_template.authorization_required,
|
|
257
240
|
user_guide=connector_template.user_guide,
|
|
258
241
|
supported_actions=connector_template.supported_actions,
|
|
259
|
-
category=category,
|
|
260
|
-
tags=tags,
|
|
261
|
-
enabled_features=enabled_features,
|
|
242
|
+
category=connector_template.category,
|
|
243
|
+
tags=connector_template.tags,
|
|
244
|
+
enabled_features=connector_template.enabled_features,
|
|
262
245
|
)
|
|
263
246
|
)
|
|
264
247
|
|
fides/api/util/saas_util.py
CHANGED
|
@@ -16,7 +16,7 @@ from fides.api.common_exceptions import FidesopsException, ValidationError
|
|
|
16
16
|
from fides.api.cryptography.cryptographic_util import bytes_to_b64_str
|
|
17
17
|
from fides.api.graph.config import Collection, CollectionAddress, Field, GraphDataset
|
|
18
18
|
from fides.api.models.privacy_request import PrivacyRequest
|
|
19
|
-
from fides.api.schemas.saas.saas_config import SaaSRequest
|
|
19
|
+
from fides.api.schemas.saas.saas_config import SaaSConfig, SaaSRequest
|
|
20
20
|
from fides.api.schemas.saas.shared_schemas import SaaSRequestParams
|
|
21
21
|
from fides.config import CONFIG
|
|
22
22
|
from fides.config.helpers import load_file
|
|
@@ -126,6 +126,17 @@ def replace_dataset_placeholders(
|
|
|
126
126
|
return load_dataset_from_string(yaml_str)
|
|
127
127
|
|
|
128
128
|
|
|
129
|
+
def extract_display_info_from_config(config: SaaSConfig) -> Dict[str, Any]:
|
|
130
|
+
"""Extract display info fields from SaaSConfig for caching in ConnectorTemplate."""
|
|
131
|
+
return {
|
|
132
|
+
"category": config.display_info.category if config.display_info else None,
|
|
133
|
+
"tags": config.display_info.tags if config.display_info else None,
|
|
134
|
+
"enabled_features": (
|
|
135
|
+
config.display_info.enabled_features if config.display_info else None
|
|
136
|
+
),
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
129
140
|
def load_dataset_with_replacement(
|
|
130
141
|
filename: str, string_to_replace: str, replacement: str
|
|
131
142
|
) -> Dict:
|
|
@@ -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/abf2e162b1cd0e61.css" as="style"/><link rel="stylesheet" href="/_next/static/css/abf2e162b1cd0e61.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-
|
|
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/abf2e162b1cd0e61.css" as="style"/><link rel="stylesheet" href="/_next/static/css/abf2e162b1cd0e61.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-b5eb3e1da37616d2.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-11b4a4ade9d6979e.js" defer=""></script><script src="/_next/static/chunks/pages/404-9c9efb820bb6b432.js" defer=""></script><script src="/_next/static/psdvcOGkJ2TvIpb4oMjqu/_buildManifest.js" defer=""></script><script src="/_next/static/psdvcOGkJ2TvIpb4oMjqu/_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":"psdvcOGkJ2TvIpb4oMjqu","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([[4121],{44121:function(e,s,a){a.d(s,{Z:function(){return Q}});var t=a(24246),n=a(96306),i=a(91437),l=()=>(0,t.jsxs)(n.xuv,{children:[(0,t.jsx)(n.xuv,{pb:4,fontSize:"18px",fontWeight:"semibold",children:"Role Description"}),(0,t.jsx)(n.gCW,{spacing:4,children:i.K.map(e=>(0,t.jsxs)(n.xuv,{width:"100%",padding:4,borderRadius:"md",backgroundColor:"gray.75",fontSize:"14px",children:[(0,t.jsx)(n.xuv,{fontWeight:"semibold",children:e.label}),(0,t.jsx)(n.xuv,{color:"gray.700",children:e.description})]},e.roleKey))})]}),r=a(16134),d=a(54682),o=a(19904),c=a(34090),h=a(86677),m=a(27378),p=a(812),u=a(46238),x=a(58452),j=a(77830),w=a(46628),g=a(26917),b=a(1315),f=a(95492),y=a(65497);let v=e=>{let{assignedSystems:s,onAssignedSystemChange:a}=e,i=(0,r.C)(y.Ux);if((0,y.d6)(i,{skip:!i}),0===s.length)return null;let l=e=>{a(s.filter(s=>s.fides_key!==e.fides_key))};return(0,t.jsxs)(n.iA_,{size:"sm","data-testid":"assign-systems-delete-table",children:[(0,t.jsx)(n.hrZ,{children:(0,t.jsxs)(n.Tr,{children:[(0,t.jsx)(n.Th,{children:"System"}),(0,t.jsx)(n.Th,{})]})}),(0,t.jsx)(n.p3B,{children:s.map(e=>(0,t.jsxs)(n.Tr,{_hover:{bg:"gray.50"},"data-testid":"row-".concat(e.fides_key),children:[(0,t.jsx)(n.Td,{children:e.name}),(0,t.jsx)(n.Td,{textAlign:"end",children:(0,t.jsx)(n.wpx,{"aria-label":"Unassign system from user",icon:(0,t.jsx)(f.l,{}),onClick:()=>l(e),"data-testid":"unassign-btn"})})]},e.fides_key))})]})};var _=e=>{let{allSystems:s,assignedSystems:a,onChange:i}=e,l=e=>{a.find(s=>s.fides_key===e.fides_key)?i(a.filter(s=>s.fides_key!==e.fides_key)):i([...a,e])};return(0,t.jsx)(n.xuv,{overflowY:"auto",maxHeight:"300px",children:(0,t.jsxs)(n.iA_,{size:"sm","data-testid":"assign-systems-table",maxHeight:"50vh",overflowY:"scroll",children:[(0,t.jsx)(n.hrZ,{position:"sticky",top:0,background:"white",zIndex:1,children:(0,t.jsxs)(n.Tr,{children:[(0,t.jsx)(n.Th,{children:"System"}),(0,t.jsx)(n.Th,{children:"Assign"})]})}),(0,t.jsx)(n.p3B,{children:s.map(e=>{let s=!!a.find(s=>s.fides_key===e.fides_key);return(0,t.jsxs)(n.Tr,{_hover:{bg:"gray.50"},"data-testid":"row-".concat(e.fides_key),children:[(0,t.jsx)(n.Td,{children:e.name}),(0,t.jsx)(n.Td,{children:(0,t.jsx)(n.rAg,{checked:s,onChange:()=>l(e),"data-testid":"assign-switch"})})]},e.fides_key)})})]})})};let C=(e,s)=>{var a,t;return(null===(a=e.name)||void 0===a?void 0:a.toLocaleLowerCase().includes(s.toLocaleLowerCase()))||(null===(t=e.description)||void 0===t?void 0:t.toLocaleLowerCase().includes(s.toLocaleLowerCase()))};var S=e=>{let{isOpen:s,onClose:a,assignedSystems:i,onAssignedSystemChange:l}=e,{data:r}=(0,b.K3)(),[d,o]=(0,m.useState)(""),[c,h]=(0,m.useState)(i),p=async()=>{l(c),a()},u=!r||0===r.length,x=(0,m.useMemo)(()=>r?r.filter(e=>C(e,d)):[],[r,d]),j=(0,m.useMemo)(()=>{let e=new Set(c.map(e=>e.fides_key));return x.every(s=>e.has(s.fides_key))},[x,c]);return(0,t.jsxs)(n.u_l,{isOpen:s,onClose:a,size:"2xl",children:[(0,t.jsx)(n.ZAr,{}),(0,t.jsxs)(n.hzk,{p:8,"data-testid":"confirmation-modal",children:[(0,t.jsxs)(n.xBx,{fontWeight:"medium",display:"flex",justifyContent:"space-between",alignItems:"center",children:[(0,t.jsx)(n.xvT,{children:"Assign systems"}),(0,t.jsxs)(n.j8w,{color:"success",children:["Assigned to ",i.length," systems"]})]}),(0,t.jsx)(n.fef,{"data-testid":"assign-systems-modal-body",children:u?(0,t.jsx)(n.xvT,{children:"No systems found"}):(0,t.jsxs)(n.Kqy,{spacing:4,children:[(0,t.jsxs)(n.kCb,{justifyContent:"space-between",children:[(0,t.jsx)(n.xvT,{fontSize:"sm",flexGrow:1,fontWeight:"medium",children:"Assign systems in your organization to this user"}),(0,t.jsx)(n.xuv,{children:(0,t.jsxs)(n.NIc,{display:"flex",alignItems:"center",children:[(0,t.jsx)(n.lXp,{fontSize:"sm",htmlFor:"assign-all-systems",mb:"0",children:"Assign all systems"}),(0,t.jsx)(n.rAg,{size:"small",id:"assign-all-systems",checked:j,onChange:e=>{e&&r?h(x):h(r?r.filter(e=>!x.includes(e)):[])},"data-testid":"assign-all-systems-toggle"})]})})]}),(0,t.jsx)(g.Z,{value:d,onChange:o,placeholder:"Search for systems","data-testid":"system-search",withIcon:!0}),(0,t.jsx)(_,{allSystems:x,assignedSystems:c,onChange:h})]})}),(0,t.jsx)(n.mzw,{justifyContent:"flex-start",children:(0,t.jsxs)("div",{children:[(0,t.jsx)(n.wpx,{onClick:a,className:"mr-2","data-testid":"cancel-btn",children:"Cancel"}),u?null:(0,t.jsx)(n.wpx,{type:"primary",onClick:p,"data-testid":"confirm-btn",children:"Confirm"})]})})]})]})},k=e=>{let{label:s,roleKey:a,isSelected:i,isDisabled:l,assignedSystems:r,onAssignedSystemChange:o}=e,{setFieldValue:h}=(0,c.u6)(),m=(0,n.qY0)(),p=l?"You do not have sufficient permissions to assign this role.":void 0;return i?(0,t.jsxs)(n.Kqy,{borderRadius:"md",border:"1px solid",borderColor:"gray.200",p:4,backgroundColor:"gray.50","aria-selected":"true",spacing:4,"data-testid":"selected",children:[(0,t.jsxs)(n.kCb,{alignItems:"center",justifyContent:"space-between",children:[(0,t.jsx)(n.xvT,{fontSize:"md",fontWeight:"semibold",children:s}),(0,t.jsx)(n.StI,{})]}),a!==d.A7.APPROVER&&a!==d.A7.RESPONDENT&&a!==d.A7.EXTERNAL_RESPONDENT?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.kCb,{alignItems:"center",children:[(0,t.jsx)(n.xvT,{fontSize:"sm",fontWeight:"semibold",mr:1,children:"Assigned systems"}),(0,t.jsx)(u.b,{label:"Assigned systems refer to those systems that have been specifically allocated to a user for management purposes. Users assigned to a system possess full edit permissions and are listed as the Data Steward for the respective system."})]}),(0,t.jsx)(n.wpx,{disabled:l,title:p,type:"primary",size:"small",onClick:m.onOpen,"data-testid":"assign-systems-btn",children:"Assign systems +"}),(0,t.jsx)(v,{assignedSystems:r,onAssignedSystemChange:o}),m.isOpen?(0,t.jsx)(S,{isOpen:m.isOpen,onClose:m.onClose,assignedSystems:r,onAssignedSystemChange:o}):null]}):null]}):(0,t.jsx)(n.wpx,{onClick:()=>{h("roles",[a])},"data-testid":"role-option-".concat(s),title:p,disabled:l,children:s})};let E={roles:[]};var A=()=>{var e,s;let a=(0,n.pmc)(),l=(0,h.useRouter)(),g=(0,r.C)(y.Ux);(0,y.d6)(g,{skip:!g});let{isOpen:b,onOpen:f,onClose:v}=(0,n.qY0)(),_=(0,r.C)(y.R$),[C,S]=(0,m.useState)(_),[A]=(0,y.G$)();(0,m.useEffect)(()=>{S(_)},[_]);let{data:T,isLoading:P}=(0,y.gU)(null!=g?g:"",{skip:!g}),[R]=(0,y.lD)(),N=!!(null==T?void 0:null===(e=T.roles)||void 0===e?void 0:e.includes(d.A7.EXTERNAL_RESPONDENT)),O=async e=>{if(b&&v(),!g)return;let s=e.roles.includes(d.A7.APPROVER),t=await R({user_id:g,payload:{roles:e.roles}});if((0,p.D4)(t)){a((0,w.Vo)((0,p.e$)(t.error)));return}if(!s){let e=C.map(e=>e.fides_key),s=await A({userId:g,fidesKeys:e});if((0,p.D4)(s)){a((0,w.Vo)((0,p.e$)(s.error)));return}}a((0,w.t5)("Permissions updated"))},I=async e=>{g&&(C.length>0&&e.roles.includes(d.A7.APPROVER)?f():await O(e))},z=(0,o.Tg)([d.Sh.USER_PERMISSION_ASSIGN_OWNERS]);if(!g)return null;if(P)return(0,t.jsx)(n.$jN,{});if(!z&&(null==T?void 0:null===(s=T.roles)||void 0===s?void 0:s.includes(d.A7.OWNER)))return(0,t.jsx)(n.xvT,{"data-testid":"insufficient-access",children:"You do not have sufficient access to change this user's permissions."});let q=(null==T?void 0:T.roles)?{roles:T.roles}:E,U=i.K.filter(e=>N?e.roleKey===d.A7.EXTERNAL_RESPONDENT:e.roleKey!==d.A7.EXTERNAL_RESPONDENT),D=N?"External respondent role cannot be changed":void 0;return(0,t.jsx)(c.J9,{onSubmit:I,initialValues:q,enableReinitialize:!0,children:e=>{let{values:s,isSubmitting:a,dirty:i}=e;return(0,t.jsxs)(c.l0,{children:[(0,t.jsxs)(n.Kqy,{spacing:7,children:[(0,t.jsxs)(n.Kqy,{spacing:3,"data-testid":"role-options",children:[(0,t.jsxs)(n.kCb,{alignItems:"center",children:[(0,t.jsx)(n.xvT,{fontSize:"sm",fontWeight:"semibold",mr:1,children:"User role"}),(0,t.jsx)(u.b,{label:"A user's role in the organization determines what parts of the UI they can access and which functions are available to them."})]}),U.map(e=>{let a=s.roles.indexOf(e.roleKey)>=0,n=e.roleKey===d.A7.OWNER?!z:N;return(0,t.jsx)(k,{isSelected:a,isDisabled:n,assignedSystems:C,onAssignedSystemChange:S,...e},e.roleKey)}),!N&&(0,t.jsx)(n.esZ,{title:"To invite a new External respondent user, create a manual task integration and then click on the 'Manage secure access' button",children:(0,t.jsx)(n.wpx,{disabled:!0,"data-testid":"role-option-External respondent",children:"External respondent"})})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(n.wpx,{onClick:()=>l.push(j.e3),children:"Cancel"}),(0,t.jsx)(n.esZ,{title:D,children:(0,t.jsx)(n.wpx,{className:"ml-2",type:"primary",htmlType:"submit",loading:a,disabled:!i&&C===_||N,"data-testid":"save-btn",children:"Save"})})]})]}),(0,t.jsx)(x.Z,{isOpen:b,onClose:v,onConfirm:()=>O(s),title:"Change role to Approver",testId:"downgrade-to-approver-confirmation-modal",continueButtonText:"Yes",message:(0,t.jsx)(n.xvT,{children:"Switching to an approver role will remove all assigned systems. Do you wish to proceed?"})})]})}})},T=a(61038),P=a(55484),R=a(25980),N=a(40324),O=a(96006),I=a(7426);let{useGetEmailInviteStatusQuery:z}=a(78780).u.injectEndpoints({endpoints:e=>({getEmailInviteStatus:e.query({query:()=>({url:"/messaging/email-invite/status"}),providesTags:()=>["Email Invite Status"]})})});var q=a(76174),U=a(91317),D=a(31883);let Z=P.Ry().shape({password:O.a.label("Password"),passwordConfirmation:P.Z_().required().oneOf([P.iH("password")],"Passwords must match").label("Password confirmation")}),W={password:"",passwordConfirmation:""},K=e=>{let s=(0,n.qY0)(),a=(0,n.pmc)(),[t]=(0,y.ls)(),i=async n=>{let i=await t({id:e,new_password:n.password});(0,D.D4)(i)?a((0,w.Vo)((0,p.e$)(i.error))):(a((0,w.t5)("Successfully reset user's password. Please inform the user of their new password.")),s.onClose())};return{...s,handleResetPassword:i}};var L=e=>{let{id:s}=e,{handleResetPassword:a,isOpen:i,onClose:l,onOpen:r}=K(s);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.wpx,{onClick:r,"data-testid":"reset-password-btn",children:"Reset password"}),(0,t.jsxs)(n.u_l,{isCentered:!0,isOpen:i,onClose:l,children:[(0,t.jsx)(n.ZAr,{}),(0,t.jsx)(n.hzk,{children:(0,t.jsx)(c.J9,{initialValues:W,validationSchema:Z,onSubmit:a,children:e=>{let{isSubmitting:s,dirty:a,isValid:i}=e;return(0,t.jsxs)(c.l0,{children:[(0,t.jsx)(n.xBx,{children:"Reset Password"}),(0,t.jsx)(n.olH,{}),(0,t.jsx)(n.fef,{children:(0,t.jsxs)(n.Kqy,{direction:"column",spacing:4,children:[(0,t.jsx)(n.xvT,{mb:2,children:"Choose a new password for this user."}),(0,t.jsx)(N.j0,{name:"password",label:"Password",placeholder:"********",type:"password",tooltip:"Password must contain at least 8 characters, 1 number, 1 capital letter, 1 lowercase letter, and at least 1 symbol.",autoComplete:"new-password"}),(0,t.jsx)(N.j0,{name:"passwordConfirmation",label:"Confirm Password",placeholder:"********",type:"password",tooltip:"Must match above password.",autoComplete:"confirm-password"})]})}),(0,t.jsx)(n.mzw,{children:(0,t.jsxs)("div",{className:"w-full gap-2",children:[(0,t.jsx)(n.wpx,{onClick:l,className:"w-1/2",children:"Cancel"}),(0,t.jsx)(n.wpx,{type:"primary",disabled:!a||!i,loading:s,htmlType:"submit",className:"w-1/2","data-testid":"submit-btn",children:"Change Password"})]})})]})}})})]})]})};let V=e=>{let s=(0,n.qY0)(),a=(0,n.pmc)(),[t,i]=(0,m.useState)(""),[l,r]=(0,m.useState)(""),[d,{isLoading:o}]=(0,y.ev)(),c=!!(e&&l&&t),h=async()=>{c&&d({id:e,old_password:t,new_password:l}).unwrap().then(()=>{a((0,w.t5)("Password updated")),s.onClose()})};return{...s,changePasswordValidation:c,handleChange:e=>{"oldPassword"===e.target.name?i(e.target.value):r(e.target.value)},handleChangePassword:h,isLoading:o,newPasswordValue:l,oldPasswordValue:t}};var B=e=>{let{id:s}=e,{changePasswordValidation:a,handleChange:i,handleChangePassword:l,isLoading:r,isOpen:d,newPasswordValue:o,oldPasswordValue:c,onClose:h,onOpen:m}=V(s);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.wpx,{onClick:m,"data-testid":"update-password-btn",children:"Update password"}),(0,t.jsxs)(n.u_l,{isCentered:!0,isOpen:d,onClose:h,children:[(0,t.jsx)(n.ZAr,{}),(0,t.jsxs)(n.hzk,{children:[(0,t.jsx)(n.xBx,{children:"Update Password"}),(0,t.jsx)(n.olH,{}),(0,t.jsx)(n.fef,{pb:6,children:(0,t.jsxs)(n.Kqy,{direction:"column",spacing:"15px",children:[(0,t.jsx)(n.NIc,{children:(0,t.jsx)(n.IIB,{isRequired:!0,name:"oldPassword",onChange:i,placeholder:"Old Password",type:"password",value:c,"data-testid":"input-oldPassword"})}),(0,t.jsx)(n.NIc,{children:(0,t.jsx)(n.IIB,{isRequired:!0,name:"newPassword",onChange:i,placeholder:"New Password",type:"password",value:o,"data-testid":"input-newPassword"})})]})}),(0,t.jsxs)(n.mzw,{children:[(0,t.jsx)(n.wpx,{onClick:h,className:"mr-2 w-1/2",children:"Cancel"}),(0,t.jsx)(n.wpx,{type:"primary",disabled:!a,loading:r,onClick:l,htmlType:"submit",className:"mr-3 w-1/2","data-testid":"submit-btn",children:"Change Password"})]})]})]})]})},Y=()=>{var e;let s=(0,r.C)(y.Ux),a=(0,r.C)(U.dy),i=!!a&&a.id===s,{data:l}=(0,y.gU)(null!=s?s:"",{skip:!s});return(null==l?void 0:null===(e=l.roles)||void 0===e?void 0:e.includes(d.A7.EXTERNAL_RESPONDENT))?null:(0,t.jsx)(n.xuv,{children:s?(0,t.jsxs)(n.Ugi,{children:[i?(0,t.jsx)(B,{id:s}):null,(0,t.jsx)(o.ZP,{scopes:[d.Sh.USER_PASSWORD_RESET],children:(0,t.jsx)(L,{id:s})})]}):null})};let F=(e,s,a,t)=>!e||e&&!s||e&&s&&!0===a&&!!t,$=(e,s,a)=>!!(e&&s&&a),M=(e,s,a,t,n,i)=>!!e&&!s&&F(a,t,n,i),X=(e,s,a,t)=>F(e,s,a,t),H={username:"",first_name:"",email_address:"",last_name:"",password:"",password_login_enabled:!1},G=(e,s,a,t,n)=>P.Ry().shape({username:P.Z_().required().label("Username"),email_address:P.Z_().email().required().label("Email address"),first_name:P.Z_().label("First name"),last_name:P.Z_().label("Last name"),password:P.Z_().when(["password_login_enabled"],{is:i=>M(e,s,a,t,n,i),then:()=>O.a.label("Password"),otherwise:()=>P.Z_().optional().label("Password")}),password_login_enabled:P.O7().label("Allow password login")});var J=e=>{let{onSubmit:s,initialValues:a,canEditNames:i}=e,l=(0,h.useRouter)(),d=(0,n.pmc)(),o=(0,r.T)(),m=(0,n.qY0)(),{data:u}=z(),{data:x}=(0,q.qv)();(0,I.tB)({api_set:!1});let g=(0,r.C)(y.ZC),b=(0,r.C)(I.iR),{plus:v}=(0,R.hz)(),_=(null==u?void 0:u.enabled)||!1,C=(null==b?void 0:b.allow_username_password_login)||!1,S=!g,k=!S&&!i,E=x&&x.length>0||!1,A=$(v,E,C),P=null!=a?a:H;g&&"password_login_enabled"in g&&(P={...P,password_login_enabled:!!g.password_login_enabled});let O=G(S,_,v,E,C),U=async e=>{let a=M(S,_,v,E,C,e.password_login_enabled),t={username:e.username,email_address:e.email_address,first_name:e.first_name,last_name:e.last_name};A&&(t.password_login_enabled=e.password_login_enabled),a&&e.password&&(t.password=e.password);let n=await s(t);if((0,p.D4)(n)){d((0,w.Vo)((0,p.e$)(n.error)));return}d((0,w.t5)("".concat(S?"User created. By default, new users are set to the Viewer role. To change the role, please go to the Permissions tab.":"User updated."))),(null==n?void 0:n.data)&&o((0,y.Vv)(n.data.id))};return(0,t.jsx)(c.J9,{onSubmit:U,initialValues:P,validationSchema:O,"data-testid":"user-form",children:e=>{let{dirty:s,isSubmitting:a,isValid:i,values:r}=e;return(0,t.jsx)(c.l0,{children:(0,t.jsxs)(n.Kqy,{maxW:["xs","xs","100%"],width:"100%",spacing:7,children:[(0,t.jsxs)(n.Kqy,{spacing:6,maxWidth:"55%",children:[(0,t.jsxs)(n.kCb,{children:[(0,t.jsxs)(n.xvT,{display:"flex",alignItems:"center",fontSize:"sm",fontWeight:"semibold",children:["Profile"," ",(null==g?void 0:g.disabled)&&(0,t.jsx)(n.j8w,{color:"success",className:"ml-2","data-testid":"invite-sent-badge",children:"Invite sent"})]}),(0,t.jsx)(n.xuv,{marginLeft:"auto",children:(0,t.jsxs)(n.Ugi,{children:[X(v,E,C||!1,r.password_login_enabled)&&(0,t.jsx)(Y,{"data-testid":"password-management"}),S?null:(0,t.jsxs)(n.xuv,{children:[(0,t.jsx)(n.wpx,{"aria-label":"delete",icon:(0,t.jsx)(f.l,{}),onClick:m.onOpen,"data-testid":"delete-user-btn"}),(0,t.jsx)(T.Z,{user:g,...m})]})]})})]}),(0,t.jsx)(N.j0,{name:"username",label:"Username",variant:"block",placeholder:"Enter new username",disabled:!S,isRequired:!0,"data-testid":"input-username"}),(0,t.jsx)(N.j0,{name:"email_address",label:"Email address",variant:"block",placeholder:"Enter email of user",isRequired:!0,"data-testid":"input-email-address"}),(0,t.jsx)(N.j0,{name:"first_name",label:"First name",variant:"block",placeholder:"Enter first name of user",disabled:k,"data-testid":"input-first-name"}),(0,t.jsx)(N.j0,{name:"last_name",label:"Last name",variant:"block",placeholder:"Enter last name of user",disabled:k,"data-testid":"input-last-name"}),A&&(0,t.jsx)(N.w8,{name:"password_login_enabled",label:"Allow password login",tooltip:"When enabled, user can log in with username and password. When disabled, user must use SSO.",variant:"stacked",isDisabled:!S,"data-testid":"toggle-allow-password-login",size:"default"}),M(S,_,v,E,C,r.password_login_enabled)&&(0,t.jsx)(N.j0,{name:"password",label:"Password",variant:"block",placeholder:"********",type:"password",tooltip:"Password must contain at least 8 characters, 1 number, 1 capital letter, 1 lowercase letter, and at least 1 symbol.",isRequired:!0,"data-testid":"input-password"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(n.wpx,{onClick:()=>l.push(j.e3),className:"mr-3","data-testid":"cancel-btn",children:"Cancel"}),(0,t.jsx)(n.wpx,{htmlType:"submit",type:"primary",disabled:!s||!i,loading:a,"data-testid":"save-user-btn",children:"Save"})]})]})})}})},Q=e=>{let{onSubmit:s,initialValues:a,...i}=e,c=(0,r.C)(y.Ux);(0,y.Fk)(c,{skip:!c});let h=(0,o.Tg)([d.Sh.USER_PERMISSION_UPDATE]),m=!c||!h,p=[{label:"Profile",key:"profile",children:(0,t.jsx)(J,{onSubmit:s,initialValues:a,...i})},{label:"Permissions",key:"permissions",children:(0,t.jsxs)(n.kCb,{gap:"97px",children:[(0,t.jsx)(n.xuv,{w:{base:"100%",md:"50%",xl:"50%"},children:(0,t.jsx)(A,{})}),(0,t.jsx)(n.xuv,{position:"absolute",top:"96px",right:6,height:"calc(100% + 100px)",overflowY:"scroll",padding:6,w:"35%",borderLeftWidth:"1px",children:(0,t.jsx)(l,{})})]}),disabled:m,forceRender:!m}];return(0,t.jsx)(n.A5g,{items:p})}},31883:function(e,s,a){a.d(s,{Bw:function(){return t.Bw},D4:function(){return t.D4}});var t=a(19043)}}]);
|