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
|
@@ -22,6 +22,9 @@ import FormCancelButton from "../../Common/Inputs/FormSubmitButton/FormCancelBut
|
|
|
22
22
|
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
23
23
|
import {withDialog} from "../../../contexts/DialogContext";
|
|
24
24
|
import {Trans, withTranslation} from "react-i18next";
|
|
25
|
+
import {maxSizeValidation} from "../../../lib/Error/InputValidator";
|
|
26
|
+
import Icon from "../../../../shared/components/Icons/Icon";
|
|
27
|
+
import {USER_INPUT_MAX_LENGTH} from "../../../../shared/constants/inputs.const";
|
|
25
28
|
|
|
26
29
|
class CreateUser extends Component {
|
|
27
30
|
/**
|
|
@@ -59,10 +62,13 @@ class CreateUser extends Component {
|
|
|
59
62
|
// Fields and errors
|
|
60
63
|
first_name: "",
|
|
61
64
|
first_nameError: null,
|
|
65
|
+
first_nameWarning: "",
|
|
62
66
|
last_name: "",
|
|
63
67
|
last_nameError: null,
|
|
68
|
+
last_nameWarning: "",
|
|
64
69
|
username: "",
|
|
65
70
|
usernameError: null,
|
|
71
|
+
usernameWarning: "",
|
|
66
72
|
is_admin: false,
|
|
67
73
|
hasAlreadyBeenValidated: false // True if the form has already been submitted once
|
|
68
74
|
};
|
|
@@ -131,6 +137,9 @@ class CreateUser extends Component {
|
|
|
131
137
|
if (this.state.hasAlreadyBeenValidated) {
|
|
132
138
|
const state = this.validateFirstNameInput();
|
|
133
139
|
this.setState(state);
|
|
140
|
+
} else {
|
|
141
|
+
const first_nameWarning = maxSizeValidation(this.state.first_name, USER_INPUT_MAX_LENGTH, this.translate);
|
|
142
|
+
this.setState({first_nameWarning});
|
|
134
143
|
}
|
|
135
144
|
}
|
|
136
145
|
|
|
@@ -141,6 +150,9 @@ class CreateUser extends Component {
|
|
|
141
150
|
if (this.state.hasAlreadyBeenValidated) {
|
|
142
151
|
const state = this.validateLastNameInput();
|
|
143
152
|
this.setState(state);
|
|
153
|
+
} else {
|
|
154
|
+
const last_nameWarning = maxSizeValidation(this.state.last_name, USER_INPUT_MAX_LENGTH, this.translate);
|
|
155
|
+
this.setState({last_nameWarning});
|
|
144
156
|
}
|
|
145
157
|
}
|
|
146
158
|
|
|
@@ -151,6 +163,9 @@ class CreateUser extends Component {
|
|
|
151
163
|
if (this.state.hasAlreadyBeenValidated) {
|
|
152
164
|
const state = this.validateUsernameInput();
|
|
153
165
|
this.setState(state);
|
|
166
|
+
} else {
|
|
167
|
+
const usernameWarning = maxSizeValidation(this.state.username, USER_INPUT_MAX_LENGTH, this.translate);
|
|
168
|
+
this.setState({usernameWarning});
|
|
154
169
|
}
|
|
155
170
|
}
|
|
156
171
|
|
|
@@ -371,22 +386,33 @@ class CreateUser extends Component {
|
|
|
371
386
|
<form className="user-create-form" onSubmit={this.handleFormSubmit} noValidate>
|
|
372
387
|
<div className="form-content">
|
|
373
388
|
<div className={`input text required ${this.state.first_nameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
374
|
-
<label htmlFor="user-first-name-input"><Trans>First name</Trans
|
|
389
|
+
<label htmlFor="user-first-name-input"><Trans>First name</Trans>{this.state.first_nameWarning &&
|
|
390
|
+
<Icon name="exclamation"/>
|
|
391
|
+
}</label>
|
|
375
392
|
<input id="user-first-name-input" name="first_name"
|
|
376
393
|
ref={this.firstNameRef}
|
|
377
394
|
type="text" value={this.state.first_name} placeholder={this.translate("First name")}
|
|
378
395
|
required="required" disabled={this.hasAllInputDisabled()}
|
|
396
|
+
maxLength="128"
|
|
379
397
|
onKeyUp={this.handleFirstNameInputKeyUp} onChange={this.handleInputChange}
|
|
380
398
|
autoComplete='off' autoFocus={true}
|
|
381
399
|
/>
|
|
382
400
|
{this.state.first_nameError &&
|
|
383
401
|
<div className="first_name error-message">{this.state.first_nameError}</div>
|
|
384
402
|
}
|
|
403
|
+
{this.state.first_nameWarning && (
|
|
404
|
+
<div className="firstname warning-message">
|
|
405
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.first_nameWarning}
|
|
406
|
+
</div>
|
|
407
|
+
)}
|
|
385
408
|
</div>
|
|
386
409
|
<div className={`input text required ${this.state.last_nameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
387
|
-
<label htmlFor="user-last-name-input"><Trans>Last name</Trans
|
|
410
|
+
<label htmlFor="user-last-name-input"><Trans>Last name</Trans>{this.state.last_nameWarning &&
|
|
411
|
+
<Icon name="exclamation"/>
|
|
412
|
+
}</label>
|
|
388
413
|
<input id="user-last-name-input" name="last_name"
|
|
389
414
|
ref={this.lastNameRef}
|
|
415
|
+
maxLength="128"
|
|
390
416
|
type="text" value={this.state.last_name} placeholder={this.translate("Last name")}
|
|
391
417
|
required="required" disabled={this.hasAllInputDisabled()}
|
|
392
418
|
onKeyUp={this.handleLastNameInputOnKeyUp} onChange={this.handleInputChange}
|
|
@@ -395,10 +421,18 @@ class CreateUser extends Component {
|
|
|
395
421
|
{this.state.last_nameError &&
|
|
396
422
|
<div className="last_name error-message">{this.state.last_nameError}</div>
|
|
397
423
|
}
|
|
424
|
+
{this.state.last_nameWarning && (
|
|
425
|
+
<div className="lastname warning-message">
|
|
426
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.last_nameWarning}
|
|
427
|
+
</div>
|
|
428
|
+
)}
|
|
398
429
|
</div>
|
|
399
430
|
<div className={`input text required ${this.state.usernameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
400
|
-
<label htmlFor="user-username-input"><Trans>Username / Email</Trans
|
|
431
|
+
<label htmlFor="user-username-input"><Trans>Username / Email</Trans>{this.state.usernameWarning &&
|
|
432
|
+
<Icon name="exclamation"/>
|
|
433
|
+
}</label>
|
|
401
434
|
<input id="user-username-input" name="username"
|
|
435
|
+
maxLength="128"
|
|
402
436
|
ref={this.usernameRef} type="text" value={this.state.username} placeholder={this.translate("Email")}
|
|
403
437
|
required="required" disabled={this.hasAllInputDisabled()}
|
|
404
438
|
onKeyUp={this.handleUsernameInputOnKeyUp} onChange={this.handleInputChange}
|
|
@@ -407,6 +441,11 @@ class CreateUser extends Component {
|
|
|
407
441
|
{this.state.usernameError &&
|
|
408
442
|
<div className="username error-message">{this.state.usernameError}</div>
|
|
409
443
|
}
|
|
444
|
+
{this.state.usernameWarning && (
|
|
445
|
+
<div className="username warning-message">
|
|
446
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.usernameWarning}
|
|
447
|
+
</div>
|
|
448
|
+
)}
|
|
410
449
|
</div>
|
|
411
450
|
<div className={`input checkbox-wrapper ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
412
451
|
<label htmlFor="is_admin_checkbox"><Trans>Role</Trans></label>
|
|
@@ -24,6 +24,7 @@ import {waitFor} from "@testing-library/react";
|
|
|
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 Create Dialog User", () => {
|
|
29
30
|
let page; // The page to test against
|
|
@@ -176,5 +177,20 @@ describe("See the Create Dialog User", () => {
|
|
|
176
177
|
// display username error message
|
|
177
178
|
expect(page.createUser.usernameErrorMessage.textContent).toBe("This username is already in use.");
|
|
178
179
|
});
|
|
180
|
+
|
|
181
|
+
it("As a user I should see a feedback when firstname, username or lastname field content is truncated by a field limit", async() => {
|
|
182
|
+
expect.assertions(3);
|
|
183
|
+
page.createUser.fillInput(page.createUser.firstName, 'a'.repeat(128));
|
|
184
|
+
page.createUser.fillInput(page.createUser.username, 'a'.repeat(128));
|
|
185
|
+
page.createUser.fillInput(page.createUser.lastName, 'a'.repeat(128));
|
|
186
|
+
|
|
187
|
+
await page.createUser.keyUpInput(page.createUser.firstName);
|
|
188
|
+
await page.createUser.keyUpInput(page.createUser.username);
|
|
189
|
+
await page.createUser.keyUpInput(page.createUser.lastName);
|
|
190
|
+
|
|
191
|
+
expect(page.createUser.usernameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
192
|
+
expect(page.createUser.firstnameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
193
|
+
expect(page.createUser.lastnameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
194
|
+
});
|
|
179
195
|
});
|
|
180
196
|
});
|
|
@@ -186,6 +186,27 @@ class CreateUserPageObject {
|
|
|
186
186
|
return this._container.querySelector('.error-dialog .dialog .dialog-content .form-content');
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
+
/**
|
|
190
|
+
* Returns the username warning mesage input element
|
|
191
|
+
*/
|
|
192
|
+
get usernameWarningMessage() {
|
|
193
|
+
return this._container.querySelector('.username.warning-message');
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Returns the first name warning mesage input element
|
|
198
|
+
*/
|
|
199
|
+
get firstnameWarningMessage() {
|
|
200
|
+
return this._container.querySelector('.firstname.warning-message');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Returns the last name warning mesage input element
|
|
205
|
+
*/
|
|
206
|
+
get lastnameWarningMessage() {
|
|
207
|
+
return this._container.querySelector('.lastname.warning-message');
|
|
208
|
+
}
|
|
209
|
+
|
|
189
210
|
/**
|
|
190
211
|
* Returns true if the page object exists in the container
|
|
191
212
|
*/
|
|
@@ -218,6 +239,11 @@ class CreateUserPageObject {
|
|
|
218
239
|
const dataInputEvent = {target: {value: data}};
|
|
219
240
|
fireEvent.change(element, dataInputEvent);
|
|
220
241
|
}
|
|
242
|
+
|
|
243
|
+
/** on keypup element */
|
|
244
|
+
keyUpInput(component) {
|
|
245
|
+
fireEvent.keyUp(component, {keyCode: 38});
|
|
246
|
+
}
|
|
221
247
|
}
|
|
222
248
|
|
|
223
249
|
|
|
@@ -28,6 +28,7 @@ import {Trans, withTranslation} from "react-i18next";
|
|
|
28
28
|
import HandleReviewAccountRecoveryRequestWorkflow
|
|
29
29
|
from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
|
|
30
30
|
import {withWorkflow} from "../../../contexts/WorkflowContext";
|
|
31
|
+
import ClipBoard from '../../../../shared/lib/Browser/clipBoard';
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
34
|
* This component is a container of multiple actions applicable on user
|
|
@@ -344,7 +345,7 @@ class DisplayUserWorkspaceActions extends React.Component {
|
|
|
344
345
|
this.closeMoreMenu();
|
|
345
346
|
const baseUrl = this.props.context.userSettings.getTrustedDomain();
|
|
346
347
|
const permalink = `${baseUrl}/app/users/view/${this.selectedUser.id}`;
|
|
347
|
-
await
|
|
348
|
+
await ClipBoard.copy(permalink, this.props.context.port);
|
|
348
349
|
this.props.actionFeedbackContext.displaySuccess(this.translate("The permalink has been copied to clipboard"));
|
|
349
350
|
}
|
|
350
351
|
|
package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js
CHANGED
|
@@ -24,8 +24,8 @@ import DeleteUser from "../DeleteUser/DeleteUser";
|
|
|
24
24
|
import NotifyError from "../../Common/Error/NotifyError/NotifyError";
|
|
25
25
|
import {Trans, withTranslation} from "react-i18next";
|
|
26
26
|
import {withWorkflow} from "../../../contexts/WorkflowContext";
|
|
27
|
-
import HandleReviewAccountRecoveryRequestWorkflow
|
|
28
|
-
|
|
27
|
+
import HandleReviewAccountRecoveryRequestWorkflow from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
|
|
28
|
+
import ClipBoard from '../../../../shared/lib/Browser/clipBoard';
|
|
29
29
|
|
|
30
30
|
class DisplayUsersContextualMenu extends React.Component {
|
|
31
31
|
/**
|
|
@@ -93,7 +93,7 @@ class DisplayUsersContextualMenu extends React.Component {
|
|
|
93
93
|
async handlePermalinkCopy() {
|
|
94
94
|
const baseUrl = this.props.context.userSettings.getTrustedDomain();
|
|
95
95
|
const permalink = `${baseUrl}/app/users/view/${this.user.id}`;
|
|
96
|
-
await
|
|
96
|
+
await ClipBoard.copy(permalink, this.props.context.port);
|
|
97
97
|
this.props.actionFeedbackContext.displaySuccess(this.translate("The permalink has been copied to clipboard"));
|
|
98
98
|
this.props.hide();
|
|
99
99
|
}
|
|
@@ -103,7 +103,7 @@ class DisplayUsersContextualMenu extends React.Component {
|
|
|
103
103
|
*/
|
|
104
104
|
async handleUsernameCopy() {
|
|
105
105
|
const username = `${this.user.username}`;
|
|
106
|
-
await
|
|
106
|
+
await ClipBoard.copy(username, this.props.context.port);
|
|
107
107
|
this.props.actionFeedbackContext.displaySuccess(this.translate("The email has been copied to clipboard"));
|
|
108
108
|
this.props.hide();
|
|
109
109
|
}
|
|
@@ -113,7 +113,7 @@ class DisplayUsersContextualMenu extends React.Component {
|
|
|
113
113
|
*/
|
|
114
114
|
async handlePublicKeyCopy() {
|
|
115
115
|
const gpgkeyInfo = await this.props.context.port.request('passbolt.keyring.get-public-key-info-by-user', this.user.id);
|
|
116
|
-
await
|
|
116
|
+
await ClipBoard.copy(gpgkeyInfo.armored_key, this.props.context.port);
|
|
117
117
|
this.props.actionFeedbackContext.displaySuccess(this.translate("The public key has been copied to clipboard"));
|
|
118
118
|
this.props.hide();
|
|
119
119
|
}
|
|
@@ -21,6 +21,9 @@ import FormCancelButton from "../../Common/Inputs/FormSubmitButton/FormCancelBut
|
|
|
21
21
|
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
22
22
|
import {withDialog} from "../../../contexts/DialogContext";
|
|
23
23
|
import {Trans, withTranslation} from "react-i18next";
|
|
24
|
+
import {maxSizeValidation} from '../../../lib/Error/InputValidator';
|
|
25
|
+
import Icon from "../../../../shared/components/Icons/Icon";
|
|
26
|
+
import {USER_INPUT_MAX_LENGTH} from '../../../../shared/constants/inputs.const';
|
|
24
27
|
|
|
25
28
|
class EditUser extends Component {
|
|
26
29
|
/**
|
|
@@ -49,8 +52,10 @@ class EditUser extends Component {
|
|
|
49
52
|
// Fields and errors
|
|
50
53
|
first_name: user.profile.first_name,
|
|
51
54
|
first_nameError: null,
|
|
55
|
+
first_nameWarning: "",
|
|
52
56
|
last_name: user.profile.last_name,
|
|
53
57
|
last_nameError: null,
|
|
58
|
+
last_nameWarning: "",
|
|
54
59
|
username: user.username,
|
|
55
60
|
is_admin: role.name === 'admin',
|
|
56
61
|
hasAlreadyBeenValidated: false // True if the form has alreadt been submitted once
|
|
@@ -139,6 +144,9 @@ class EditUser extends Component {
|
|
|
139
144
|
if (this.state.hasAlreadyBeenValidated) {
|
|
140
145
|
const state = this.validateFirstNameInput();
|
|
141
146
|
this.setState(state);
|
|
147
|
+
} else {
|
|
148
|
+
const first_nameWarning = maxSizeValidation(this.state.first_name, USER_INPUT_MAX_LENGTH, this.translate);
|
|
149
|
+
this.setState({first_nameWarning});
|
|
142
150
|
}
|
|
143
151
|
}
|
|
144
152
|
|
|
@@ -149,6 +157,9 @@ class EditUser extends Component {
|
|
|
149
157
|
if (this.state.hasAlreadyBeenValidated) {
|
|
150
158
|
const state = this.validateLastNameInput();
|
|
151
159
|
this.setState(state);
|
|
160
|
+
} else {
|
|
161
|
+
const last_nameWarning = maxSizeValidation(this.state.last_name, USER_INPUT_MAX_LENGTH, this.translate);
|
|
162
|
+
this.setState({last_nameWarning});
|
|
152
163
|
}
|
|
153
164
|
}
|
|
154
165
|
|
|
@@ -343,7 +354,9 @@ class EditUser extends Component {
|
|
|
343
354
|
<form className="user-edit-form" onSubmit={this.handleFormSubmit} noValidate>
|
|
344
355
|
<div className="form-content">
|
|
345
356
|
<div className={`input text required ${this.state.first_nameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
346
|
-
<label htmlFor="user-first-name-input"><Trans>First name</Trans
|
|
357
|
+
<label htmlFor="user-first-name-input"><Trans>First name</Trans>{this.state.first_nameWarning &&
|
|
358
|
+
<Icon name="exclamation"/>
|
|
359
|
+
}</label>
|
|
347
360
|
<input id="user-first-name-input" name="first_name"
|
|
348
361
|
ref={this.firstNameRef} type="text" value={this.state.first_name} placeholder={this.translate("First name")}
|
|
349
362
|
required="required" disabled={this.hasAllInputDisabled()}
|
|
@@ -353,10 +366,16 @@ class EditUser extends Component {
|
|
|
353
366
|
{this.state.first_nameError &&
|
|
354
367
|
<div className="first_name error-message">{this.state.first_nameError}</div>
|
|
355
368
|
}
|
|
369
|
+
{this.state.first_nameWarning && (
|
|
370
|
+
<div className="firstname warning-message">
|
|
371
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.first_nameWarning}
|
|
372
|
+
</div>
|
|
373
|
+
)}
|
|
356
374
|
</div>
|
|
357
375
|
<div className={`input text required ${this.state.last_nameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
358
376
|
<label htmlFor="user-last-name-input"><Trans>Last name</Trans></label>
|
|
359
377
|
<input id="user-last-name-input" name="last_name"
|
|
378
|
+
maxLength="128"
|
|
360
379
|
ref={this.lastNameRef} type="text" value={this.state.last_name} placeholder={this.translate("Last name")}
|
|
361
380
|
required="required" disabled={this.hasAllInputDisabled()}
|
|
362
381
|
onKeyUp={this.handleLastNameInputOnKeyUp} onChange={this.handleInputChange}
|
|
@@ -365,10 +384,18 @@ class EditUser extends Component {
|
|
|
365
384
|
{this.state.last_nameError &&
|
|
366
385
|
<div className="last_name error-message">{this.state.last_nameError}</div>
|
|
367
386
|
}
|
|
387
|
+
{this.state.last_nameWarning && (
|
|
388
|
+
<div className="lastname warning-message">
|
|
389
|
+
<strong><Trans>Warning:</Trans></strong> {this.state.last_nameWarning}
|
|
390
|
+
</div>
|
|
391
|
+
)}
|
|
368
392
|
</div>
|
|
369
393
|
<div className="input text required disabled">
|
|
370
|
-
<label htmlFor="user-username-input"><Trans>Username / Email</Trans
|
|
394
|
+
<label htmlFor="user-username-input"><Trans>Username / Email</Trans>{this.state.last_nameWarning &&
|
|
395
|
+
<Icon name="exclamation"/>
|
|
396
|
+
}</label>
|
|
371
397
|
<input id="user-username-input" name="username"
|
|
398
|
+
maxLength="128"
|
|
372
399
|
type="text" value={this.state.username} placeholder={this.translate("Username")}
|
|
373
400
|
required="required" disabled={true}
|
|
374
401
|
autoComplete='off' autoFocus={true}
|
|
@@ -24,6 +24,7 @@ import {defaultAppContext, defaultProps} from "./EditUser.test.data";
|
|
|
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 Create Dialog User", () => {
|
|
29
30
|
let page; // The page to test against
|
|
@@ -148,5 +149,16 @@ describe("See the Create Dialog User", () => {
|
|
|
148
149
|
expect(page.editUser.errorDialog).not.toBeNull();
|
|
149
150
|
expect(page.editUser.errorDialogMessage).not.toBeNull();
|
|
150
151
|
});
|
|
152
|
+
it("As a user I should see a feedback when firstname or lastname field content is truncated by a field limit", async() => {
|
|
153
|
+
expect.assertions(2);
|
|
154
|
+
page.editUser.fillInput(page.editUser.firstName, 'a'.repeat(128));
|
|
155
|
+
page.editUser.fillInput(page.editUser.lastName, 'a'.repeat(128));
|
|
156
|
+
|
|
157
|
+
await page.editUser.keyUpInput(page.editUser.firstName);
|
|
158
|
+
await page.editUser.keyUpInput(page.editUser.lastName);
|
|
159
|
+
|
|
160
|
+
expect(page.editUser.firstnameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
161
|
+
expect(page.editUser.lastnameWarningMessage.textContent).toEqual(truncatedWarningMessage);
|
|
162
|
+
});
|
|
151
163
|
});
|
|
152
164
|
});
|
|
@@ -179,6 +179,27 @@ class EditUserPageObject {
|
|
|
179
179
|
return this._container.querySelector('.error-dialog .dialog .dialog-content .form-content');
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Returns the username warning mesage input element
|
|
184
|
+
*/
|
|
185
|
+
get usernameWarningMessage() {
|
|
186
|
+
return this._container.querySelector('.username.warning-message');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Returns the first name warning mesage input element
|
|
191
|
+
*/
|
|
192
|
+
get firstnameWarningMessage() {
|
|
193
|
+
return this._container.querySelector('.firstname.warning-message');
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Returns the last name warning mesage input element
|
|
198
|
+
*/
|
|
199
|
+
get lastnameWarningMessage() {
|
|
200
|
+
return this._container.querySelector('.lastname.warning-message');
|
|
201
|
+
}
|
|
202
|
+
|
|
182
203
|
/**
|
|
183
204
|
* Returns true if the page object exists in the container
|
|
184
205
|
*/
|
|
@@ -211,4 +232,9 @@ class EditUserPageObject {
|
|
|
211
232
|
const dataInputEvent = {target: {value: data}};
|
|
212
233
|
fireEvent.change(element, dataInputEvent);
|
|
213
234
|
}
|
|
235
|
+
|
|
236
|
+
/** on keypup element */
|
|
237
|
+
keyUpInput(component) {
|
|
238
|
+
fireEvent.keyUp(component, {keyCode: 38});
|
|
239
|
+
}
|
|
214
240
|
}
|
|
@@ -24,6 +24,7 @@ import DisplayUserDetailsPublicKey from "../DisplayUserDetailsPublicKey/DisplayU
|
|
|
24
24
|
import UserAvatar from "../../Common/Avatar/UserAvatar";
|
|
25
25
|
import {withTranslation, Trans} from "react-i18next";
|
|
26
26
|
import DisplayUserDetailsAccountRecovery from "../DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery";
|
|
27
|
+
import ClipBoard from '../../../../shared/lib/Browser/clipBoard';
|
|
27
28
|
|
|
28
29
|
class DisplayUserDetails extends React.Component {
|
|
29
30
|
/**
|
|
@@ -67,7 +68,7 @@ class DisplayUserDetails extends React.Component {
|
|
|
67
68
|
async handlePermalinkClick() {
|
|
68
69
|
const baseUrl = this.props.context.userSettings.getTrustedDomain();
|
|
69
70
|
const permalink = `${baseUrl}/app/users/view/${this.user.id}`;
|
|
70
|
-
await
|
|
71
|
+
await ClipBoard.copy(permalink, this.props.context.port);
|
|
71
72
|
await this.props.actionFeedbackContext.displaySuccess(this.translate("The permalink has been copied to clipboard"));
|
|
72
73
|
}
|
|
73
74
|
|