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
|
@@ -20,6 +20,7 @@ import {withAppContext} from "../../../contexts/AppContext";
|
|
|
20
20
|
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
21
21
|
import {DateTime} from "luxon";
|
|
22
22
|
import {Trans, withTranslation} from "react-i18next";
|
|
23
|
+
import ClipBoard from '../../../../shared/lib/Browser/clipBoard';
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* This component displays the user details about public key
|
|
@@ -179,7 +180,7 @@ class DisplayUserDetailsPublicKey extends React.Component {
|
|
|
179
180
|
*/
|
|
180
181
|
async handlePublicKeyCopy() {
|
|
181
182
|
const armoredKey = this.state.gpgkeyInfo.armoredKey;
|
|
182
|
-
await
|
|
183
|
+
await ClipBoard.copy(armoredKey, this.props.context.port);
|
|
183
184
|
this.props.actionFeedbackContext.displaySuccess(this.translate("The public key has been copied to clipboard"));
|
|
184
185
|
}
|
|
185
186
|
|
|
@@ -25,6 +25,9 @@ import {withDialog} from "../../../contexts/DialogContext";
|
|
|
25
25
|
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
26
26
|
import {Trans, withTranslation} from "react-i18next";
|
|
27
27
|
import EditUserGroupItem from "../EditUserGroup/EditUserGroupItem";
|
|
28
|
+
import {maxSizeValidation} from '../../../lib/Error/InputValidator';
|
|
29
|
+
import Icon from "../../../../shared/components/Icons/Icon";
|
|
30
|
+
import {RESOURCE_GROUP_NAME_MAX_LENGTH} from '../../../../shared/constants/inputs.const';
|
|
28
31
|
|
|
29
32
|
class CreateUserGroup extends Component {
|
|
30
33
|
/**
|
|
@@ -51,6 +54,7 @@ class CreateUserGroup extends Component {
|
|
|
51
54
|
// Input fields
|
|
52
55
|
name: '',
|
|
53
56
|
nameError: "",
|
|
57
|
+
nameWarning: "",
|
|
54
58
|
|
|
55
59
|
// group users list
|
|
56
60
|
groups_users: [],
|
|
@@ -143,6 +147,8 @@ class CreateUserGroup extends Component {
|
|
|
143
147
|
handleNameInputKeyUp() {
|
|
144
148
|
const state = this.validateNameInput();
|
|
145
149
|
this.setState(state);
|
|
150
|
+
const nameWarning = maxSizeValidation(this.state.name, RESOURCE_GROUP_NAME_MAX_LENGTH, this.translate);
|
|
151
|
+
this.setState({nameWarning});
|
|
146
152
|
}
|
|
147
153
|
|
|
148
154
|
/**
|
|
@@ -520,13 +526,20 @@ class CreateUserGroup extends Component {
|
|
|
520
526
|
<form className="group-form" onSubmit={this.handleFormSubmit} noValidate>
|
|
521
527
|
<div className="form-content">
|
|
522
528
|
<div className={`input text required ${this.state.nameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
523
|
-
<label htmlFor="group_name"><Trans>Group name</Trans
|
|
529
|
+
<label htmlFor="group_name"><Trans>Group name</Trans>{this.state.nameWarning &&
|
|
530
|
+
<Icon name="exclamation"/>
|
|
531
|
+
}</label>
|
|
524
532
|
<input id="group-name-input" name="name" className="required" maxLength="50" type="text" placeholder={this.translate("group name")}
|
|
525
533
|
onKeyUp={this.handleNameInputKeyUp} onChange={this.handleInputChange}
|
|
526
534
|
disabled={this.hasAllInputDisabled()} ref={this.nameInputRef}/>
|
|
527
535
|
{this.state.nameError &&
|
|
528
536
|
<div className="name error-message">{this.state.nameError}</div>
|
|
529
537
|
}
|
|
538
|
+
{this.state.nameWarning &&
|
|
539
|
+
(<div className="name warning-message">
|
|
540
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.nameWarning}
|
|
541
|
+
</div>)
|
|
542
|
+
}
|
|
530
543
|
</div>
|
|
531
544
|
|
|
532
545
|
<div className="input required">
|
|
@@ -562,6 +575,11 @@ class CreateUserGroup extends Component {
|
|
|
562
575
|
<span><Trans>You need to click save for the changes to take place.</Trans></span>
|
|
563
576
|
</div>
|
|
564
577
|
}
|
|
578
|
+
{this.state.nameWarning && (
|
|
579
|
+
<div className="message warning">
|
|
580
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.nameWarning}
|
|
581
|
+
</div>
|
|
582
|
+
)}
|
|
565
583
|
<div className="form-content permission-add">
|
|
566
584
|
<Autocomplete
|
|
567
585
|
id="user-name-input"
|
|
@@ -21,6 +21,8 @@ import {ActionFeedbackContext} from "../../../contexts/ActionFeedbackContext";
|
|
|
21
21
|
import PassboltApiFetchError from "../../../../shared/lib/Error/PassboltApiFetchError";
|
|
22
22
|
import {waitFor} from "@testing-library/react";
|
|
23
23
|
|
|
24
|
+
const truncatedWarningMessage = "Warning: this is the maximum size for this field, make sure your data was not truncated.";
|
|
25
|
+
|
|
24
26
|
describe("See the Create Dialog Group", () => {
|
|
25
27
|
let page; // The page to test against
|
|
26
28
|
const context = defaultAppContext(); // The applicative context
|
|
@@ -213,5 +215,12 @@ describe("See the Create Dialog Group", () => {
|
|
|
213
215
|
// display groupname error message
|
|
214
216
|
expect(page.createGroup.nameErrorMessage.textContent).toBe("The group name test already exists.");
|
|
215
217
|
});
|
|
218
|
+
|
|
219
|
+
it("As an user I should see a feedback when name field content is truncated by a field limit", async() => {
|
|
220
|
+
expect.assertions(1);
|
|
221
|
+
page.createGroup.fillInput(page.createGroup.name, 'a'.repeat(255));
|
|
222
|
+
await page.createGroup.keyUpInput(page.createGroup.name);
|
|
223
|
+
expect(page.createGroup.nameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
224
|
+
});
|
|
216
225
|
});
|
|
217
226
|
});
|
package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js
CHANGED
|
@@ -249,6 +249,13 @@ class CreateGroupPageObject {
|
|
|
249
249
|
return this._container.querySelector('.error-dialog .dialog .dialog-content .form-content');
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Returns the name warning mesage input element
|
|
254
|
+
*/
|
|
255
|
+
get nameWarningMessage() {
|
|
256
|
+
return this._container.querySelector('.name.warning-message');
|
|
257
|
+
}
|
|
258
|
+
|
|
252
259
|
/**
|
|
253
260
|
* Returns true if the page object exists in the container
|
|
254
261
|
*/
|
|
@@ -282,6 +289,11 @@ class CreateGroupPageObject {
|
|
|
282
289
|
fireEvent.change(element, dataInputEvent);
|
|
283
290
|
}
|
|
284
291
|
|
|
292
|
+
/** on keypup element */
|
|
293
|
+
keyUpInput(component) {
|
|
294
|
+
fireEvent.keyUp(component, {keyCode: 38});
|
|
295
|
+
}
|
|
296
|
+
|
|
285
297
|
/** select item */
|
|
286
298
|
async selectFirstItem(index) {
|
|
287
299
|
await this.click(this.selectRights(index));
|
package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js
CHANGED
|
@@ -22,6 +22,7 @@ import GroupAvatar from "../../Common/Avatar/GroupAvatar";
|
|
|
22
22
|
import DisplayUserGroupDetailsMembers from "../DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers";
|
|
23
23
|
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
24
24
|
import {Trans, withTranslation} from "react-i18next";
|
|
25
|
+
import ClipBoard from '../../../../shared/lib/Browser/clipBoard';
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* This component displays the details of a users group
|
|
@@ -64,7 +65,7 @@ class DisplayUserGroupDetails extends React.Component {
|
|
|
64
65
|
async handlePermalinkClick() {
|
|
65
66
|
const baseUrl = this.props.context.userSettings.getTrustedDomain();
|
|
66
67
|
const permalink = `${baseUrl}/app/groups/view/${this.group.id}`;
|
|
67
|
-
await
|
|
68
|
+
await ClipBoard.copy(permalink, this.props.context.port);
|
|
68
69
|
this.props.actionFeedbackContext.displaySuccess(this.translate("The permalink has been copied to clipboard"));
|
|
69
70
|
}
|
|
70
71
|
|
|
@@ -27,6 +27,10 @@ import {withRouter} from "react-router-dom";
|
|
|
27
27
|
import {Trans, withTranslation} from "react-i18next";
|
|
28
28
|
import SharePermissionItemSkeleton from "../../Share/SharePermissionItemSkeleton";
|
|
29
29
|
import EditUserGroupItem from "./EditUserGroupItem";
|
|
30
|
+
import {maxSizeValidation} from '../../../lib/Error/InputValidator';
|
|
31
|
+
import Icon from "../../../../shared/components/Icons/Icon";
|
|
32
|
+
import {RESOURCE_GROUP_NAME_MAX_LENGTH} from "../../../../shared/constants/inputs.const";
|
|
33
|
+
|
|
30
34
|
|
|
31
35
|
/**
|
|
32
36
|
* This component allows to edit an user group
|
|
@@ -57,6 +61,7 @@ class EditUserGroup extends Component {
|
|
|
57
61
|
loading: true // True if the component is in a loading mode
|
|
58
62
|
},
|
|
59
63
|
errors: {},
|
|
64
|
+
nameWarning: "",
|
|
60
65
|
validation: {
|
|
61
66
|
hasAlreadyBeenValidated: false // True when the form has already been submitted
|
|
62
67
|
}
|
|
@@ -398,6 +403,9 @@ class EditUserGroup extends Component {
|
|
|
398
403
|
this.setState({groupToEdit: Object.assign({}, this.state.groupToEdit, {name})});
|
|
399
404
|
if (this.state.validation.hasAlreadyBeenValidated) {
|
|
400
405
|
this.validateName();
|
|
406
|
+
} else {
|
|
407
|
+
const nameWarning = maxSizeValidation(name, RESOURCE_GROUP_NAME_MAX_LENGTH, this.translate);
|
|
408
|
+
this.setState({nameWarning});
|
|
401
409
|
}
|
|
402
410
|
}
|
|
403
411
|
|
|
@@ -745,10 +753,17 @@ class EditUserGroup extends Component {
|
|
|
745
753
|
<Trans>The group name already exists.</Trans>
|
|
746
754
|
</div>
|
|
747
755
|
}
|
|
756
|
+
{this.state.nameWarning &&
|
|
757
|
+
(<div className="name warning-message">
|
|
758
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.nameWarning}
|
|
759
|
+
</div>)
|
|
760
|
+
}
|
|
748
761
|
</div>
|
|
749
762
|
|
|
750
763
|
<div className="input required">
|
|
751
|
-
<label><Trans>Group members</Trans
|
|
764
|
+
<label><Trans>Group members</Trans>{this.state.nameWarning &&
|
|
765
|
+
<Icon name="exclamation"/>
|
|
766
|
+
}</label>
|
|
752
767
|
</div>
|
|
753
768
|
</div>
|
|
754
769
|
|
|
@@ -24,6 +24,7 @@ import NotifyError from "../../Common/Error/NotifyError/NotifyError";
|
|
|
24
24
|
beforeEach(() => {
|
|
25
25
|
jest.resetModules();
|
|
26
26
|
});
|
|
27
|
+
const truncatedWarningMessage = "Warning: this is the maximum size for this field, make sure your data was not truncated.";
|
|
27
28
|
|
|
28
29
|
describe("See the Edit User Group", () => {
|
|
29
30
|
let page; // The page to test against
|
|
@@ -179,5 +180,12 @@ describe("See the Edit User Group", () => {
|
|
|
179
180
|
await waitFor(() => {});
|
|
180
181
|
expect(page.hasNoManager).toBeTruthy();
|
|
181
182
|
});
|
|
183
|
+
|
|
184
|
+
it("As an user I should see a feedback when name field content is truncated by a field limit", async() => {
|
|
185
|
+
expect.assertions(1);
|
|
186
|
+
page.fillInput(page.name, 'a'.repeat(255));
|
|
187
|
+
await page.keyUpInput(page.name);
|
|
188
|
+
expect(page.nameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
189
|
+
});
|
|
182
190
|
});
|
|
183
191
|
});
|
|
@@ -44,11 +44,18 @@ export default class EditUserGroupTestPage {
|
|
|
44
44
|
);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Returns the name input element
|
|
49
|
+
*/
|
|
50
|
+
get name() {
|
|
51
|
+
return this._page.container.querySelector('#group-name-input');
|
|
52
|
+
}
|
|
53
|
+
|
|
47
54
|
/**
|
|
48
55
|
* Return the group name input
|
|
49
56
|
*/
|
|
50
57
|
get groupName() {
|
|
51
|
-
return this.
|
|
58
|
+
return this.name.value;
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
/**
|
|
@@ -107,6 +114,13 @@ export default class EditUserGroupTestPage {
|
|
|
107
114
|
return ! this._page.container.querySelector('.cannot-add-user');
|
|
108
115
|
}
|
|
109
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Returns the name warning mesage input element
|
|
119
|
+
*/
|
|
120
|
+
get nameWarningMessage() {
|
|
121
|
+
return this._page.container.querySelector('.name.warning-message');
|
|
122
|
+
}
|
|
123
|
+
|
|
110
124
|
/**
|
|
111
125
|
* Returns the username input
|
|
112
126
|
*/
|
|
@@ -206,6 +220,17 @@ export default class EditUserGroupTestPage {
|
|
|
206
220
|
});
|
|
207
221
|
}
|
|
208
222
|
|
|
223
|
+
/** fill the input element with data */
|
|
224
|
+
fillInput(element, data) {
|
|
225
|
+
const dataInputEvent = {target: {value: data}};
|
|
226
|
+
fireEvent.change(element, dataInputEvent);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** on keypup element */
|
|
230
|
+
keyUpInput(component) {
|
|
231
|
+
fireEvent.keyUp(component, {keyCode: 38});
|
|
232
|
+
}
|
|
233
|
+
|
|
209
234
|
async click(element) {
|
|
210
235
|
const event = {button: 0};
|
|
211
236
|
fireEvent.click(element, event);
|
package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js
CHANGED
|
@@ -199,7 +199,7 @@ class ConfirmPassphrase extends React.Component {
|
|
|
199
199
|
<div className="error-message">{this.state.passphraseError}</div>
|
|
200
200
|
}
|
|
201
201
|
{!this.state.passphraseError &&
|
|
202
|
-
<div className="help-message">You need to enter your current passphrase.</div>
|
|
202
|
+
<div className="help-message"><Trans>You need to enter your current passphrase.</Trans></div>
|
|
203
203
|
}
|
|
204
204
|
</div>
|
|
205
205
|
</div>
|
package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js
CHANGED
|
@@ -20,7 +20,6 @@ import NotifyError from "../../Common/Error/NotifyError/NotifyError";
|
|
|
20
20
|
import {withDialog} from "../../../contexts/DialogContext";
|
|
21
21
|
import debounce from "debounce-promise";
|
|
22
22
|
import SecurityComplexity from "../../../../shared/lib/Secret/SecretComplexity";
|
|
23
|
-
import SecretComplexity from "../../../../shared/lib/Secret/SecretComplexity";
|
|
24
23
|
import {Trans, withTranslation} from "react-i18next";
|
|
25
24
|
import {withAppContext} from "../../../contexts/AppContext";
|
|
26
25
|
import Password from "../../../../shared/components/Password/Password";
|
|
@@ -29,6 +28,7 @@ import PasswordComplexity from "../../../../shared/components/PasswordComplexity
|
|
|
29
28
|
import ExternalServiceUnavailableError from "../../../../shared/lib/Error/ExternalServiceUnavailableError";
|
|
30
29
|
import Tooltip from "../../Common/Tooltip/Tooltip";
|
|
31
30
|
import ExternalServiceError from "../../../../shared/lib/Error/ExternalServiceError";
|
|
31
|
+
import PownedService from '../../../../shared/services/api/secrets/pownedService';
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* This component displays the user choose passphrase information
|
|
@@ -121,6 +121,7 @@ class EnterNewPassphrase extends React.Component {
|
|
|
121
121
|
* Whenever the component is mounted
|
|
122
122
|
*/
|
|
123
123
|
componentDidMount() {
|
|
124
|
+
this.pownedService = new PownedService(this.props.context.port);
|
|
124
125
|
this.focusOnPassphrase();
|
|
125
126
|
}
|
|
126
127
|
|
|
@@ -139,7 +140,6 @@ class EnterNewPassphrase extends React.Component {
|
|
|
139
140
|
const passphrase = event.target.value;
|
|
140
141
|
let hintClassNames = {};
|
|
141
142
|
let passphraseEntropy = null;
|
|
142
|
-
|
|
143
143
|
if (passphrase.length) {
|
|
144
144
|
passphraseEntropy = SecretGenerator.entropy(passphrase);
|
|
145
145
|
hintClassNames = this.evaluatePassphraseHintClassNames(passphrase);
|
|
@@ -191,8 +191,10 @@ class EnterNewPassphrase extends React.Component {
|
|
|
191
191
|
notInDictionaryHint = "error";
|
|
192
192
|
} else {
|
|
193
193
|
try {
|
|
194
|
-
const
|
|
195
|
-
|
|
194
|
+
const result = await this.pownedService.evaluateSecret(this.state.passphrase);
|
|
195
|
+
const isPwned = result.inDictionary;
|
|
196
|
+
isPwnedServiceAvailable = result.isPwnedServiceAvailable;
|
|
197
|
+
notInDictionaryHint = isPwnedServiceAvailable ? (isPwned ? "error" : "success") : "unavailable";
|
|
196
198
|
} catch (error) {
|
|
197
199
|
// If the service is unavailable don't block the user journey.
|
|
198
200
|
if (error instanceof ExternalServiceUnavailableError || error instanceof ExternalServiceError) {
|
|
@@ -8,7 +8,10 @@ import userSettingsFixture from "../../../test/fixture/Settings/userSettings";
|
|
|
8
8
|
export function defaultProps() {
|
|
9
9
|
const props = {
|
|
10
10
|
context: {
|
|
11
|
-
userSettings: new UserSettings(userSettingsFixture)
|
|
11
|
+
userSettings: new UserSettings(userSettingsFixture),
|
|
12
|
+
port: {
|
|
13
|
+
request: () => Promise.resolve(0)
|
|
14
|
+
}
|
|
12
15
|
},
|
|
13
16
|
userSettingsContext: {
|
|
14
17
|
onUpdatePassphraseRequested: jest.fn(),
|
package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js
CHANGED
|
@@ -20,21 +20,23 @@ import {defaultProps} from "./EnterNewPassphrase.test.data";
|
|
|
20
20
|
import {waitFor} from "@testing-library/react";
|
|
21
21
|
import PassboltApiFetchError from "../../../../shared/lib/Error/PassboltApiFetchError";
|
|
22
22
|
import NotifyError from "../../Common/Error/NotifyError/NotifyError";
|
|
23
|
-
import PwnedPasswords from "../../../../shared/lib/Secret/PwnedPasswords";
|
|
24
23
|
|
|
25
24
|
jest.mock("../../../../shared/lib/Secret/PwnedPasswords");
|
|
26
25
|
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
jest.useFakeTimers();
|
|
29
|
-
jest.resetModules();
|
|
30
|
-
jest.clearAllMocks();
|
|
31
|
-
PwnedPasswords.pwnedPasswords.mockResolvedValue(false);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
26
|
describe("As LU I should see the user confirm passphrase page", () => {
|
|
35
27
|
let page; // The page to test against
|
|
36
28
|
const props = defaultProps();
|
|
37
29
|
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
jest.useFakeTimers();
|
|
32
|
+
jest.resetModules();
|
|
33
|
+
jest.clearAllMocks();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
jest.clearAllTimers();
|
|
38
|
+
});
|
|
39
|
+
|
|
38
40
|
describe('As LU I can start confirm my passphrase', () => {
|
|
39
41
|
/**
|
|
40
42
|
* Given the user settings passphrase
|
|
@@ -71,7 +73,7 @@ describe("As LU I should see the user confirm passphrase page", () => {
|
|
|
71
73
|
});
|
|
72
74
|
|
|
73
75
|
it('As LU I should see the passphrase very weak strength updated on change', async() => {
|
|
74
|
-
const veryWeakPassphrase = '
|
|
76
|
+
const veryWeakPassphrase = 'blablabla';
|
|
75
77
|
await page.insertPassphrase(veryWeakPassphrase);
|
|
76
78
|
await waitFor(() => expect(page.isVeryWeakPassphrase).toBeTruthy());
|
|
77
79
|
});
|
|
@@ -166,11 +168,11 @@ describe("As LU I should see the user confirm passphrase page", () => {
|
|
|
166
168
|
expect(page.updateButton.className).toBe('button primary disabled');
|
|
167
169
|
|
|
168
170
|
// Fill the form
|
|
169
|
-
page.insertPassphrase("passphrase");
|
|
171
|
+
await page.insertPassphrase("passphrase");
|
|
172
|
+
|
|
170
173
|
await waitFor(() => expect(page.canUpdate).toBeTruthy());
|
|
171
174
|
const mockReject = error => jest.fn(() => new Promise((resolve, reject) => reject(error)));
|
|
172
175
|
jest.spyOn(props.userSettingsContext, 'onUpdatePassphraseRequested').mockImplementationOnce(mockReject(new PassboltApiFetchError("Jest simulate API error.")));
|
|
173
|
-
|
|
174
176
|
await page.update(() => {
|
|
175
177
|
if (!page.notInDictionaryHint.classList.contains("success")) {
|
|
176
178
|
throw new Error("The page state didn't change yet.");
|
|
@@ -179,5 +181,13 @@ describe("As LU I should see the user confirm passphrase page", () => {
|
|
|
179
181
|
const ErrorDialogProps = {error: new Error("Jest simulate API error.")};
|
|
180
182
|
expect(props.dialogContext.open).toHaveBeenCalledWith(NotifyError, ErrorDialogProps);
|
|
181
183
|
});
|
|
184
|
+
|
|
185
|
+
it('As LU I should be inform about ExternalServiceUnavailableError for powned password service', async() => {
|
|
186
|
+
jest.spyOn(props.context.port, "request").mockImplementationOnce(() => Promise.reject());
|
|
187
|
+
expect.assertions(2);
|
|
188
|
+
await page.insertPassphrase("Service is unavailable");
|
|
189
|
+
expect(page.notInDictionaryHint.classList.contains("unavailable")).toBeTruthy();
|
|
190
|
+
expect(page.tootltip.textContent).toBe("The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach");
|
|
191
|
+
});
|
|
182
192
|
});
|
|
183
193
|
});
|
|
@@ -159,6 +159,13 @@ export default class EnterNewPassphrasePage {
|
|
|
159
159
|
return this._page.container.querySelectorAll(".password-hints li")[4];
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Returns the tooltip for service unavailable for powned password
|
|
164
|
+
*/
|
|
165
|
+
get tootltip() {
|
|
166
|
+
return this._page.container.querySelector(".password-hints .unavailable .tooltip .tooltip-text");
|
|
167
|
+
}
|
|
168
|
+
|
|
162
169
|
/**
|
|
163
170
|
* Returns true if the page object exists in the container
|
|
164
171
|
*/
|
|
@@ -186,8 +193,10 @@ export default class EnterNewPassphrasePage {
|
|
|
186
193
|
}
|
|
187
194
|
|
|
188
195
|
/** fill the passphrase input element with data */
|
|
189
|
-
insertPassphrase(data) {
|
|
196
|
+
async insertPassphrase(data) {
|
|
190
197
|
this.fillInput(this.passphraseInput, data);
|
|
198
|
+
jest.runAllTimers();
|
|
199
|
+
await waitFor(() => {});
|
|
191
200
|
}
|
|
192
201
|
|
|
193
202
|
/** click update */
|
|
@@ -153,6 +153,8 @@ export class AdminSmtpSettingsContextProvider extends React.Component {
|
|
|
153
153
|
delete dto.provider;
|
|
154
154
|
await this.smtpSettingsModel.saveSmtpSettings(dto);
|
|
155
155
|
this.props.actionFeedbackContext.displaySuccess(this.props.t("The SMTP settings have been saved successfully"));
|
|
156
|
+
const newSettings = Object.assign({}, this.state.currentSmtpSettings, {"source": "db"});
|
|
157
|
+
this.setState({currentSmtpSettings: newSettings});
|
|
156
158
|
} catch (e) {
|
|
157
159
|
this.handleError(e);
|
|
158
160
|
}
|
|
@@ -74,3 +74,16 @@ export function withAwsSesSmtpSettings(data = {}) {
|
|
|
74
74
|
...data
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
+
|
|
78
|
+
export function withNoAuthenticationMethod(data = {}) {
|
|
79
|
+
const settings = withExistingSmtpSettings(data);
|
|
80
|
+
settings.username = null;
|
|
81
|
+
settings.password = null;
|
|
82
|
+
return settings;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function withUsernameAuthenticationMethod(data = {}) {
|
|
86
|
+
const settings = withExistingSmtpSettings(data);
|
|
87
|
+
settings.password = null;
|
|
88
|
+
return settings;
|
|
89
|
+
}
|
|
@@ -78,7 +78,7 @@ describe("AdminSmtpSettingsContext", () => {
|
|
|
78
78
|
|
|
79
79
|
describe("AdminSmtpSettingsContextProvider::saveSettings()", () => {
|
|
80
80
|
it("should get the current SMTP settings and store them in its state with the corresponding provider", async() => {
|
|
81
|
-
expect.assertions(
|
|
81
|
+
expect.assertions(3);
|
|
82
82
|
|
|
83
83
|
const currentSmtpSettings = {
|
|
84
84
|
id: uuid(),
|
|
@@ -126,9 +126,11 @@ describe("AdminSmtpSettingsContext", () => {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
await adminSmtpContext.saveSmtpSettings();
|
|
129
|
+
const settings = await adminSmtpContext.getCurrentSmtpSettings();
|
|
129
130
|
|
|
130
131
|
// 1 call is a GET, the other is the POST
|
|
131
132
|
expect(smtpSettingsCallMock).toHaveBeenCalledTimes(2);
|
|
133
|
+
expect(settings.source).toEqual("db");
|
|
132
134
|
});
|
|
133
135
|
});
|
|
134
136
|
});
|