passbolt-styleguide 3.8.4 → 3.9.0-alpha2
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.
- package/build/css/help.min.css +3 -3
- package/build/css/public.min.css +3 -3
- package/build/css/themes/default/api_authentication.min.css +3 -3
- package/build/css/themes/default/api_cloud.min.css +3 -3
- package/build/css/themes/default/api_main.min.css +3 -3
- package/build/css/themes/default/api_reports.min.css +3 -3
- package/build/css/themes/default/api_webinstaller.min.css +3 -3
- package/build/css/themes/default/ext_app.min.css +3 -3
- package/build/css/themes/default/ext_authentication.min.css +3 -3
- package/build/css/themes/default/ext_external.min.css +2 -2
- package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/default/ext_quickaccess.min.css +3 -3
- package/build/css/themes/midgar/api_authentication.min.css +3 -3
- package/build/css/themes/midgar/api_main.min.css +3 -3
- package/build/css/themes/midgar/api_reports.min.css +3 -3
- package/build/css/themes/midgar/ext_app.min.css +3 -3
- package/build/css/themes/midgar/ext_authentication.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
- package/build/css/themes/solarized_dark/api_authentication.min.css +1 -1
- package/build/css/themes/solarized_dark/api_main.min.css +1 -1
- package/build/css/themes/solarized_dark/api_reports.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_app.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_authentication.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_in_form_cta.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_in_form_menu.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_quickaccess.min.css +1 -1
- package/build/css/themes/solarized_light/api_authentication.min.css +1 -1
- package/build/css/themes/solarized_light/api_main.min.css +1 -1
- package/build/css/themes/solarized_light/api_reports.min.css +1 -1
- package/build/css/themes/solarized_light/ext_app.min.css +1 -1
- package/build/css/themes/solarized_light/ext_authentication.min.css +1 -1
- package/build/css/themes/solarized_light/ext_in_form_cta.min.css +1 -1
- package/build/css/themes/solarized_light/ext_in_form_menu.min.css +1 -1
- package/build/css/themes/solarized_light/ext_quickaccess.min.css +1 -1
- package/build/js/dist/api-account-recovery.js +1 -1
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-app.js.LICENSE.txt +75 -5
- package/build/js/dist/api-feedback.js +2 -0
- package/build/js/dist/api-feedback.js.LICENSE.txt +45 -0
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-setup.js +1 -1
- package/build/js/dist/api-triage.js +1 -1
- package/build/js/dist/api-vendors.js +1 -1
- package/build/js/dist/api-vendors.js.LICENSE.txt +19 -9
- package/build/js/dist/src/locales/de-DE/common.json +995 -0
- package/build/js/dist/src/locales/en-UK/common.json +1061 -0
- package/build/js/dist/src/locales/es-ES/common.json +995 -0
- package/build/js/dist/src/locales/fr-FR/common.json +995 -0
- package/build/js/dist/src/locales/ja-JP/common.json +980 -0
- package/build/js/dist/src/locales/lt-LT/common.json +1025 -0
- package/build/js/dist/src/locales/nl-NL/common.json +995 -0
- package/build/js/dist/src/locales/pl-PL/common.json +1025 -0
- package/build/js/dist/src/locales/sv-SE/common.json +995 -0
- package/package.json +18 -1
- package/src/img/controls/attention.svg +1 -0
- package/src/locales/en-UK/common.json +80 -16
- package/src/react-extension/ApiApp.js +17 -5
- package/src/react-extension/ApiFeedback.entry.js +24 -0
- package/src/react-extension/ExtApp.js +12 -5
- package/src/react-extension/ExtAuthenticationLogin.js +17 -15
- package/src/react-extension/ExtAuthenticationLogin.test.stories.js +59 -0
- package/src/react-extension/ExtBootstrapApp.js +1 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.js +24 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +3 -3
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +13 -1
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +7 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.js +101 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.data.js +23 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.stories.js +27 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +1 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +78 -2
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +3 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +60 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +23 -4
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationInternationalisationActions/DisplayAdministrationInternationalisationActions.js +125 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationMfaActions/DisplayAdministrationMfaActions.js +131 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSelfRegistrationActions/DisplayAdministrationSelfRegistrationActions.js +103 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSsoActions/DisplayAdministrationSsoActions.js +91 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions.js +85 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationUserDirectoryActions/DisplayAdministrationUserDirectoryActions.js +228 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +4 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +3 -3
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +14 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.page.js +0 -17
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +18 -115
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.data.js +11 -13
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.js +38 -43
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +47 -10
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +10 -43
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +82 -367
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data.js +128 -42
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.js +75 -121
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +46 -16
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +18 -14
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.js +103 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.js +53 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.page.js +81 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.stories.js +34 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.js +125 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.data.js +63 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.js +54 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.page.js +88 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.stories.js +35 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.js +381 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.data.js +69 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.js +332 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.page.js +247 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.stories.js +72 -0
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +19 -19
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.data.js +1717 -1729
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +11 -3
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.page.js +4 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +41 -140
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +15 -3
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +22 -49
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.page.js +19 -11
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +9 -3
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +5 -6
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.data.js +1717 -1728
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +11 -3
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.page.js +4 -1
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +362 -835
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.data.js +427 -418
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +134 -175
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.page.js +108 -11
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +17 -25
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +4 -2
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +3 -3
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +1 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.js +32 -7
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.data.js +0 -3
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.js +145 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.page.js +52 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.stories.js +15 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.js +340 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.data.js +56 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.js +223 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.page.js +235 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.stories.js +55 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/SsoProviders.data.js +34 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +12 -3
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +27 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +8 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.js +197 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.data.js +37 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.js +187 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.page.js +120 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.stories.js +31 -0
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +9 -5
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +4 -0
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +11 -42
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +1 -0
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -5
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +4 -0
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +16 -2
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +17 -1
- package/src/react-extension/components/AuthenticationLogin/Login/Login.js +159 -61
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +14 -11
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +79 -0
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +16 -0
- package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -0
- package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.js +119 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.js +43 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.page.js +108 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.stories.js +39 -0
- package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.test.js +12 -0
- package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItem.js +2 -2
- package/src/react-extension/components/Common/Legacy/HandleLegacyAppjs.js +1 -1
- package/src/react-extension/components/Common/Navigation/Header/Logo.js +13 -1
- package/src/react-extension/components/Resource/CreateResource/CreateResource.js +103 -30
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +44 -10
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +35 -7
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +3 -3
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesListContextualMenu.js +6 -5
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +5 -4
- package/src/react-extension/components/Resource/EditResource/EditResource.js +95 -23
- package/src/react-extension/components/Resource/EditResource/EditResource.test.js +45 -13
- package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +35 -2
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +2 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +3 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +23 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +8 -0
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +26 -2
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +22 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +8 -0
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +25 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +2 -1
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +2 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +14 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.js +8 -0
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +12 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.js +42 -3
- package/src/react-extension/components/User/CreateUser/CreateUser.test.js +16 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +26 -0
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -1
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +5 -5
- package/src/react-extension/components/User/EditUser/EditUser.js +29 -2
- package/src/react-extension/components/User/EditUser/EditUser.test.js +12 -0
- package/src/react-extension/components/User/EditUser/EditUser.test.page.js +26 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +2 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1332 -1331
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +2 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +19 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +9 -0
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +12 -0
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +2 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +16 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -0
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +26 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +6 -4
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +4 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +21 -11
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +10 -1
- package/src/react-extension/contexts/AdminSmtpSettingsContext.js +2 -0
- package/src/react-extension/contexts/AdminSmtpSettingsContext.test.data.js +13 -0
- package/src/react-extension/contexts/AdminSmtpSettingsContext.test.js +3 -1
- package/src/react-extension/contexts/AdminSsoContext.js +558 -0
- package/src/react-extension/contexts/AdminSsoContext.test.data.js +51 -0
- package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.js +194 -0
- package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.test.js +111 -0
- package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.js +265 -0
- package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.test.js +178 -0
- package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.js +453 -0
- package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.test.js +218 -0
- package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.js +168 -0
- package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.test.js +73 -0
- package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.js +353 -0
- package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.test.js +220 -0
- package/src/react-extension/contexts/AdministrationWorkspaceContext.js +17 -178
- package/src/react-extension/contexts/AdministrationWorkspaceContext.test.js +0 -26
- package/src/react-extension/contexts/ApiAppContext.test.data.js +4 -2
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +54 -4
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +10 -1
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +92 -14
- package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +1 -0
- package/src/react-extension/contexts/NavigationContext.js +34 -0
- package/src/react-extension/contexts/SsoContext.js +151 -0
- package/src/react-extension/contexts/SsoContext.test.data.js +36 -0
- package/src/react-extension/contexts/SsoContext.test.js +104 -0
- package/src/react-extension/lib/Domain/DomainUtil.js +70 -0
- package/src/react-extension/lib/Domain/DomainUtil.test.js +129 -0
- package/src/react-extension/lib/Domain/Domains.js +6113 -0
- package/src/react-extension/lib/Error/InputValidator.js +24 -0
- package/src/react-extension/lib/Map/DynamicRef.js +49 -0
- package/src/react-extension/lib/Map/DynamicRef.test.js +56 -0
- package/src/react-extension/lib/Map/MapObject.js +48 -0
- package/src/react-extension/lib/Map/MapObject.test.js +43 -0
- package/src/react-quickaccess/ExtQuickAccess.js +7 -4
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -1
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +4 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +115 -4
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.data.js +10 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +30 -3
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +33 -1
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +25 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.js +60 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.page.js +60 -0
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +33 -1
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +36 -7
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -2
- package/src/react-quickaccess/contexts/SsoContext.js +150 -0
- package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +5 -0
- package/src/shared/constants/inputs.const.js +30 -0
- package/src/shared/lib/Browser/clipBoard.js +45 -0
- package/src/shared/lib/Browser/clipBoard.test.js +59 -0
- package/src/shared/models/Mfa/Duo.js +36 -0
- package/src/shared/models/Mfa/Duo.test.js +59 -0
- package/src/shared/models/Mfa/MfaDTO.js +51 -0
- package/src/shared/models/Mfa/MfaDTO.test.js +48 -0
- package/src/shared/models/Mfa/MfaEnumeration.js +17 -0
- package/src/shared/models/Mfa/MfaModel.js +48 -0
- package/src/shared/models/Mfa/MfaModel.test.js +37 -0
- package/src/shared/models/Mfa/Yubikey.js +35 -0
- package/src/shared/models/Mfa/Yubikey.test.js +47 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.js +55 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.test.js +37 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDto.js +42 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDto.test.js +48 -0
- package/src/shared/models/selfRegistration/SelfRegistrationEnumeration.js +17 -0
- package/src/shared/models/subscription/SubscriptionDto.js +34 -0
- package/src/shared/models/subscription/SubscriptionDto.test.js +31 -0
- package/src/shared/models/subscription/SubscriptionModel.js +33 -0
- package/src/shared/models/subscription/SubscriptionModel.test.js +48 -0
- package/src/shared/models/user/UserModel.js +37 -0
- package/src/shared/models/userDirectory/UserDirectoryDTO.js +57 -0
- package/src/shared/models/userDirectory/UserDirectoryDTO.test.js +40 -0
- package/src/shared/models/userDirectory/UserDirectoryEnum.js +22 -0
- package/src/shared/models/userDirectory/UserDirectoryModel.js +64 -0
- package/src/shared/models/userDirectory/UserDirectoryModel.test.js +37 -0
- package/src/shared/services/actions/subscription/SubscriptionActionService.js +69 -0
- package/src/shared/services/actions/subscription/SubscriptionActionService.test.js +73 -0
- package/src/shared/services/api/Internationalisation/InternationalisationService.js +46 -0
- package/src/shared/services/api/Mfa/MfaService.js +54 -0
- package/src/shared/services/{accountRecovery → api/accountRecovery}/ApiAppAccountRecoveryUserService.js +2 -2
- package/src/shared/services/{accountRecovery → api/accountRecovery}/ExtAppAccountRecoveryUserService.js +0 -0
- package/src/shared/services/api/secrets/pownedService.js +64 -0
- package/src/shared/services/api/secrets/pownedService.test.js +63 -0
- package/src/shared/services/api/selfRegistration/selfRegistrationService.js +64 -0
- package/src/shared/services/api/user/UserService.js +45 -0
- package/src/shared/services/api/userDirectory/UserDirectoryService.js +108 -0
- package/src/shared/services/forms/Mfa/MfaFormService.js +195 -0
- package/src/shared/services/forms/Mfa/MfaFormService.test.js +341 -0
- package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.js +92 -0
- package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.test.js +101 -0
- package/src/shared/services/forms/userDirectory/UserDirectoryFormService.js +118 -0
- package/src/shared/services/forms/userDirectory/UserDirectoryFormService.test.js +128 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +0 -205
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.data.js +0 -37
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.js +0 -197
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.page.js +0 -133
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.8.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import PropTypes from "prop-types";
|
|
17
|
+
import {Trans, withTranslation} from "react-i18next";
|
|
18
|
+
import Icon from "../../../../../shared/components/Icons/Icon";
|
|
19
|
+
import DisplaySimulateSynchronizeUserDirectoryAdministration from "../../DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration";
|
|
20
|
+
import DisplaySynchronizeUserDirectoryAdministration from "../../DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration";
|
|
21
|
+
import UserDirectoryFormService from '../../../../../shared/services/forms/userDirectory/UserDirectoryFormService';
|
|
22
|
+
import {withAdminUserDirectory} from "../../../../contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext";
|
|
23
|
+
import {withActionFeedback} from "../../../../contexts/ActionFeedbackContext";
|
|
24
|
+
import {withDialog} from "../../../../contexts/DialogContext";
|
|
25
|
+
import DisplayTestUserDirectoryAdministration from "../../DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration";
|
|
26
|
+
import {withAppContext} from "../../../../contexts/AppContext";
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* This component is a container of multiple actions applicable on setting
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
class DisplayAdministrationUserDirectoryActions extends React.Component {
|
|
34
|
+
/**
|
|
35
|
+
* Constructor
|
|
36
|
+
* @param {Object} props
|
|
37
|
+
*/
|
|
38
|
+
constructor(props) {
|
|
39
|
+
super(props);
|
|
40
|
+
this.bindCallbacks();
|
|
41
|
+
this.state = this.defaultState;
|
|
42
|
+
this.userDirectoryFormService = UserDirectoryFormService.getInstance(this.props.adminUserDirectoryContext, this.props.t);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Whenever the component has updated in terms of props or state
|
|
47
|
+
* @param prevProps
|
|
48
|
+
*/
|
|
49
|
+
componentDidUpdate() {
|
|
50
|
+
if (this.props.adminUserDirectoryContext.mustOpenSynchronizePopUp()) {
|
|
51
|
+
this.props.adminUserDirectoryContext.requestSynchronization(false);
|
|
52
|
+
this.handleSynchronizeClick();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Handle save settings
|
|
58
|
+
*/
|
|
59
|
+
async handleSaveClick() {
|
|
60
|
+
const settings = this.props.adminUserDirectoryContext.getSettings();
|
|
61
|
+
if (settings.userDirectoryToggle) {
|
|
62
|
+
await this.props.adminUserDirectoryContext.save();
|
|
63
|
+
} else {
|
|
64
|
+
await this.props.adminUserDirectoryContext.delete();
|
|
65
|
+
}
|
|
66
|
+
this.handleSaveSuccess();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
async handleFormSubmit(action) {
|
|
71
|
+
try {
|
|
72
|
+
const isValid = await this.userDirectoryFormService.validate();
|
|
73
|
+
if (isValid) {
|
|
74
|
+
switch (action) {
|
|
75
|
+
case 'save':
|
|
76
|
+
await this.handleSaveClick();
|
|
77
|
+
break;
|
|
78
|
+
case 'test':
|
|
79
|
+
await this.handleTestClick();
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch (error) {
|
|
84
|
+
this.handleSubmitError(error);
|
|
85
|
+
} finally {
|
|
86
|
+
this.props.adminUserDirectoryContext.setSubmitted(true);
|
|
87
|
+
this.props.adminUserDirectoryContext.setProcessing(false);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* handle test settings
|
|
93
|
+
*/
|
|
94
|
+
async handleTestClick() {
|
|
95
|
+
const result = await this.props.adminUserDirectoryContext.test();
|
|
96
|
+
const displayTestUserDirectoryDialogProps = {
|
|
97
|
+
userDirectoryTestResult: result.body
|
|
98
|
+
};
|
|
99
|
+
this.props.context.setContext({displayTestUserDirectoryDialogProps});
|
|
100
|
+
this.props.dialogContext.open(DisplayTestUserDirectoryAdministration);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Is save button enable
|
|
105
|
+
* @returns {boolean}
|
|
106
|
+
*/
|
|
107
|
+
isSaveEnabled() {
|
|
108
|
+
return !this.props.adminUserDirectoryContext.isProcessing() && this.props.adminUserDirectoryContext.hasSettingsChanges();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Is test button is enable
|
|
113
|
+
* @returns {boolean}
|
|
114
|
+
*/
|
|
115
|
+
isTestEnabled() {
|
|
116
|
+
return !this.props.adminUserDirectoryContext.isProcessing() && this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Is Synchronize button is enable
|
|
122
|
+
* @returns {boolean}
|
|
123
|
+
*/
|
|
124
|
+
isSynchronizeEnabled() {
|
|
125
|
+
return !this.props.adminUserDirectoryContext.isProcessing() && this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle && this.props.adminUserDirectoryContext.getCurrentSettings().userDirectoryToggle;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Bind callbacks methods
|
|
130
|
+
*/
|
|
131
|
+
bindCallbacks() {
|
|
132
|
+
this.handleSaveClick = this.handleSaveClick.bind(this);
|
|
133
|
+
this.handleTestClick = this.handleTestClick.bind(this);
|
|
134
|
+
this.handleSimulateSynchronizeClick = this.handleSimulateSynchronizeClick.bind(this);
|
|
135
|
+
this.handleSynchronizeClick = this.handleSynchronizeClick.bind(this);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Handle simulate synchronize settings
|
|
140
|
+
*/
|
|
141
|
+
handleSimulateSynchronizeClick() {
|
|
142
|
+
this.props.dialogContext.open(DisplaySimulateSynchronizeUserDirectoryAdministration);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Handle synchronize settings
|
|
147
|
+
*/
|
|
148
|
+
handleSynchronizeClick() {
|
|
149
|
+
this.props.dialogContext.open(DisplaySynchronizeUserDirectoryAdministration);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Handle save operation success.
|
|
154
|
+
*/
|
|
155
|
+
async handleSaveSuccess() {
|
|
156
|
+
await this.props.actionFeedbackContext.displaySuccess(this.props.t("The user directory settings for the organization were updated."));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Handle save operation error.
|
|
161
|
+
* @param {object} error The returned error
|
|
162
|
+
*/
|
|
163
|
+
async handleSubmitError(error) {
|
|
164
|
+
// It can happen when the userx has closed the passphrase entry dialog by instance.
|
|
165
|
+
if (error.name !== "UserAbortsOperationError") {
|
|
166
|
+
// Unexpected error occurred.
|
|
167
|
+
console.error(error);
|
|
168
|
+
await this.handleError(error);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* handle error to display the error dialog
|
|
174
|
+
* @param error
|
|
175
|
+
*/
|
|
176
|
+
async handleError(error) {
|
|
177
|
+
await this.props.actionFeedbackContext.displayError(error.message);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Render the component
|
|
182
|
+
* @returns {JSX}
|
|
183
|
+
*/
|
|
184
|
+
render() {
|
|
185
|
+
return (
|
|
186
|
+
<div className="col2_3 actions-wrapper">
|
|
187
|
+
<div className="actions">
|
|
188
|
+
<div>
|
|
189
|
+
<li>
|
|
190
|
+
<a className={`button ${this.isSaveEnabled() ? "" : "disabled"}`} onClick={() => this.handleFormSubmit('save')}>
|
|
191
|
+
<Icon name="save"/>
|
|
192
|
+
<span><Trans>Save settings</Trans></span>
|
|
193
|
+
</a>
|
|
194
|
+
</li>
|
|
195
|
+
<li>
|
|
196
|
+
<a className={`button ${this.isTestEnabled() ? "" : "disabled"}`} onClick={() => this.handleFormSubmit('test')}>
|
|
197
|
+
<Icon name="plug"/>
|
|
198
|
+
<span><Trans>Test settings</Trans></span>
|
|
199
|
+
</a>
|
|
200
|
+
</li>
|
|
201
|
+
<li>
|
|
202
|
+
<a className={`button ${this.isSynchronizeEnabled() ? "" : "disabled"}`} onClick={this.handleSimulateSynchronizeClick}>
|
|
203
|
+
<Icon name="magic-wand"/>
|
|
204
|
+
<span><Trans>Simulate synchronize</Trans></span>
|
|
205
|
+
</a>
|
|
206
|
+
</li>
|
|
207
|
+
<li>
|
|
208
|
+
<a className={`button ${this.isSynchronizeEnabled() ? "" : "disabled"}`} onClick={this.handleSynchronizeClick}>
|
|
209
|
+
<Icon name="refresh"/>
|
|
210
|
+
<span><Trans>Synchronize</Trans></span>
|
|
211
|
+
</a>
|
|
212
|
+
</li>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
DisplayAdministrationUserDirectoryActions.propTypes = {
|
|
221
|
+
context: PropTypes.object, // Application context
|
|
222
|
+
dialogContext: PropTypes.object, // The dialog notification context
|
|
223
|
+
adminUserDirectoryContext: PropTypes.object, // The email notification context
|
|
224
|
+
actionFeedbackContext: PropTypes.object, // The action feedback context
|
|
225
|
+
t: PropTypes.func, // The translation function
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
export default withAppContext(withActionFeedback(withDialog(withAdminUserDirectory(withTranslation("common")(DisplayAdministrationUserDirectoryActions)))));
|
|
@@ -63,6 +63,10 @@ class DisplayAdministrationWorkspaceBreadcrumb extends Component {
|
|
|
63
63
|
return this.translate("Account Recovery");
|
|
64
64
|
case AdministrationWorkspaceMenuTypes.SMTP_SETTINGS:
|
|
65
65
|
return this.translate("Email server");
|
|
66
|
+
case AdministrationWorkspaceMenuTypes.SELF_REGISTRATION:
|
|
67
|
+
return this.translate("Self Registration");
|
|
68
|
+
case AdministrationWorkspaceMenuTypes.SSO:
|
|
69
|
+
return this.translate("Single Sign-On");
|
|
66
70
|
default:
|
|
67
71
|
return "";
|
|
68
72
|
}
|
|
@@ -93,4 +93,13 @@ describe("As AD I can see a Breadcrumb", () => {
|
|
|
93
93
|
expect(page.item(2)).toBe("Account Recovery");
|
|
94
94
|
expect(page.item(3)).toBe("Settings");
|
|
95
95
|
});
|
|
96
|
+
|
|
97
|
+
it('As AD I should see a breadcrumb for self registration', () => {
|
|
98
|
+
const props = defaultProps(AdministrationWorkspaceMenuTypes.SELF_REGISTRATION); // The props to pass
|
|
99
|
+
page = new DisplayAdministrationWorkspaceBreadcrumbPage(context, props);
|
|
100
|
+
expect(page.count).toBe(3);
|
|
101
|
+
expect(page.item(1)).toBe("Administration");
|
|
102
|
+
expect(page.item(2)).toBe("Self Registration");
|
|
103
|
+
expect(page.item(3)).toBe("Settings");
|
|
104
|
+
});
|
|
96
105
|
});
|
|
@@ -320,21 +320,21 @@ class DisplayEmailNotificationsAdministration extends React.Component {
|
|
|
320
320
|
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="accountRecoveryRequestAdmin" disabled={this.hasAllInputDisabled()}
|
|
321
321
|
onChange={this.handleInputChange} checked={settings.accountRecoveryRequestAdmin} id="account-recovery-request-admin-toggle-button"/>
|
|
322
322
|
<label className="text" htmlFor="account-recovery-request-admin-toggle-button">
|
|
323
|
-
<Trans>When an account recovery is requested, notify the administrators.</Trans>
|
|
323
|
+
<Trans>When an account recovery is requested, notify all the administrators.</Trans>
|
|
324
324
|
</label>
|
|
325
325
|
</span>
|
|
326
326
|
<span className="input toggle-switch form-element">
|
|
327
327
|
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="accountRecoveryRequestPolicyUpdate" disabled={this.hasAllInputDisabled()}
|
|
328
328
|
onChange={this.handleInputChange} checked={settings.accountRecoveryRequestPolicyUpdate} id="account-recovery-policy-update-toggle-button"/>
|
|
329
329
|
<label className="text" htmlFor="account-recovery-policy-update-toggle-button">
|
|
330
|
-
<Trans>When an account recovery policy is updated, notify the administrators.</Trans>
|
|
330
|
+
<Trans>When an account recovery policy is updated, notify all the administrators.</Trans>
|
|
331
331
|
</label>
|
|
332
332
|
</span>
|
|
333
333
|
<span className="input toggle-switch form-element">
|
|
334
334
|
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="accountRecoveryRequestCreatedAmin" disabled={this.hasAllInputDisabled()}
|
|
335
335
|
onChange={this.handleInputChange} checked={settings.accountRecoveryRequestCreatedAmin} id="account-recovery-response-created-admin-toggle-button"/>
|
|
336
336
|
<label className="text" htmlFor="account-recovery-response-created-admin-toggle-button">
|
|
337
|
-
<Trans>When an administrator answered to an account recovery request, notify the administrator.</Trans>
|
|
337
|
+
<Trans>When an administrator answered to an account recovery request, notify the administrator at the origin of the action.</Trans>
|
|
338
338
|
</label>
|
|
339
339
|
</span>
|
|
340
340
|
<span className="input toggle-switch form-element">
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.8.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
1
15
|
import {defaultAppContext} from "../../../contexts/ApiAppContext.test.data";
|
|
2
16
|
|
|
3
17
|
/**
|
|
@@ -217,23 +217,6 @@ export default class DisplayEmailNotificationsAdministrationPage {
|
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
/**
|
|
221
|
-
* Simulates a click on the given HTML element.
|
|
222
|
-
* The clicks is consider done when the callback returns {true}.
|
|
223
|
-
* @param {HTMLElement} element The HTML element onto simulate the click
|
|
224
|
-
* @param {function} callback The callback to be used in the waitFor method to ensure the click is done (returns true when it's done)
|
|
225
|
-
* @returns {Promise<void>}
|
|
226
|
-
*/
|
|
227
|
-
async clickOn(element, callback) {
|
|
228
|
-
const leftClick = {button: 0};
|
|
229
|
-
fireEvent.click(element, leftClick);
|
|
230
|
-
await waitFor(() => {
|
|
231
|
-
if (!callback()) {
|
|
232
|
-
throw new Error("Page didn't react yet on the event.");
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
|
|
237
220
|
/**
|
|
238
221
|
* Returns true if the save button in the toolbar is enabled.
|
|
239
222
|
* @returns {boolean}
|
|
@@ -13,12 +13,13 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import React from "react";
|
|
15
15
|
import PropTypes from "prop-types";
|
|
16
|
-
import {withActionFeedback} from "../../../../react-extension/contexts/ActionFeedbackContext";
|
|
17
16
|
import {withAdministrationWorkspace} from "../../../contexts/AdministrationWorkspaceContext";
|
|
18
17
|
import {Trans, withTranslation} from "react-i18next";
|
|
19
18
|
import {withAppContext} from "../../../contexts/AppContext";
|
|
20
19
|
import Icon from "../../../../shared/components/Icons/Icon";
|
|
21
20
|
import Select from "../../Common/Select/Select";
|
|
21
|
+
import DisplayAdministrationInternationalisationActions from "../DisplayAdministrationWorkspaceActions/DisplayAdministrationInternationalisationActions/DisplayAdministrationInternationalisationActions";
|
|
22
|
+
import {withAdminInternationalization} from "../../../contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext";
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* This component allows to display the internationalisation for the administration
|
|
@@ -35,28 +36,22 @@ class DisplayInternationalizationAdministration extends React.Component {
|
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
39
|
+
* ComponentDidMount
|
|
40
|
+
* Invoked immediately after component is inserted into the tree
|
|
41
|
+
* @return {void}
|
|
40
42
|
*/
|
|
41
|
-
get defaultState() {
|
|
42
|
-
return {
|
|
43
|
-
loading: true, // component is loading or not
|
|
44
|
-
processing: false, // component is processing or not
|
|
45
|
-
|
|
46
|
-
locale: "" // The default app locale
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
43
|
async componentDidMount() {
|
|
51
|
-
this.
|
|
44
|
+
this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(DisplayAdministrationInternationalisationActions);
|
|
45
|
+
this.props.adminInternationalizationContext.findLocale();
|
|
52
46
|
}
|
|
53
47
|
|
|
54
48
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
49
|
+
* componentWillUnmount
|
|
50
|
+
* Use to clear the data from the form in case the user put something that needs to be cleared.
|
|
57
51
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
componentWillUnmount() {
|
|
53
|
+
this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction();
|
|
54
|
+
this.props.adminInternationalizationContext.clearContext();
|
|
60
55
|
}
|
|
61
56
|
|
|
62
57
|
/**
|
|
@@ -66,108 +61,14 @@ class DisplayInternationalizationAdministration extends React.Component {
|
|
|
66
61
|
this.handleInputChange = this.handleInputChange.bind(this);
|
|
67
62
|
}
|
|
68
63
|
|
|
69
|
-
/**
|
|
70
|
-
* Handle the must save change
|
|
71
|
-
* @param previousMustSaveSettings Previous must save settings
|
|
72
|
-
*/
|
|
73
|
-
async handleMustSave(previousMustSaveSettings) {
|
|
74
|
-
const hasMustSaveChanged = this.props.administrationWorkspaceContext.must.save !== previousMustSaveSettings;
|
|
75
|
-
if (hasMustSaveChanged && this.props.administrationWorkspaceContext.must.save) {
|
|
76
|
-
await this.handleFormSubmit();
|
|
77
|
-
this.props.administrationWorkspaceContext.onResetActionsSettings();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
64
|
/**
|
|
82
65
|
* Handle form input changes.
|
|
83
66
|
* @params {ReactEvent} The react event
|
|
84
67
|
* @returns {void}
|
|
85
68
|
*/
|
|
86
69
|
handleInputChange(event) {
|
|
87
|
-
|
|
88
|
-
const value = target.value;
|
|
89
|
-
const name = target.name;
|
|
90
|
-
this.setState({[name]: value});
|
|
91
|
-
this.handleEnabledSaveButton();
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Handle enabled the save button
|
|
96
|
-
*/
|
|
97
|
-
handleEnabledSaveButton() {
|
|
98
|
-
if (!this.props.administrationWorkspaceContext.can.save) {
|
|
99
|
-
this.props.administrationWorkspaceContext.onSaveEnabled();
|
|
100
|
-
}
|
|
70
|
+
this.props.adminInternationalizationContext.setLocale(event.target.value);
|
|
101
71
|
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Should input be disabled? True if state is loading or processing
|
|
105
|
-
* @returns {boolean}
|
|
106
|
-
*/
|
|
107
|
-
hasAllInputDisabled() {
|
|
108
|
-
return this.state.processing || this.state.loading;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Handle form submit event.
|
|
113
|
-
* @params {ReactEvent} The react event
|
|
114
|
-
* @returns {void}
|
|
115
|
-
*/
|
|
116
|
-
async handleFormSubmit() {
|
|
117
|
-
// Do not re-submit an already processing form
|
|
118
|
-
if (!this.state.processing) {
|
|
119
|
-
await this.toggleProcessing();
|
|
120
|
-
try {
|
|
121
|
-
await this.props.administrationWorkspaceContext.onSaveLocaleRequested(this.state.locale);
|
|
122
|
-
await this.handleSaveSuccess();
|
|
123
|
-
} catch (error) {
|
|
124
|
-
await this.handleSaveError(error);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Handle save operation success.
|
|
131
|
-
*/
|
|
132
|
-
async handleSaveSuccess() {
|
|
133
|
-
this.props.context.onRefreshLocaleRequested(this.state.locale);
|
|
134
|
-
await this.props.actionFeedbackContext.displaySuccess(this.props.t("The internationalization settings were updated."));
|
|
135
|
-
this.setState({processing: false});
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Handle save operation error.
|
|
140
|
-
* @param {object} error The returned error
|
|
141
|
-
*/
|
|
142
|
-
async handleSaveError(error) {
|
|
143
|
-
// It can happen when the user has closed the passphrase entry dialog by instance.
|
|
144
|
-
if (error.name === "UserAbortsOperationError") {
|
|
145
|
-
this.setState({processing: false});
|
|
146
|
-
} else {
|
|
147
|
-
// Unexpected error occurred.
|
|
148
|
-
console.error(error);
|
|
149
|
-
await this.handleError(error);
|
|
150
|
-
this.setState({processing: false});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* handle error to display the error dialog
|
|
156
|
-
* @param error
|
|
157
|
-
*/
|
|
158
|
-
async handleError(error) {
|
|
159
|
-
await this.props.actionFeedbackContext.displayError(error.message);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Toggle processing state
|
|
164
|
-
* @returns {Promise<void>}
|
|
165
|
-
*/
|
|
166
|
-
async toggleProcessing() {
|
|
167
|
-
const prev = this.state.processing;
|
|
168
|
-
return this.setState({processing: !prev});
|
|
169
|
-
}
|
|
170
|
-
|
|
171
72
|
/**
|
|
172
73
|
* Get the supported locales
|
|
173
74
|
* @returns {array}
|
|
@@ -184,6 +85,8 @@ class DisplayInternationalizationAdministration extends React.Component {
|
|
|
184
85
|
* @returns {JSX}
|
|
185
86
|
*/
|
|
186
87
|
render() {
|
|
88
|
+
const lang = this.props.adminInternationalizationContext.getLocale();
|
|
89
|
+
|
|
187
90
|
return (
|
|
188
91
|
<div className="row">
|
|
189
92
|
<div className="internationalisation-settings col7 main-column">
|
|
@@ -191,7 +94,7 @@ class DisplayInternationalizationAdministration extends React.Component {
|
|
|
191
94
|
<form className="form">
|
|
192
95
|
<div className="select-wrapper input">
|
|
193
96
|
<label htmlFor="app-locale-input"><Trans>Language</Trans></label>
|
|
194
|
-
<Select className="medium" id="locale-input" name="locale" items={this.supportedLocales} value={
|
|
97
|
+
<Select className="medium" id="locale-input" name="locale" items={this.supportedLocales} value={lang} onChange={this.handleInputChange}/>
|
|
195
98
|
<p><Trans>The default language of the organisation.</Trans></p>
|
|
196
99
|
</div>
|
|
197
100
|
</form>
|
|
@@ -214,8 +117,8 @@ class DisplayInternationalizationAdministration extends React.Component {
|
|
|
214
117
|
DisplayInternationalizationAdministration.propTypes = {
|
|
215
118
|
context: PropTypes.object, // The application context
|
|
216
119
|
administrationWorkspaceContext: PropTypes.object, // The administration workspace context
|
|
217
|
-
|
|
120
|
+
adminInternationalizationContext: PropTypes.object, // The administration internationalization context
|
|
218
121
|
t: PropTypes.func, // The translation function
|
|
219
122
|
};
|
|
220
123
|
|
|
221
|
-
export default withAppContext(
|
|
124
|
+
export default withAppContext(withAdminInternationalization(withAdministrationWorkspace(withTranslation('common')(DisplayInternationalizationAdministration))));
|
|
@@ -2,24 +2,22 @@
|
|
|
2
2
|
* Default props
|
|
3
3
|
* @returns {{resource: {id: string, name: string}}}
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
6
|
-
import siteSettingsFixture from "../../../test/fixture/Settings/siteSettings";
|
|
5
|
+
import {defaultAppContext} from "../../../contexts/ApiAppContext.test.data";
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
export function defaultProps() {
|
|
10
9
|
return {
|
|
11
|
-
context:
|
|
12
|
-
siteSettings: new SiteSettings(siteSettingsFixture)
|
|
13
|
-
},
|
|
10
|
+
context: defaultAppContext(),
|
|
14
11
|
administrationWorkspaceContext: {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
},
|
|
22
|
-
onSaveEnabled: jest.fn(),
|
|
12
|
+
setDisplayAdministrationWorkspaceAction: jest.fn(),
|
|
13
|
+
resetDisplayAdministrationWorkspaceAction: jest.fn()
|
|
14
|
+
},
|
|
15
|
+
actionFeedbackContext: {
|
|
16
|
+
displaySuccess: () => jest.fn(),
|
|
17
|
+
displayError: jest.fn()
|
|
23
18
|
}
|
|
24
19
|
};
|
|
25
20
|
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
export const defaultLocale = "en-UK";
|
|
@@ -21,15 +21,14 @@ import {defaultProps} from "./DisplayInternationalizationAdministration.test.dat
|
|
|
21
21
|
import DisplayInternationalisationAdministrationPage from "./DisplayInternationalizationAdministration.test.page";
|
|
22
22
|
import {waitFor} from "@testing-library/react";
|
|
23
23
|
import {ActionFeedbackContext} from "../../../contexts/ActionFeedbackContext";
|
|
24
|
-
import
|
|
25
|
-
import
|
|
26
|
-
import PassboltApiFetchError from "../../../../shared/lib/Error/PassboltApiFetchError";
|
|
24
|
+
import {enableFetchMocks} from 'jest-fetch-mock';
|
|
25
|
+
import {mockApiResponse} from '../../../../../test/mocks/mockApiResponse';
|
|
27
26
|
|
|
28
27
|
beforeEach(() => {
|
|
28
|
+
enableFetchMocks();
|
|
29
29
|
jest.resetModules();
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
|
|
33
32
|
describe("As AD I should see the internationalisation page", () => {
|
|
34
33
|
let page; // The page to test against
|
|
35
34
|
const props = defaultProps(); // The props to pass
|
|
@@ -50,51 +49,47 @@ describe("As AD I should see the internationalisation page", () => {
|
|
|
50
49
|
});
|
|
51
50
|
|
|
52
51
|
it('As AD I should be able to see a visual feedback after I saved the internationalisation settings in the administration internationalisation page', async() => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const propsUpdated = {
|
|
56
|
-
context: {
|
|
57
|
-
siteSettings: new SiteSettings(siteSettingsFixture),
|
|
58
|
-
onRefreshLocaleRequested: jest.fn()
|
|
59
|
-
},
|
|
60
|
-
administrationWorkspaceContext: {
|
|
61
|
-
must: {
|
|
62
|
-
save: true
|
|
63
|
-
},
|
|
64
|
-
onResetActionsSettings: jest.fn(),
|
|
65
|
-
onSaveLocaleRequested: jest.fn()
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
jest.spyOn(propsUpdated.administrationWorkspaceContext, 'onSaveLocaleRequested').mockImplementationOnce(() => {});
|
|
52
|
+
//Call to save the settings
|
|
53
|
+
fetch.doMockOnceIf(/locale\/settings*/, () => mockApiResponse({}));
|
|
69
54
|
jest.spyOn(ActionFeedbackContext._currentValue, 'displaySuccess').mockImplementation(() => {});
|
|
70
|
-
|
|
55
|
+
|
|
56
|
+
//button should be disable by default
|
|
57
|
+
expect(page.isSaveButtonEnabled()).toBeFalsy();
|
|
58
|
+
|
|
59
|
+
await page.selectLanguageEs();
|
|
60
|
+
expect(page.isSaveButtonEnabled()).toBeTruthy();
|
|
61
|
+
await page.saveLocale();
|
|
71
62
|
await waitFor(() => {});
|
|
72
|
-
|
|
73
|
-
expect(propsUpdated.administrationWorkspaceContext.onResetActionsSettings).toHaveBeenCalled();
|
|
74
|
-
expect(propsUpdated.context.onRefreshLocaleRequested).toHaveBeenCalledWith("fr-FR");
|
|
63
|
+
|
|
75
64
|
expect(ActionFeedbackContext._currentValue.displaySuccess).toHaveBeenCalledWith("The internationalization settings were updated.");
|
|
65
|
+
expect(page.isSaveButtonEnabled()).toBeFalsy();
|
|
76
66
|
});
|
|
77
67
|
|
|
78
|
-
it('As AD I should
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
onSaveLocaleRequested: jest.fn(),
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
jest.spyOn(propsUpdated.administrationWorkspaceContext, 'onSaveLocaleRequested').mockImplementationOnce(() => {
|
|
92
|
-
throw new PassboltApiFetchError("Error");
|
|
93
|
-
}); jest.spyOn(ActionFeedbackContext._currentValue, 'displayError').mockImplementation(() => {});
|
|
94
|
-
page.rerender(propsUpdated);
|
|
68
|
+
it('As AD I should see an error toaster if the submit operation fails for an unexpected reason', async() => {
|
|
69
|
+
// Mock the request function to make it return an error.
|
|
70
|
+
const error = {message: "The service is unavailable"};
|
|
71
|
+
fetch.doMockOnceIf(/locale\/settings*/, () => Promise.reject(error));
|
|
72
|
+
|
|
73
|
+
//button should be disable by default
|
|
74
|
+
expect(page.isSaveButtonEnabled()).toBeFalsy();
|
|
75
|
+
await page.selectLanguageFr();
|
|
76
|
+
jest.spyOn(ActionFeedbackContext._currentValue, 'displayError').mockImplementation(() => {});
|
|
77
|
+
await page.saveLocale();
|
|
95
78
|
await waitFor(() => {});
|
|
96
|
-
|
|
97
|
-
expect(
|
|
79
|
+
|
|
80
|
+
expect(page.title).toBe("Internationalisation");
|
|
81
|
+
// Throw general error message
|
|
82
|
+
expect(ActionFeedbackContext._currentValue.displayError).toHaveBeenCalledWith("The service is unavailable");
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('As AD I should not be able to click on save if there is no change', async() => {
|
|
86
|
+
//button should be disable by default
|
|
87
|
+
expect(page.isSaveButtonEnabled()).toBeFalsy();
|
|
88
|
+
await page.selectLanguageFr();
|
|
89
|
+
//We set the value by default
|
|
90
|
+
await page.selectLanguageEn();
|
|
91
|
+
//button should be disable by default
|
|
92
|
+
expect(page.isSaveButtonEnabled()).toBeFalsy();
|
|
98
93
|
});
|
|
99
94
|
});
|
|
100
95
|
});
|