passbolt-styleguide 3.5.2 → 3.6.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 +4 -4
- 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 +4 -4
- package/build/css/themes/default/api_reports.min.css +4 -4
- package/build/css/themes/default/api_webinstaller.min.css +3 -3
- package/build/css/themes/default/ext_app.min.css +4 -4
- 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 +4 -4
- package/build/css/themes/midgar/api_reports.min.css +4 -4
- package/build/css/themes/midgar/ext_app.min.css +4 -4
- 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/js/dist/api-account-recovery.js +2 -0
- package/build/js/dist/api-account-recovery.js.LICENSE.txt +107 -0
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-app.js.LICENSE.txt +73 -1
- 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 +159 -15
- package/jest.config.json +13 -0
- package/package.json +26 -21
- package/src/locales/en-UK/common.json +140 -4
- package/src/react-extension/ApiAccountRecovery.entry.js +25 -0
- package/src/react-extension/ApiAccountRecovery.js +233 -0
- package/src/react-extension/ApiApp.js +50 -43
- package/src/react-extension/ExtApp.js +129 -105
- package/src/react-extension/ExtAuthenticationAccountRecovery.js +173 -0
- package/src/react-extension/ExtAuthenticationLogin.js +35 -33
- package/src/react-extension/ExtAuthenticationRecover.js +23 -35
- package/src/react-extension/ExtAuthenticationSetup.js +24 -46
- package/src/react-extension/ExtBootstrapAccountRecovery.js +75 -0
- package/src/react-extension/ExtBootstrapApp.js +4 -0
- package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.js +114 -0
- package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.data.js +27 -0
- package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.js +72 -0
- package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.page.js +74 -0
- package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.stories.js +51 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.js +80 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.test.data.js +60 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.test.js +110 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.test.page.js +40 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.js +96 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.test.data.js +63 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.test.js +88 -0
- package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.test.page.js +37 -0
- package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.js +214 -0
- package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.data.js +49 -0
- package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.js +98 -0
- package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.page.js +37 -0
- package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.js +316 -0
- package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.data.js +55 -0
- package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.js +132 -0
- package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.page.js +70 -0
- package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.stories.js +104 -0
- package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.js +286 -0
- package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.data.js +51 -0
- package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.js +77 -0
- package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.page.js +119 -0
- package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.stories.js +36 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.js +15 -2
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +5 -1
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +45 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +23 -3
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +254 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.data.js +153 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.js +109 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.page.js +174 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.stories.js +43 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +36 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +2 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +9 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +12 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.js +138 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.test.data.js +46 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.test.js +51 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.test.page.js +93 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +2 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +105 -2
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.stories.js +104 -0
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +2 -4
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.js +10 -3
- package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.js +180 -0
- package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.test.data.js +47 -0
- package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.test.js +64 -0
- package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.test.page.js +35 -0
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +435 -0
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.data.js +186 -0
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +100 -0
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.page.js +159 -0
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.stories.js +64 -0
- package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.js +535 -0
- package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.data.js +31 -0
- package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.js +155 -0
- package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.page.js +124 -0
- package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.stories.js +41 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.js +108 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.js +48 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.page.js +82 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.stories.js +51 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +471 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +181 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.js +289 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.test.js +188 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.js +121 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +262 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.stories.js +50 -0
- package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.js +73 -0
- package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.data.js +41 -0
- package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.js +48 -0
- package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.page.js +64 -0
- package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.stories.js +40 -0
- package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.js +36 -0
- package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.js +37 -0
- package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.page.js +55 -0
- package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.stories.js +39 -0
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +3 -3
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.page.js +0 -1
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +21 -15
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +33 -23
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +18 -30
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +110 -47
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +33 -10
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +36 -19
- package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.js +191 -0
- package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.data.js +90 -0
- package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.js +92 -0
- package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.page.js +109 -0
- package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.stories.js +60 -0
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +5 -29
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.data.js +17 -18
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.js +48 -25
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.page.js +16 -9
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +20 -16
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +40 -36
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +18 -14
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +189 -103
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +50 -11
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +31 -19
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.js +0 -9
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.js +1 -1
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/{DisplayBrowserNotSupportedPage.js → DisplayBrowserNotSupported.test.page.js} +2 -5
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +21 -15
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.js +0 -9
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.data.js +36 -0
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.js +34 -0
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.page.js +49 -0
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +23 -15
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.js +0 -9
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.js +1 -1
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/{DisplayRequireInvitationErrorPage.js → DisplayRequireInvitationError.test.page.js} +0 -3
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +21 -15
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.js +91 -10
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.data.js +56 -0
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.js +46 -0
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.page.js +79 -0
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +48 -15
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +12 -53
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.data.js +16 -16
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.js +10 -13
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.page.js +16 -6
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +21 -15
- package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.data.js +17 -3
- package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.page.js +0 -1
- package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +21 -15
- package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.data.js +28 -11
- package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +21 -16
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +17 -3
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.js +56 -19
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.data.js +25 -17
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.js +204 -58
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.page.js +43 -7
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +31 -19
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +0 -9
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.data.js +17 -3
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +62 -18
- package/src/react-extension/components/Authentication/{IntroduceSetupExtension/IntroduceSetupExtension.js → IntroduceExtension/IntroduceExtension.js} +8 -19
- package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.data.js +24 -0
- package/src/react-extension/components/Authentication/{IntroduceSetupExtension/IntroduceSetupExtension.test.js → IntroduceExtension/IntroduceExtension.test.js} +16 -6
- package/src/react-extension/components/Authentication/{IntroduceSetupExtension/IntroduceSetupExtension.test.page.js → IntroduceExtension/IntroduceExtension.test.page.js} +3 -4
- package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.stories.js +39 -0
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.data.js +27 -9
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.js +2 -8
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.page.js +4 -9
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +23 -14
- package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.js +70 -0
- package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.data.js +25 -0
- package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.js +49 -0
- package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.page.js +74 -0
- package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.stories.js +40 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.js +41 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.data.js +36 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.js +35 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.page.js +50 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +41 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.js +42 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.js +43 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.page.js +62 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.stories.js +40 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/InsertAccountRecoveryIframe.js +64 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/OrchestrateAccountRecovery.js +84 -0
- package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateApiAccountRecovery/OrchestrateApiAccountRecovery.js +66 -0
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +8 -22
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.data.js +25 -0
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.js +52 -0
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.page.js +82 -0
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +23 -16
- package/src/react-extension/components/AuthenticationLogin/Login/Login.js +156 -145
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +67 -0
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +157 -0
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +155 -0
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +32 -27
- package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxFooter.js +48 -0
- package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +90 -0
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +12 -3
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +1 -1
- package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +90 -82
- package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +80 -87
- package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.js +8 -3
- package/src/react-extension/components/Common/Avatar/UserAvatar.js +6 -1
- package/src/react-extension/components/Common/Avatar/UserAvatar.test.data.js +27 -0
- package/src/react-extension/components/Common/Avatar/UserAvatar.test.stories.js +47 -0
- package/src/react-extension/components/Common/Dialog/ManageDialogs/ManageDialogs.js +7 -2
- package/src/react-extension/components/Common/Error/HandleErrorEvents/HandleErrorEvents.js +2 -3
- package/src/react-extension/components/Common/Error/NotifyError/NotifyError.js +78 -15
- package/src/react-extension/components/Common/Icons/Icon.js +7 -0
- package/src/react-extension/components/Common/Internationalisation/TranslationProvider.js +1 -0
- package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +15 -2
- package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.test.stories.js +49 -0
- package/src/react-extension/components/Common/Route/HandleApplicationFirstLoadRoute.js +77 -0
- package/src/react-extension/components/Common/Route/HandleRouteFallback.js +14 -46
- package/src/react-extension/components/Common/Tab/Tabs.js +3 -1
- package/src/react-extension/components/Common/Workflow/ManageWorkflows/ManageWorkflows.js +72 -0
- package/src/react-extension/components/InsertAppIframe.js +12 -6
- package/src/react-extension/components/Resource/CreateResource/CreateResource.js +2 -4
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.data.js +2 -2
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +17 -2
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +19 -3
- package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +2 -4
- package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.js +20 -6
- package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.stories.js +12 -0
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.stories.js +107 -6
- package/src/react-extension/components/Resource/EditResource/EditResource.js +2 -4
- package/src/react-extension/components/Resource/EditResource/EditResource.test.data.js +2 -2
- package/src/react-extension/components/Resource/EditResource/EditResource.test.js +3 -0
- package/src/react-extension/components/Resource/EditResource/EditResource.test.stories.js +18 -4
- package/src/react-extension/components/Resource/ExportResources/ExportResources.js +5 -7
- package/src/react-extension/components/Resource/ExportResources/ExportResources.test.js +9 -2
- package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +4 -2
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +5 -7
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.js +8 -2
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +4 -2
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +24 -8
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +2 -4
- package/src/react-extension/components/Resource/ImportResources/ImportResources.js +2 -4
- package/src/react-extension/components/Resource/ImportResources/ImportResources.test.js +10 -2
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +4 -6
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.js +9 -2
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +9 -1
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +4 -2
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +19 -1
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +15 -3
- package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +8 -3
- package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +9 -8
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +6 -3
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.data.js +11 -0
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.js +11 -4
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +11 -10
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +2 -4
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +16 -5
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +13 -0
- package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.js +8 -10
- package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.js +12 -5
- package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +4 -1
- package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.js +2 -4
- package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.js +2 -5
- package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +6 -2
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +2 -4
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +15 -4
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +10 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +4 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.js +2 -3
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +3 -1
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +3 -1
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +2 -1
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +1 -1
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +2 -3
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +7 -3
- package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.js +2 -4
- package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +6 -2
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +2 -4
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +6 -2
- package/src/react-extension/components/Share/ShareDialog.js +2 -4
- package/src/react-extension/components/Share/ShareDialog.test.js +14 -3
- package/src/react-extension/components/Share/ShareDialog.test.stories.js +5 -3
- package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.js +4 -6
- package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.js +6 -2
- package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.js +2 -4
- package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +14 -3
- package/src/react-extension/components/User/DeleteUser/DeleteUser.js +2 -4
- package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +9 -2
- package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.js +2 -4
- package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +7 -1
- package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.js +79 -0
- package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.test.stories.js +32 -0
- package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.js +13 -3
- package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.test.stories.js +7 -9
- package/src/react-extension/components/User/DisplayUserWorkspace/DisplayUserWorkspace.js +5 -1
- package/src/react-extension/components/User/DisplayUserWorkspace/DisplayUserWorkspace.test.data.js +18 -9
- package/src/react-extension/components/User/DisplayUserWorkspace/DisplayUserWorkspace.test.js +2 -2
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +48 -6
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.data.js +16 -1
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.js +14 -0
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.page.js +8 -0
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.stories.js +55 -0
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +35 -0
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.data.js +33 -13
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.js +16 -3
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.page.js +19 -6
- package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.stories.js +38 -0
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +46 -10
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.data.js +21 -6
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.js +38 -5
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.page.js +10 -0
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.stories.js +53 -0
- package/src/react-extension/components/User/EditUser/EditUser.js +2 -4
- package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +8 -1
- package/src/react-extension/components/User/FilterUsersByGroups/DisplayGroupContextualMenu.js +2 -4
- package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.js +98 -0
- package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.test.data.js +56 -0
- package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.test.js +54 -0
- package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.test.page.js +37 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +36 -3
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.js +234 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.data.js +125 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.js +150 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.page.js +113 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.stories.js +142 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.js +467 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.data.js +167 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.js +106 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.page.js +101 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.stories.js +143 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.js +5 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.data.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.data.js +1 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +1 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +2 -4
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -1
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.js +2 -4
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +8 -1
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.js +2 -4
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +8 -1
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.test.data.js +1 -1
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.test.js +1 -1
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.data.js +1 -1
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.data.js +1 -1
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +2 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +2 -4
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.data.js +1 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +13 -2
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.js +5 -2
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +11 -1
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.js +11 -3
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -1
- package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.js +240 -0
- package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.data.js +53 -0
- package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.js +110 -0
- package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.page.js +85 -0
- package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.stories.js +65 -0
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +3 -4
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +1 -1
- package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +1 -1
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspace/DisplayUserSettingsWorkspace.js +16 -2
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -1
- package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.js +2 -4
- package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +18 -12
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +2 -4
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +17 -3
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +29 -0
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +5 -0
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +2 -4
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +10 -3
- package/src/react-extension/contexts/AccountRecoveryUserContext.js +223 -0
- package/src/react-extension/contexts/AccountRecoveryUserContext.test.data.js +55 -0
- package/src/react-extension/contexts/AccountRecoveryUserContext.test.js +58 -0
- package/src/react-extension/contexts/ActionFeedbackContext.test.data.js +28 -0
- package/src/react-extension/contexts/AdminAccountRecoveryContext.js +211 -0
- package/src/react-extension/contexts/AdminAccountRecoveryContext.test.data.js +66 -0
- package/src/react-extension/contexts/AdminAccountRecoveryContext.test.js +229 -0
- package/src/react-extension/contexts/AdministrationWorkspaceContext.js +27 -0
- package/src/react-extension/contexts/ApiAccountRecoveryContext.js +148 -0
- package/src/react-extension/contexts/ApiRecoverContext.js +14 -15
- package/src/react-extension/contexts/ApiSetupContext.js +8 -8
- package/src/react-extension/contexts/Authentication/AuthenticationAccountRecoveryContext.js +282 -0
- package/src/react-extension/contexts/Authentication/AuthenticationAccountRecoveryContext.test.data.js +51 -0
- package/src/react-extension/contexts/Authentication/AuthenticationAccountRecoveryContext.test.js +231 -0
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +264 -0
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +79 -0
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +234 -0
- package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.js +325 -0
- package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.test.data.js +63 -0
- package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.test.js +379 -0
- package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +339 -0
- package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.test.data.js +63 -0
- package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.test.js +364 -0
- package/src/react-extension/contexts/DialogContext.test.data.js +27 -0
- package/src/react-extension/contexts/ExtAppContext.js +0 -6
- package/src/react-extension/contexts/ExtAppContext.test.data.js +50 -0
- package/src/react-extension/contexts/NavigationContext.js +26 -2
- package/src/react-extension/contexts/ResourceWorkspaceContext.js +9 -2
- package/src/react-extension/contexts/ResourceWorkspaceContext.test.page.js +10 -1
- package/src/react-extension/contexts/UserSettingsContext.js +1 -2
- package/src/react-extension/contexts/UserWorkspaceContext.js +35 -10
- package/src/react-extension/contexts/UserWorkspaceContext.test.data.js +13 -0
- package/src/react-extension/contexts/UserWorkspaceContext.test.page.js +6 -1
- package/src/react-extension/contexts/WorkflowContext.js +89 -0
- package/src/react-extension/contexts/WorkflowContext.test.data.js +27 -0
- package/src/react-extension/lib/Error/GpgKeyError.js +22 -0
- package/src/react-extension/lib/Error/InvalidMasterPasswordError.js +23 -0
- package/src/react-extension/lib/Error/ServerKeyChangedError.js +22 -0
- package/src/react-extension/test/fixture/Settings/siteSettings.js +4 -0
- package/src/react-extension/test/fixture/Settings/userSettings.js +1 -1
- package/src/react-extension/test/mock/MockPort.js +2 -2
- package/src/react-extension/test/mock/MockStorage.js +0 -2
- package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +2 -1
- package/src/react-extension/test/mock/components/React/mockSetState.js +22 -0
- package/src/react-quickaccess/ExtQuickAccess.js +10 -1
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +1 -1
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +6 -10
- package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +6 -10
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +2 -6
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +1 -0
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +17 -3
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +5 -3
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +31 -2
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +1 -1
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +32 -3
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.data.js +6 -3
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +29 -19
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.data.js +2 -0
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +12 -9
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +1 -1
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +127 -164
- package/src/react-web-integration/lib/Dom/DomUtils.js +23 -1
- package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +7 -1
- package/src/react-web-integration/lib/InForm/InFormManager.js +24 -14
- package/src/react-web-integration/lib/InForm/InformManager.test.data.js +80 -2
- package/src/react-web-integration/lib/InForm/InformManager.test.js +147 -7
- package/src/react-web-integration/lib/InForm/InformManager.test.page.js +16 -2
- package/src/shared/lib/Error/EntityValidationError.js +81 -0
- package/src/shared/lib/apiClient/apiClient.test.js +1 -1
- package/src/shared/services/accountRecovery/ApiAppAccountRecoveryUserService.js +78 -0
- package/src/shared/services/accountRecovery/ExtAppAccountRecoveryUserService.js +24 -0
- package/test/jest.setup.js +8 -0
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +0 -97
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +0 -33
- package/src/react-extension/components/Authentication/CheckPassphrase/GenerateKeyOnPassphraseLostSecondaryAction.js +0 -41
- package/src/react-extension/components/Authentication/CheckPassphrase/HelpOnPassphraseLostSecondaryAction.js +0 -41
- package/src/react-extension/components/Authentication/CheckPassphrase/HelpOnPrivateKeyLostSecondaryAction.js +0 -41
- package/src/react-extension/components/Authentication/ImportGpgKey/GenerateKeySecondaryAction.js +0 -40
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.data.js +0 -11
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +0 -34
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.js +0 -87
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +0 -33
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginInProgress.js +0 -49
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +0 -33
- package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLogin.js +0 -102
- package/src/react-extension/components/Internationalisation/ChangeLocale/ChangeExtAuthenticationLocale.js +0 -63
- package/src/react-extension/contexts/AuthenticationContext.js +0 -467
- package/src/react-extension/contexts/AuthenticationContext.test.data.js +0 -15
- package/src/react-extension/contexts/AuthenticationContext.test.js +0 -252
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.6.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from "react";
|
|
16
|
+
import PropTypes from "prop-types";
|
|
17
|
+
import XRegExp from "xregexp";
|
|
18
|
+
import Icon from "../../Common/Icons/Icon";
|
|
19
|
+
import {Trans, withTranslation} from "react-i18next";
|
|
20
|
+
import FormSubmitButton from "../../Common/Inputs/FormSubmitButton/FormSubmitButton";
|
|
21
|
+
import FormCancelButton from "../../Common/Inputs/FormSubmitButton/FormCancelButton";
|
|
22
|
+
import Tooltip from "../../Common/Tooltip/Tooltip";
|
|
23
|
+
import {SecretGenerator} from "../../../../shared/lib/SecretGenerator/SecretGenerator";
|
|
24
|
+
import {SecretGeneratorComplexity} from "../../../../shared/lib/SecretGenerator/SecretGeneratorComplexity";
|
|
25
|
+
import {withAppContext} from "../../../contexts/AppContext";
|
|
26
|
+
import {withDialog} from "../../../contexts/DialogContext";
|
|
27
|
+
|
|
28
|
+
/** Resource password max length */
|
|
29
|
+
const RESOURCE_PASSWORD_MAX_LENGTH = 4096;
|
|
30
|
+
const FAIR_STRENGTH_ENTROPY = 80;
|
|
31
|
+
/**
|
|
32
|
+
* This component allows to display the generate organization key for the administration
|
|
33
|
+
*/
|
|
34
|
+
class GenerateOrganizationKey extends React.Component {
|
|
35
|
+
/**
|
|
36
|
+
* Constructor
|
|
37
|
+
* @param {Object} props
|
|
38
|
+
*/
|
|
39
|
+
constructor(props) {
|
|
40
|
+
super(props);
|
|
41
|
+
this.state = this.defaultState;
|
|
42
|
+
this.bindCallbacks();
|
|
43
|
+
this.createInputRef();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get default state
|
|
48
|
+
* @returns {*}
|
|
49
|
+
*/
|
|
50
|
+
get defaultState() {
|
|
51
|
+
return {
|
|
52
|
+
name: "",
|
|
53
|
+
nameError: "",
|
|
54
|
+
email: "",
|
|
55
|
+
emailError: "",
|
|
56
|
+
algorithm: "RSA",
|
|
57
|
+
keySize: 4096,
|
|
58
|
+
password: "",
|
|
59
|
+
passwordError: "",
|
|
60
|
+
passwordWarning: "",
|
|
61
|
+
passphraseStyle: {
|
|
62
|
+
background: "",
|
|
63
|
+
color: ""
|
|
64
|
+
},
|
|
65
|
+
securityTokenStyle: {
|
|
66
|
+
background: this.props.context.userSettings.getSecurityTokenBackgroundColor(),
|
|
67
|
+
color: this.props.context.userSettings.getSecurityTokenTextColor(),
|
|
68
|
+
},
|
|
69
|
+
viewPassword: false,
|
|
70
|
+
hasAlreadyBeenValidated: false // True if the form has already been submitted once
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Bind callbacks methods
|
|
76
|
+
*/
|
|
77
|
+
bindCallbacks() {
|
|
78
|
+
this.handleFormSubmit = this.handleFormSubmit.bind(this);
|
|
79
|
+
this.handleInputChange = this.handleInputChange.bind(this);
|
|
80
|
+
this.handleNameInputKeyUp = this.handleNameInputKeyUp.bind(this);
|
|
81
|
+
this.handleEmailInputKeyUp = this.handleEmailInputKeyUp.bind(this);
|
|
82
|
+
this.handlePasswordInputFocus = this.handlePasswordInputFocus.bind(this);
|
|
83
|
+
this.handlePasswordInputBlur = this.handlePasswordInputBlur.bind(this);
|
|
84
|
+
this.handlePasswordInputKeyUp = this.handlePasswordInputKeyUp.bind(this);
|
|
85
|
+
this.handleViewPasswordButtonClick = this.handleViewPasswordButtonClick.bind(this);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Create DOM nodes or React elements references in order to be able to access them programmatically.
|
|
90
|
+
*/
|
|
91
|
+
createInputRef() {
|
|
92
|
+
this.nameInputRef = React.createRef();
|
|
93
|
+
this.emailInputRef = React.createRef();
|
|
94
|
+
this.passwordInputRef = React.createRef();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Handle name input keyUp event.
|
|
99
|
+
*/
|
|
100
|
+
handleNameInputKeyUp() {
|
|
101
|
+
if (this.state.hasAlreadyBeenValidated) {
|
|
102
|
+
this.validateNameInput();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Validate the name input.
|
|
108
|
+
* @return {Promise}
|
|
109
|
+
*/
|
|
110
|
+
validateNameInput() {
|
|
111
|
+
const name = this.state.name.trim();
|
|
112
|
+
let nameError = null;
|
|
113
|
+
if (!name.length) {
|
|
114
|
+
nameError = this.translate("A name is required.");
|
|
115
|
+
}
|
|
116
|
+
this.setState({nameError});
|
|
117
|
+
return nameError === null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Handle email input keyUp event.
|
|
122
|
+
*/
|
|
123
|
+
handleEmailInputKeyUp() {
|
|
124
|
+
if (this.state.hasAlreadyBeenValidated) {
|
|
125
|
+
this.validateEmailInput();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Validate the email input.
|
|
131
|
+
* @returns {Promise<void>}
|
|
132
|
+
*/
|
|
133
|
+
validateEmailInput() {
|
|
134
|
+
let emailError = null;
|
|
135
|
+
const email = this.state.email.trim();
|
|
136
|
+
if (!email.length) {
|
|
137
|
+
emailError = this.translate("An email is required.");
|
|
138
|
+
} else if (!this.isEmail(email)) {
|
|
139
|
+
emailError = this.translate("Please enter a valid email address.");
|
|
140
|
+
}
|
|
141
|
+
this.setState({email, emailError});
|
|
142
|
+
return emailError === null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Check that a given string is a valid email
|
|
147
|
+
* @param {string} email the email to test
|
|
148
|
+
*/
|
|
149
|
+
isEmail(email) {
|
|
150
|
+
const hostnameRegexp = "(?:[_\\p{L}0-9][-_\\p{L}0-9]*\\.)*(?:[\\p{L}0-9][-\\p{L}0-9]{0,62})\\.(?:(?:[a-z]{2}\\.)?[a-z]{2,})";
|
|
151
|
+
const emailRegexp = `^[\\p{L}0-9!#$%&'*+\/=?^_\`{|}~-]+(?:\\.[\\p{L}0-9!#$%&'*+\/=?^_\`{|}~-]+)*@${hostnameRegexp}$`;
|
|
152
|
+
const xregexp = XRegExp(emailRegexp);
|
|
153
|
+
return xregexp.test(email);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Handle password input keyUp event.
|
|
158
|
+
*/
|
|
159
|
+
handlePasswordInputKeyUp() {
|
|
160
|
+
if (this.state.hasAlreadyBeenValidated) {
|
|
161
|
+
this.validatePasswordInput();
|
|
162
|
+
} else {
|
|
163
|
+
const hasResourcePasswordMaxLength = this.state.password.length >= RESOURCE_PASSWORD_MAX_LENGTH;
|
|
164
|
+
const warningMessage = this.translate("Warning: this is the maximum size for this field, make sure your data was not truncated");
|
|
165
|
+
const passwordWarning = hasResourcePasswordMaxLength ? warningMessage : '';
|
|
166
|
+
this.setState({passwordWarning});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Handle view password button click.
|
|
172
|
+
*/
|
|
173
|
+
handleViewPasswordButtonClick() {
|
|
174
|
+
if (this.state.processing) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
this.setState({viewPassword: !this.state.viewPassword});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Validate the password input.
|
|
182
|
+
* @return {Promise}
|
|
183
|
+
*/
|
|
184
|
+
validatePasswordInput() {
|
|
185
|
+
const password = this.state.password;
|
|
186
|
+
let passwordError = null;
|
|
187
|
+
if (!password.length) {
|
|
188
|
+
passwordError = this.translate("A passphrase is required.");
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (SecretGenerator.entropy(this.state.password) < FAIR_STRENGTH_ENTROPY) {
|
|
192
|
+
passwordError = this.translate(`A strong passphrase is required. The minimum complexity must be 'fair'`);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
this.setState({passwordError});
|
|
196
|
+
return passwordError === null;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Handle form input change.
|
|
201
|
+
* @params {ReactEvent} The react event.
|
|
202
|
+
*/
|
|
203
|
+
handleInputChange(event) {
|
|
204
|
+
const target = event.target;
|
|
205
|
+
this.setState({
|
|
206
|
+
[target.name]: target.value
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Handle password input focus.
|
|
212
|
+
*/
|
|
213
|
+
handlePasswordInputFocus() {
|
|
214
|
+
this.setState({
|
|
215
|
+
passphraseStyle: {
|
|
216
|
+
background: this.props.context.userSettings.getSecurityTokenBackgroundColor(),
|
|
217
|
+
color: this.props.context.userSettings.getSecurityTokenTextColor(),
|
|
218
|
+
},
|
|
219
|
+
securityTokenStyle: {
|
|
220
|
+
background: this.props.context.userSettings.getSecurityTokenTextColor(),
|
|
221
|
+
color: this.props.context.userSettings.getSecurityTokenBackgroundColor(),
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Handle password input blur.
|
|
228
|
+
*/
|
|
229
|
+
handlePasswordInputBlur() {
|
|
230
|
+
this.setState({
|
|
231
|
+
passphraseStyle: {
|
|
232
|
+
background: "",
|
|
233
|
+
color: ""
|
|
234
|
+
},
|
|
235
|
+
securityTokenStyle: {
|
|
236
|
+
background: this.props.context.userSettings.getSecurityTokenBackgroundColor(),
|
|
237
|
+
color: this.props.context.userSettings.getSecurityTokenTextColor(),
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Handle validation error.
|
|
244
|
+
*/
|
|
245
|
+
handleValidateError() {
|
|
246
|
+
this.focusFirstFieldError();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Focus the first field of the form which is in error state.
|
|
251
|
+
*/
|
|
252
|
+
focusFirstFieldError() {
|
|
253
|
+
if (this.state.nameError) {
|
|
254
|
+
this.nameInputRef.current.focus();
|
|
255
|
+
} else if (this.state.emailError) {
|
|
256
|
+
this.emailInputRef.current.focus();
|
|
257
|
+
} else if (this.state.passwordError) {
|
|
258
|
+
this.passwordInputRef.current.focus();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Handle form submit event.
|
|
264
|
+
* @params {ReactEvent} The react event
|
|
265
|
+
* @return {Promise}
|
|
266
|
+
*/
|
|
267
|
+
async handleFormSubmit(event) {
|
|
268
|
+
event.preventDefault();
|
|
269
|
+
|
|
270
|
+
if (!this.state.processing) {
|
|
271
|
+
await this.save();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Save the changes.
|
|
277
|
+
*/
|
|
278
|
+
async save() {
|
|
279
|
+
this.setState({hasAlreadyBeenValidated: true});
|
|
280
|
+
this.toggleProcessing();
|
|
281
|
+
|
|
282
|
+
if (!await this.validate()) {
|
|
283
|
+
this.handleValidateError();
|
|
284
|
+
this.toggleProcessing();
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const key = await this.generateKey();
|
|
289
|
+
this.props.onUpdateOrganizationKey(key.public_key.armored_key, key.private_key.armored_key);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Validate the form.
|
|
294
|
+
* @return {Promise<boolean>}
|
|
295
|
+
*/
|
|
296
|
+
async validate() {
|
|
297
|
+
// Reset the form errors.
|
|
298
|
+
this.setState({
|
|
299
|
+
nameError: "",
|
|
300
|
+
emailError: "",
|
|
301
|
+
passwordError: "",
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
// Validate the form inputs.
|
|
305
|
+
const isNameValid = this.validateNameInput();
|
|
306
|
+
const isEmailValid = this.validateEmailInput();
|
|
307
|
+
const isPasswordValid = this.validatePasswordInput();
|
|
308
|
+
|
|
309
|
+
return isNameValid && isEmailValid && isPasswordValid;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
async generateKey() {
|
|
313
|
+
const generateGpgKeyDto = {
|
|
314
|
+
name: this.state.name,
|
|
315
|
+
email: this.state.email,
|
|
316
|
+
algorithm: this.state.algorithm,
|
|
317
|
+
keySize: this.state.keySize,
|
|
318
|
+
passphrase: this.state.password,
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
return await this.props.context.port.request("passbolt.account-recovery.generate-organization-key", generateGpgKeyDto);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Toggle the processing mode
|
|
326
|
+
*/
|
|
327
|
+
toggleProcessing() {
|
|
328
|
+
this.setState({processing: !this.state.processing});
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Should input be disabled? True if state is processing
|
|
333
|
+
* @returns {boolean}
|
|
334
|
+
*/
|
|
335
|
+
hasAllInputDisabled() {
|
|
336
|
+
return this.state.processing;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Get the translate function
|
|
341
|
+
* @returns {function(...[*]=)}
|
|
342
|
+
*/
|
|
343
|
+
get translate() {
|
|
344
|
+
return this.props.t;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Render the component
|
|
349
|
+
* @returns {JSX}
|
|
350
|
+
*/
|
|
351
|
+
render() {
|
|
352
|
+
const passwordEntropy = SecretGenerator.entropy(this.state.password);
|
|
353
|
+
const passwordStrength = SecretGeneratorComplexity.strength(passwordEntropy);
|
|
354
|
+
/*
|
|
355
|
+
* The parser can't find the translation for passwordStrength.label
|
|
356
|
+
* To fix that we can use it in comment
|
|
357
|
+
* this.translate("n/a")
|
|
358
|
+
* this.translate("very weak")
|
|
359
|
+
* this.translate("weak")
|
|
360
|
+
* this.translate("fair")
|
|
361
|
+
* this.translate("strong")
|
|
362
|
+
* this.translate("very strong")
|
|
363
|
+
*/
|
|
364
|
+
return (
|
|
365
|
+
<form onSubmit={this.handleFormSubmit} noValidate>
|
|
366
|
+
<div className="form-content generate-organization-key">
|
|
367
|
+
<div className={`input text required ${this.state.nameError ? "error" : ""}`}>
|
|
368
|
+
<label htmlFor="generate-organization-key-form-name"><Trans>Name</Trans></label>
|
|
369
|
+
<input id="generate-organization-key-form-name" name="name" type="text" value={this.state.name}
|
|
370
|
+
onKeyUp={this.handleNameInputKeyUp} onChange={this.handleInputChange}
|
|
371
|
+
disabled={this.hasAllInputDisabled()} ref={this.nameInputRef} className="required fluid" maxLength="64"
|
|
372
|
+
required="required" autoComplete="off" autoFocus={true} placeholder={this.translate("Name")} />
|
|
373
|
+
{this.state.nameError &&
|
|
374
|
+
<div className="name error-message">{this.state.nameError}</div>
|
|
375
|
+
}
|
|
376
|
+
</div>
|
|
377
|
+
<div className={`input text required ${this.state.emailError ? "error" : ""}`}>
|
|
378
|
+
<label htmlFor="generate-organization-key-form-email"><Trans>Email</Trans></label>
|
|
379
|
+
<input id="generate-organization-key-form-email" name="email" ref={this.emailInputRef} className="required fluid" maxLength="64" type="email"
|
|
380
|
+
autoComplete="off" value={this.state.email} onChange={this.handleInputChange} placeholder={this.translate("Email Address")}
|
|
381
|
+
onKeyUp={this.handleEmailInputKeyUp} disabled={this.hasAllInputDisabled()} required="required"/>
|
|
382
|
+
{this.state.emailError &&
|
|
383
|
+
<div className="email error-message">{this.state.emailError}</div>
|
|
384
|
+
}
|
|
385
|
+
</div>
|
|
386
|
+
<div className="input select">
|
|
387
|
+
<label htmlFor="generate-organization-key-form-algorithm">
|
|
388
|
+
<Trans>Algorithm</Trans>
|
|
389
|
+
<Tooltip message={this.translate("Algorithm and key size cannot be changed at the moment. These are secure default")}
|
|
390
|
+
icon="info-circle" />
|
|
391
|
+
</label>
|
|
392
|
+
<input id="generate-organization-key-form-algorithm" name="algorithm" value={this.state.algorithm}
|
|
393
|
+
className="fluid" type="text"
|
|
394
|
+
autoComplete="off" disabled={true} />
|
|
395
|
+
</div>
|
|
396
|
+
<div className="input select">
|
|
397
|
+
<label htmlFor="generate-organization-key-form-keySize">
|
|
398
|
+
<Trans>Key Size</Trans>
|
|
399
|
+
<Tooltip message={this.translate("Algorithm and key size cannot be changed at the moment. These are secure default")}
|
|
400
|
+
icon="info-circle" />
|
|
401
|
+
</label>
|
|
402
|
+
<input id="generate-organization-key-form-key-size" name="keySize" value={this.state.keySize}
|
|
403
|
+
className="fluid" type="text"
|
|
404
|
+
autoComplete="off" disabled={true} />
|
|
405
|
+
</div>
|
|
406
|
+
<div className={`input-password-wrapper input required ${this.state.passwordError ? "error" : ""}`}>
|
|
407
|
+
<label htmlFor="generate-organization-key-form-password"><Trans>Organization key passphrase</Trans></label>
|
|
408
|
+
<div className="input text password">
|
|
409
|
+
<input id="generate-organization-key-form-password" name="password" className="required" maxLength="4096"
|
|
410
|
+
placeholder={this.translate("Passphrase")} required="required" type={this.state.viewPassword ? "text" : "password"}
|
|
411
|
+
onKeyUp={this.handlePasswordInputKeyUp} value={this.state.password}
|
|
412
|
+
onFocus={this.handlePasswordInputFocus} onBlur={this.handlePasswordInputBlur}
|
|
413
|
+
onChange={this.handleInputChange} disabled={this.hasAllInputDisabled()}
|
|
414
|
+
autoComplete="new-password"
|
|
415
|
+
ref={this.passwordInputRef} />
|
|
416
|
+
<a onClick={this.handleViewPasswordButtonClick}
|
|
417
|
+
className={`password-view button button-icon toggle ${this.state.viewPassword ? "selected" : ""}`}>
|
|
418
|
+
<Icon name='eye-open' big={true} />
|
|
419
|
+
<span className="visually-hidden">view</span>
|
|
420
|
+
</a>
|
|
421
|
+
<span className="security-token" style={this.state.securityTokenStyle}>{this.props.context.userSettings.getSecurityTokenCode()}</span>
|
|
422
|
+
</div>
|
|
423
|
+
<div className={`password-complexity ${passwordStrength.id}`}>
|
|
424
|
+
<span className="progress">
|
|
425
|
+
<span className={`progress-bar ${passwordStrength.id}`} />
|
|
426
|
+
</span>
|
|
427
|
+
<span className="complexity-text">
|
|
428
|
+
<div>
|
|
429
|
+
<Trans>Complexity:</Trans> <strong>{this.translate(passwordStrength.label)}</strong>
|
|
430
|
+
</div>
|
|
431
|
+
<div>
|
|
432
|
+
<Trans>Entropy:</Trans> <strong>{passwordEntropy.toFixed(1)} bits</strong>
|
|
433
|
+
</div>
|
|
434
|
+
</span>
|
|
435
|
+
</div>
|
|
436
|
+
{this.state.passwordError &&
|
|
437
|
+
<div className="input text">
|
|
438
|
+
<div className="password error-message">{this.state.passwordError}</div>
|
|
439
|
+
</div>
|
|
440
|
+
}
|
|
441
|
+
{this.state.passwordWarning &&
|
|
442
|
+
<div className="input text">
|
|
443
|
+
<div className="password warning message">{this.state.passwordWarning}</div>
|
|
444
|
+
</div>
|
|
445
|
+
}
|
|
446
|
+
</div>
|
|
447
|
+
</div>
|
|
448
|
+
{!this.state.hasAlreadyBeenValidated &&
|
|
449
|
+
<div className="warning message" id="generate-organization-key-setting-overridden-banner">
|
|
450
|
+
<p>
|
|
451
|
+
<Trans>Warning, we encourage you to generate your OpenPGP Organization Recovery Key separately. Make sure you keep a backup in a safe place.</Trans>
|
|
452
|
+
</p>
|
|
453
|
+
</div>
|
|
454
|
+
}
|
|
455
|
+
<div className="submit-wrapper clearfix">
|
|
456
|
+
<FormSubmitButton disabled={this.hasAllInputDisabled()} processing={this.state.processing} value={this.translate("Generate & Apply")} />
|
|
457
|
+
<FormCancelButton disabled={this.hasAllInputDisabled()} onClick={this.props.onClose} />
|
|
458
|
+
</div>
|
|
459
|
+
</form>
|
|
460
|
+
);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
GenerateOrganizationKey.propTypes = {
|
|
465
|
+
context: PropTypes.any, // The application context
|
|
466
|
+
onUpdateOrganizationKey: PropTypes.func,
|
|
467
|
+
onClose: PropTypes.func,
|
|
468
|
+
t: PropTypes.func, // The translation function
|
|
469
|
+
};
|
|
470
|
+
|
|
471
|
+
export default withAppContext(withDialog(withTranslation('common')(GenerateOrganizationKey)));
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
4
|
+
*
|
|
5
|
+
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
+
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
+
* Redistributions of files must retain the above copyright notice.
|
|
8
|
+
*
|
|
9
|
+
* @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
|
|
10
|
+
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
+
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
+
* @since 3.6.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Unit tests on ConfirmSaveAccountRecoverySettings in regard of specifications
|
|
17
|
+
*/
|
|
18
|
+
import {waitFor} from "@testing-library/react";
|
|
19
|
+
import SelectAccountRecoveryOrganizationKeyPage from "./SelectAccountRecoveryOrganizationKey.test.page";
|
|
20
|
+
|
|
21
|
+
import UserSettings from "../../../../shared/lib/Settings/UserSettings";
|
|
22
|
+
import userSettingsFixture from "../../../test/fixture/Settings/userSettings";
|
|
23
|
+
|
|
24
|
+
function defaultProps() {
|
|
25
|
+
return {
|
|
26
|
+
context: {
|
|
27
|
+
userSettings: new UserSettings(userSettingsFixture)
|
|
28
|
+
},
|
|
29
|
+
dialogContext: {
|
|
30
|
+
open: jest.fn()
|
|
31
|
+
},
|
|
32
|
+
onClose: jest.fn(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
jest.resetModules();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('As AD I can generate an ORK', () => {
|
|
41
|
+
/**
|
|
42
|
+
* Given that I am a logged in administrator in the administration workspace
|
|
43
|
+
* And I am on Account recovery settings page
|
|
44
|
+
* And the “Organization recovery key” dialog is open
|
|
45
|
+
* When I click on the “Generate” tab
|
|
46
|
+
* Then I see the generate tab is selected
|
|
47
|
+
* And I see a “Name” and an “Email” mandatory text fields
|
|
48
|
+
* And I see “Algorithm” and “Key Size” select lists with default values set
|
|
49
|
+
* And I see an “Organization key passphrase” text field
|
|
50
|
+
* And I see a show icon next to the passphrase field
|
|
51
|
+
* And I see my security token next to the eye icon
|
|
52
|
+
* And I see the passphrase strength indicators below the field
|
|
53
|
+
* And I see a warning bar with a description telling to import instead
|
|
54
|
+
* And I see a “Cancel” button to go back to the Account recovery settings page
|
|
55
|
+
* And I see an “Generate & Apply” button
|
|
56
|
+
*/
|
|
57
|
+
it("As a logged in administrator on the account recovery settings in the administration workspace, I can open a dialog to generate an Organization Recovery Key", async() => {
|
|
58
|
+
const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
|
|
59
|
+
await waitFor(() => { });
|
|
60
|
+
// Dialog title exists and correct
|
|
61
|
+
expect(page.exists()).toBeTruthy();
|
|
62
|
+
|
|
63
|
+
await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
|
|
64
|
+
|
|
65
|
+
expect(page.isFieldRequired(page.nameField)).toBe(true);
|
|
66
|
+
expect(page.isFieldRequired(page.emailField)).toBe(true);
|
|
67
|
+
expect(page.algorithmField.value).toBe("RSA");
|
|
68
|
+
expect(page.keySizeField.value).toBe("4096");
|
|
69
|
+
expect(page.passphraseField).not.toBeNull();
|
|
70
|
+
expect(page.showPassphraseButton).not.toBeNull();
|
|
71
|
+
expect(page.securityToken).not.toBeNull();
|
|
72
|
+
expect(page.passphraseStrength).not.toBeNull();
|
|
73
|
+
expect(page.warningImportInstead).not.toBeNull();
|
|
74
|
+
expect(page.cancelButton).not.toBeNull();
|
|
75
|
+
expect(page.generateButton).not.toBeNull();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* As a logged in administrator in the administration workspace, I can not select the algorithm type of the Organization Recovery Key generator
|
|
80
|
+
* Given that I am a logged in administrator in the administration workspace
|
|
81
|
+
* And I am on the generate tab of the “Organization Recovery Key” dialog
|
|
82
|
+
* When I click on the “Algorithm” select list
|
|
83
|
+
* Then I do not see a list of available algorithms
|
|
84
|
+
* And I see a tooltip telling me that this setting is disable and safe
|
|
85
|
+
*
|
|
86
|
+
* As a logged in administrator in the administration workspace, I cannot select the key size type of the Organization Recovery Key generator
|
|
87
|
+
* Given that I am a logged in administrator in the administration workspace
|
|
88
|
+
* And I am on the generate tab of the “Organization Recovery Key” dialog
|
|
89
|
+
* When I click on the “Key size” select list
|
|
90
|
+
* Then I do not see a list of available key sizes
|
|
91
|
+
* And I see a tooltip telling me that this setting is disable and safe
|
|
92
|
+
*/
|
|
93
|
+
it("As a logged in administrator in the administration workspace, I can not select the algorithm type of the Organization Recovery Key generator", async() => {
|
|
94
|
+
const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
|
|
95
|
+
await waitFor(() => { });
|
|
96
|
+
// Dialog title exists and correct
|
|
97
|
+
expect(page.exists()).toBeTruthy();
|
|
98
|
+
|
|
99
|
+
await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
|
|
100
|
+
|
|
101
|
+
const tooltipText = "Algorithm and key size cannot be changed at the moment. These are secure default";
|
|
102
|
+
expect(page.algorithmTooltip).not.toBeNull();
|
|
103
|
+
expect(page.algorithmTooltip.dataset.tooltip).toBe(tooltipText);
|
|
104
|
+
|
|
105
|
+
expect(page.keySizeTooltip).not.toBeNull();
|
|
106
|
+
expect(page.keySizeTooltip.dataset.tooltip).toBe(tooltipText);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Given that I am a logged in administrator in the administration workspace
|
|
111
|
+
* And I am on the generate tab of the “Organization Recovery Key” dialog
|
|
112
|
+
* When I type at least one character in the “Organization key passphrase” field
|
|
113
|
+
* Then I see the characters are replaced with symbols
|
|
114
|
+
* When I click on show icon
|
|
115
|
+
* Then the show icon is replaced by a hide icon
|
|
116
|
+
* Then the symbols are replaced with the characters I typed
|
|
117
|
+
* When I click on the hide icon
|
|
118
|
+
* Then the characters are replaced with symbols
|
|
119
|
+
*/
|
|
120
|
+
it("As a logged in administrator in the administration workspace, I can show or hide the content of the “Organization key passphrase” text field in the Organization Recovery Key dialog", async() => {
|
|
121
|
+
const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
|
|
122
|
+
await waitFor(() => { });
|
|
123
|
+
// Dialog title exists and correct
|
|
124
|
+
expect(page.exists()).toBeTruthy();
|
|
125
|
+
|
|
126
|
+
await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
|
|
127
|
+
|
|
128
|
+
page.passphraseField.value = "dummy-passphrase";
|
|
129
|
+
expect(page.passphraseField.getAttribute("type")).toBe("password");
|
|
130
|
+
|
|
131
|
+
await page.toggleShowPassword(() => expect(page.passphraseField.getAttribute("type")).toBe("text"));
|
|
132
|
+
await page.toggleShowPassword(() => expect(page.passphraseField.getAttribute("type")).toBe("password"));
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Given that I am a logged in administrator in the administration workspace
|
|
137
|
+
* And I am on the generate tab of the “Organization Recovery Key” dialog
|
|
138
|
+
* And I do not fill out all mandatory fields
|
|
139
|
+
* When I click on the “Generate & Apply” button
|
|
140
|
+
* Then I see several error message in @red below the mandatory fields
|
|
141
|
+
* And I see the empty mandatory field label in @red
|
|
142
|
+
*/
|
|
143
|
+
it("As a logged in administrator in the administration workspace, I cannot generate OpenPGP Public key in the Organization Recovery Key settings without a valid email and name", async() => {
|
|
144
|
+
const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
|
|
145
|
+
await waitFor(() => { });
|
|
146
|
+
// Dialog title exists and correct
|
|
147
|
+
expect(page.exists()).toBeTruthy();
|
|
148
|
+
await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
|
|
149
|
+
|
|
150
|
+
await page.clickOnGenerateButton(() => expect(page.nameError).not.toBeNull());
|
|
151
|
+
|
|
152
|
+
expect(page.nameFieldError).not.toBeNull();
|
|
153
|
+
expect(page.emailFieldError).not.toBeNull();
|
|
154
|
+
expect(page.passwordFieldError).not.toBeNull();
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Given that I am a logged in administrator in the administration workspace
|
|
159
|
+
* And I am on the generate tab of the “Organization Recovery Key” dialog
|
|
160
|
+
* And I fill out all mandatory fields
|
|
161
|
+
* And I use a weak passphrase
|
|
162
|
+
* When I click on the “Generate & Apply” button
|
|
163
|
+
* Then I see an error message below the passphrase telling me to use a strong passphrase instead
|
|
164
|
+
*/
|
|
165
|
+
it("As a logged in administrator in the administration workspace, I cannot generate OpenPGP Public key in the Organization Recovery Key settings without a strong passphrase", async() => {
|
|
166
|
+
const page = new SelectAccountRecoveryOrganizationKeyPage(defaultProps());
|
|
167
|
+
await waitFor(() => { });
|
|
168
|
+
// Dialog title exists and correct
|
|
169
|
+
expect(page.exists()).toBeTruthy();
|
|
170
|
+
await page.clickOnGenerateTab(() => expect(page.isGenerateTabSeletect()).toBe(true));
|
|
171
|
+
|
|
172
|
+
page.nameField.value = "test";
|
|
173
|
+
page.emailField.value = "test@passbolt.com";
|
|
174
|
+
page.passphraseField.value = "almost fair passw";
|
|
175
|
+
|
|
176
|
+
await page.clickOnGenerateButton(() => expect(page.nameError).not.toBeNull());
|
|
177
|
+
|
|
178
|
+
expect(page.passphraseFieldError).not.toBeNull();
|
|
179
|
+
expect(page.passphraseFieldError.textContent).toBe(`A strong passphrase is required. The minimum complexity must be 'fair'`);
|
|
180
|
+
});
|
|
181
|
+
});
|