passbolt-styleguide 3.6.0 → 3.7.0-alpha1

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.
Files changed (485) hide show
  1. package/README.md +9 -6
  2. package/build/css/help.min.css +3 -7
  3. package/build/css/public.min.css +3 -16
  4. package/build/css/themes/default/api_authentication.min.css +3 -3
  5. package/build/css/themes/default/api_cloud.min.css +3 -3
  6. package/build/css/themes/default/api_main.min.css +3 -12
  7. package/build/css/themes/default/api_reports.min.css +3 -12
  8. package/build/css/themes/default/api_webinstaller.min.css +3 -12
  9. package/build/css/themes/default/ext_app.min.css +3 -12
  10. package/build/css/themes/default/ext_authentication.min.css +3 -3
  11. package/build/css/themes/default/ext_external.min.css +2 -2
  12. package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
  13. package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
  14. package/build/css/themes/default/ext_quickaccess.min.css +3 -3
  15. package/build/css/themes/midgar/api_authentication.min.css +3 -3
  16. package/build/css/themes/midgar/api_main.min.css +3 -12
  17. package/build/css/themes/midgar/api_reports.min.css +3 -12
  18. package/build/css/themes/midgar/ext_app.min.css +3 -12
  19. package/build/css/themes/midgar/ext_authentication.min.css +3 -3
  20. package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
  21. package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
  22. package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
  23. package/build/js/dist/api-account-recovery.js +1 -1
  24. package/build/js/dist/api-app.js +1 -1
  25. package/build/js/dist/api-app.js.LICENSE.txt +25 -1
  26. package/build/js/dist/api-recover.js +1 -1
  27. package/build/js/dist/api-setup.js +1 -1
  28. package/build/js/dist/api-triage.js +1 -1
  29. package/build/js/dist/api-vendors.js +1 -1
  30. package/build/js/dist/api-vendors.js.LICENSE.txt +64 -10
  31. package/i18next-parser.config.js +22 -0
  32. package/jest.config.json +19 -1
  33. package/package.json +18 -13
  34. package/src/img/og/og_image.png +0 -0
  35. package/src/locales/de-DE/common.json +308 -173
  36. package/src/locales/en-UK/common.json +170 -184
  37. package/src/locales/es-ES/common.json +955 -0
  38. package/src/locales/fr-FR/common.json +308 -174
  39. package/src/locales/ja-JP/common.json +292 -172
  40. package/src/locales/lt-LT/common.json +985 -0
  41. package/src/locales/nl-NL/common.json +329 -194
  42. package/src/locales/pl-PL/common.json +337 -172
  43. package/src/locales/sv-SE/common.json +307 -172
  44. package/src/public-website-sign-in/PublicWebsiteSignInBootstrap.js +25 -0
  45. package/src/public-website-sign-in/lib/SignIn/SignInManager.js +85 -0
  46. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.data.js +45 -0
  47. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.js +59 -0
  48. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.page.js +67 -0
  49. package/src/react-extension/ExtBootstrapAccountRecovery.js +17 -0
  50. package/src/react-extension/ExtBootstrapApp.js +17 -0
  51. package/src/react-extension/ExtBootstrapLogin.js +17 -0
  52. package/src/react-extension/ExtBootstrapRecover.js +17 -0
  53. package/src/react-extension/ExtBootstrapSetup.js +17 -0
  54. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.js +3 -7
  55. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.page.js +1 -1
  56. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.stories.js +1 -1
  57. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.js +1 -1
  58. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.js +1 -9
  59. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.js +2 -10
  60. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.data.js +3 -4
  61. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.js +1 -1
  62. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.stories.js +1 -1
  63. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.js +1 -1
  64. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.stories.js +1 -1
  65. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +6 -3
  66. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.data.js +10 -7
  67. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.stories.js +1 -1
  68. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +2 -12
  69. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.js +2 -12
  70. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +2 -11
  71. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +1 -1
  72. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +1 -1
  73. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +72 -28
  74. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +81 -58
  75. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.stories.js +3 -1
  76. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +1 -9
  77. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +1 -1
  78. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +12 -6
  79. package/src/react-extension/components/Administration/DisplayLoadingDialog/DisplayLoadingDialog.js +2 -11
  80. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +6 -6
  81. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +1 -1
  82. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +25 -1
  83. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
  84. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +1 -1
  85. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +1 -1
  86. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +25 -1
  87. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
  88. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +1 -1
  89. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.js +12 -2
  90. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +1 -1
  91. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +1 -1
  92. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +24 -24
  93. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +1 -1
  94. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +1 -1
  95. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.stories.js +1 -1
  96. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +9 -6
  97. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.data.js +20 -5
  98. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.page.js +1 -1
  99. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.stories.js +1 -1
  100. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.js +10 -14
  101. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.stories.js +1 -1
  102. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.js +1 -9
  103. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.stories.js +1 -1
  104. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +96 -47
  105. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +61 -17
  106. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.js +1 -1
  107. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.js +1 -9
  108. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +14 -0
  109. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.stories.js +1 -1
  110. package/src/react-extension/components/Announcement/AnnouncementWrapper/AnnouncementWrapper.js +3 -2
  111. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayExpiredSubscriptionAnnouncement.js +3 -3
  112. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayGoingToExpireSubscriptionAnnouncement.js +3 -2
  113. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayInvalidSubscriptionAnnouncement.js +3 -3
  114. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.js +2 -2
  115. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.stories.js +1 -1
  116. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.js +2 -2
  117. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.stories.js +1 -1
  118. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -12
  119. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +1 -1
  120. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +88 -41
  121. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +1 -1
  122. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.js +2 -2
  123. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.stories.js +11 -1
  124. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +2 -2
  125. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +1 -1
  126. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +86 -62
  127. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +2 -2
  128. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +1 -1
  129. package/src/react-extension/components/Authentication/DisplayAlreadyLoggedInError/DisplayAlreadyLoggedInError.js +2 -2
  130. package/src/react-extension/components/Authentication/DisplayAlreadyLoggedInError/DisplayAlreadyLoggedInError.test.stories.js +1 -1
  131. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.js +2 -2
  132. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +1 -1
  133. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.js +2 -2
  134. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +1 -1
  135. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.js +2 -2
  136. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +1 -1
  137. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.js +3 -3
  138. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +1 -1
  139. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +2 -2
  140. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +1 -1
  141. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.js +6 -6
  142. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +1 -1
  143. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.js +1 -1
  144. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +1 -1
  145. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.js +34 -7
  146. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.data.js +2 -1
  147. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.js +20 -1
  148. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.page.js +4 -0
  149. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +1 -1
  150. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +2 -2
  151. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +4 -1
  152. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.js +2 -2
  153. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.stories.js +1 -1
  154. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.js +1 -9
  155. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +1 -1
  156. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.js +2 -2
  157. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.stories.js +6 -1
  158. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.js +2 -2
  159. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +1 -1
  160. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.js +2 -2
  161. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.stories.js +1 -1
  162. package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/OrchestrateAccountRecovery.js +2 -2
  163. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +2 -2
  164. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +1 -1
  165. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +1 -9
  166. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +1 -1
  167. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxFooter.js +2 -2
  168. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -2
  169. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +1 -1
  170. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +1 -1
  171. package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +3 -2
  172. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +3 -3
  173. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.stories.js +1 -1
  174. package/src/react-extension/components/Common/ActionFeedback/ShareActionFeedback.js +2 -2
  175. package/src/react-extension/components/Common/Autocomplete/Autocomplete.js +8 -2
  176. package/src/react-extension/components/Common/Avatar/UserAvatar.test.data.js +6 -4
  177. package/src/react-extension/components/Common/Avatar/UserAvatar.test.stories.js +3 -2
  178. package/src/react-extension/components/Common/Button/Button.test.stories.js +5 -5
  179. package/src/react-extension/components/Common/Checkbox/Checkbox.test.stories.js +1 -1
  180. package/src/react-extension/components/Common/ContextualMenu/ContextualMenu.test.stories.js +1 -1
  181. package/src/react-extension/components/Common/ContextualMenu/ContextualMenuWrapper.js +10 -8
  182. package/src/react-extension/components/Common/Dialog/DialogCloseButton/DialogCloseButton.js +2 -1
  183. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogFooter.test.stories.js +2 -2
  184. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogWrapper.js +2 -2
  185. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogWrapper.test.stories.js +1 -1
  186. package/src/react-extension/components/Common/DragInfo/DragInfo.test.stories.js +10 -8
  187. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.js +3 -11
  188. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.test.stories.js +6 -1
  189. package/src/react-extension/components/Common/Footer/Footer.js +15 -15
  190. package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.js +16 -7
  191. package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItemLoading.js +4 -0
  192. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormCancelButton.js +3 -12
  193. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormSubmitButton.js +2 -2
  194. package/src/react-extension/components/Common/Internationalisation/TranslationProvider.js +0 -1
  195. package/src/react-extension/components/Common/Link/Link.test.stories.js +1 -1
  196. package/src/react-extension/components/Common/Loading/LoadingBar/LoadingBar.test.stories.js +1 -1
  197. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.test.stories.js +1 -1
  198. package/src/react-extension/components/Common/Menu/DisplayMainMenu.js +2 -11
  199. package/src/react-extension/components/Common/Navigation/Search/SearchBar.js +7 -7
  200. package/src/react-extension/components/Common/Navigation/Search/SearchBar.test.stories.js +1 -1
  201. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +2 -11
  202. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +1 -1
  203. package/src/react-extension/components/Common/RadioButton/RadioButton.test.stories.js +1 -1
  204. package/src/react-extension/components/Common/Select/Select.js +44 -12
  205. package/src/react-extension/components/Common/Select/Select.test.stories.js +1 -1
  206. package/src/react-extension/components/Common/Text/Text.test.stories.js +1 -1
  207. package/src/react-extension/components/Common/TextField/TextField.test.stories.js +1 -1
  208. package/src/react-extension/components/Common/Toggle/Toggle.test.stories.js +1 -1
  209. package/src/react-extension/components/Common/Tooltip/Tooltip.test.stories.js +2 -2
  210. package/src/react-extension/components/Internationalisation/ChangeLocale/ChangeLocale.test.page.js +1 -1
  211. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +22 -14
  212. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +1 -1
  213. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +3 -3
  214. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.page.js +1 -1
  215. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.stories.js +1 -1
  216. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +4 -4
  217. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.stories.js +1 -1
  218. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspace.js +1 -9
  219. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.js +8 -17
  220. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.test.js +2 -2
  221. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.test.stories.js +1 -1
  222. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +6 -6
  223. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.test.stories.js +1 -1
  224. package/src/react-extension/components/Resource/EditResource/EditResource.js +21 -13
  225. package/src/react-extension/components/Resource/EditResource/EditResource.test.stories.js +1 -1
  226. package/src/react-extension/components/Resource/ExportResources/ExportResources.js +9 -10
  227. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +1 -1
  228. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +1 -1
  229. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +1 -1
  230. package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +1 -1
  231. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +2 -11
  232. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +1 -1
  233. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItemContextualMenu.js +2 -11
  234. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.js +2 -11
  235. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.js +2 -11
  236. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.test.stories.js +1 -1
  237. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.js +4 -13
  238. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.js +1 -1
  239. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +1 -1
  240. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +1 -1
  241. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +1 -1
  242. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsContextualMenu.js +2 -11
  243. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +2 -11
  244. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsListContextualMenu.js +3 -12
  245. package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +1 -1
  246. package/src/react-extension/components/Resource/ImportResources/ImportResources.test.stories.js +1 -1
  247. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +1 -1
  248. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +1 -1
  249. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +1 -1
  250. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +5 -3
  251. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.js +1 -1
  252. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +1 -1
  253. package/src/react-extension/components/ResourceComment/DeleteResourceComment/DeleteComment.js +2 -1
  254. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.js +1 -9
  255. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +5 -3
  256. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.js +2 -2
  257. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +5 -3
  258. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +3 -3
  259. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +2 -2
  260. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsComment.js +2 -11
  261. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.js +2 -10
  262. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +1 -1
  263. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +1 -1
  264. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.data.js +1 -1
  265. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsPermission.js +2 -10
  266. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.js +3 -12
  267. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +1 -1
  268. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +1 -1
  269. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +1 -1
  270. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +1 -1
  271. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.js +1 -1
  272. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +1 -1
  273. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +1 -1
  274. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +1 -1
  275. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +1 -1
  276. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +1 -1
  277. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.js +1 -9
  278. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +1 -1
  279. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +1 -1
  280. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.js +10 -7
  281. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +1 -1
  282. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +12 -9
  283. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +1 -1
  284. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +10 -7
  285. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +1 -1
  286. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.js +2 -2
  287. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +1 -1
  288. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +1 -1
  289. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +1 -1
  290. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +2 -2
  291. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTagsItemViewer.js +2 -11
  292. package/src/react-extension/components/Share/ShareDialog.js +124 -22
  293. package/src/react-extension/components/Share/ShareDialog.test.data.js +25 -1
  294. package/src/react-extension/components/Share/ShareDialog.test.js +87 -36
  295. package/src/react-extension/components/Share/ShareDialog.test.page.js +1 -1
  296. package/src/react-extension/components/Share/ShareDialog.test.stories.js +1 -1
  297. package/src/react-extension/components/Share/SharePermissionDeleteButton.js +2 -1
  298. package/src/react-extension/components/Share/SharePermissionItem.js +56 -0
  299. package/src/react-extension/components/Share/ShareVariesDetails.js +2 -11
  300. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.js +1 -1
  301. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +1 -1
  302. package/src/react-extension/components/User/CreateUser/CreateUser.js +10 -10
  303. package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +1 -1
  304. package/src/react-extension/components/User/DeleteUser/DeleteUser.js +1 -1
  305. package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +1 -1
  306. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.js +3 -3
  307. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +1 -1
  308. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.js +1 -9
  309. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.test.stories.js +1 -1
  310. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.js +16 -24
  311. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.test.stories.js +1 -1
  312. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +3 -3
  313. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.stories.js +1 -1
  314. package/src/react-extension/components/User/DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions.js +8 -17
  315. package/src/react-extension/components/User/DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions.test.js +4 -4
  316. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +2 -2
  317. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.stories.js +1 -1
  318. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +12 -1
  319. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.stories.js +1 -1
  320. package/src/react-extension/components/User/EditUser/EditUser.js +10 -10
  321. package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +1 -1
  322. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +1 -1
  323. package/src/react-extension/components/User/FilterUsersByGroups/DisplayGroupContextualMenu.js +2 -11
  324. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroup.test.stories.js +1 -1
  325. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroupContextualMenu.js +2 -11
  326. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.js +3 -12
  327. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +1 -1
  328. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.js +1 -9
  329. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +1 -1
  330. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +4 -4
  331. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.js +1 -9
  332. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.data.js +1 -1
  333. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.stories.js +1 -1
  334. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.js +1 -9
  335. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.stories.js +1 -1
  336. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +1 -1
  337. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.js +5 -4
  338. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +22 -83
  339. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +8 -1
  340. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.data.js +20 -2
  341. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.js +25 -1
  342. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +28 -26
  343. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +85 -57
  344. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +21 -6
  345. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +1 -1
  346. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.js +1 -1
  347. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +1 -1
  348. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.js +2 -2
  349. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +1 -1
  350. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +1 -1
  351. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +1 -1
  352. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.js +4 -13
  353. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +1 -1
  354. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembersGroupMember.js +1 -9
  355. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +132 -151
  356. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -1
  357. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +37 -14
  358. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +5 -2
  359. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroupItem.js +209 -0
  360. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
  361. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DisplayChangePassphraseIntroduction.js +2 -3
  362. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DownloadRecoveryKit.js +2 -2
  363. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +85 -52
  364. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +5 -1
  365. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +7 -0
  366. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +4 -11
  367. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +1 -1
  368. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.js +4 -4
  369. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.stories.js +1 -1
  370. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +9 -2
  371. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +58 -35
  372. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.js +1 -1
  373. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +1 -1
  374. package/src/react-extension/components/UserSetting/DisplayUserSettingWorkspaceActions/DisplayUserSettingWorkspaceActions.js +2 -11
  375. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -2
  376. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +1 -1
  377. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.js +1 -9
  378. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +1 -1
  379. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +8 -8
  380. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +1 -1
  381. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +5 -14
  382. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +2 -2
  383. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +1 -1
  384. package/src/react-extension/contexts/AccountRecoveryUserContext.js +22 -4
  385. package/src/react-extension/contexts/AccountRecoveryUserContext.test.data.js +2 -0
  386. package/src/react-extension/contexts/AccountRecoveryUserContext.test.js +2 -2
  387. package/src/react-extension/contexts/AdminAccountRecoveryContext.js +5 -2
  388. package/src/react-extension/contexts/AdminAccountRecoveryContext.test.data.js +4 -1
  389. package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.js +14 -1
  390. package/src/react-extension/contexts/ResourceWorkspaceContext.js +1 -1
  391. package/src/react-extension/contexts/UserWorkspaceContext.js +1 -1
  392. package/src/react-extension/test/fixture/Settings/siteSettings.js +20 -14
  393. package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +8 -1
  394. package/src/react-quickaccess/ExtQuickAccess.js +23 -9
  395. package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +68 -113
  396. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgress.js +2 -5
  397. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +1 -1
  398. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +2 -2
  399. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +1 -1
  400. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +4 -4
  401. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +1 -1
  402. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +1 -1
  403. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +1 -1
  404. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +1 -1
  405. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +1 -1
  406. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +2 -2
  407. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +1 -1
  408. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +2 -2
  409. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +1 -1
  410. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.js +2 -3
  411. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -3
  412. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +2 -2
  413. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.stories.js +1 -1
  414. package/src/react-quickaccess/components/Header/Header.js +0 -1
  415. package/src/react-quickaccess/components/Header/Header.test.stories.js +1 -1
  416. package/src/react-quickaccess/components/HomePage/HomePage.js +0 -8
  417. package/src/react-quickaccess/components/HomePage/HomePage.test.data.js +1 -1
  418. package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +1 -1
  419. package/src/react-quickaccess/components/HomePage/canSuggestUrl.js +4 -4
  420. package/src/react-quickaccess/components/HomePage/canSuggestUrl.test.js +4 -3
  421. package/src/react-quickaccess/components/LoginPage/LoginPage.js +1 -9
  422. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +1 -1
  423. package/src/react-quickaccess/components/ManageQuickAccessMode/ManageQuickAccessMode.js +0 -7
  424. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.js +1 -1
  425. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +1 -1
  426. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +8 -9
  427. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.js +0 -2
  428. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +2 -2
  429. package/src/react-quickaccess/components/PrivateRoute/PrivateRoute.js +8 -2
  430. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +1 -1
  431. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +1 -1
  432. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +1 -1
  433. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +8 -8
  434. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.data.js +3 -3
  435. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +4 -8
  436. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +1 -1
  437. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -3
  438. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +1 -1
  439. package/src/react-quickaccess/components/Search/Search.js +6 -7
  440. package/src/react-quickaccess/components/Search/Search.test.js +0 -1
  441. package/src/react-quickaccess/components/Search/Search.test.stories.js +1 -1
  442. package/src/react-web-integration/AuthLogin/AuthLogin.js +9 -9
  443. package/src/react-web-integration/Autofill/Autofill.js +61 -43
  444. package/src/react-web-integration/BrowserIntegrationBootstrap.js +1 -18
  445. package/src/react-web-integration/Events/Quickaccess/QuickAccessEvent.js +2 -2
  446. package/src/react-web-integration/ExtInFormCallToAction.js +2 -2
  447. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.js +1 -2
  448. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.data.js +3 -7
  449. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.page.js +1 -1
  450. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +15 -6
  451. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +20 -22
  452. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +3 -3
  453. package/src/react-web-integration/lib/Dom/DomUtils.js +5 -6
  454. package/src/react-web-integration/lib/InForm/InFormCallToActionField.js +2 -2
  455. package/src/react-web-integration/lib/InForm/InFormCredentialsFormField.js +1 -3
  456. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +12 -2
  457. package/src/react-web-integration/lib/InForm/InFormManager.js +20 -18
  458. package/src/react-web-integration/lib/InForm/InformManager.test.data.js +62 -2
  459. package/src/react-web-integration/lib/InForm/InformManager.test.js +186 -8
  460. package/src/react-web-integration/lib/InForm/InformManager.test.page.js +40 -1
  461. package/src/react-web-integration/lib/InForm/InformMenuField.js +2 -2
  462. package/src/shared/components/Icons/Icon.test.stories.js +1 -1
  463. package/src/shared/components/Internationalisation/TranslationProvider.js +1 -2
  464. package/src/shared/components/Password/Password.js +3 -2
  465. package/src/shared/components/Password/Password.test.page.js +4 -1
  466. package/src/shared/components/Password/Password.test.stories.js +1 -1
  467. package/src/shared/components/PasswordComplexity/PasswordComplexity.js +3 -3
  468. package/src/shared/components/PasswordComplexity/PasswordComplexity.test.stories.js +5 -5
  469. package/src/shared/lib/Browser/detectBrowserName.js +4 -2
  470. package/src/shared/lib/Error/ExternalServiceError.js +23 -0
  471. package/src/shared/lib/Error/ExternalServiceUnavailableError.js +23 -0
  472. package/src/shared/lib/Secret/PwnedPasswords.js +10 -2
  473. package/src/shared/lib/Secret/SecretComplexity.js +1 -1
  474. package/src/shared/lib/SecretGenerator/PassphraseGenerator.js +12 -8
  475. package/src/shared/lib/SecretGenerator/PassphraseGeneratorWords.js +1 -1
  476. package/src/shared/lib/SecretGenerator/SecretGenerator.js +2 -2
  477. package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.js +10 -12
  478. package/src/shared/lib/SecretGenerator/SecretGeneratorComplexity.test.js +75 -76
  479. package/src/shared/lib/apiClient/csrfToken.js +1 -1
  480. package/src/shared/services/accountRecovery/ApiAppAccountRecoveryUserService.js +0 -1
  481. package/src/shared/services/accountRecovery/ExtAppAccountRecoveryUserService.js +0 -1
  482. package/src/stories/assets/intro/hero.png +0 -0
  483. package/src/stories/assets/intro/intro.css +47 -0
  484. package/test/jest.setup.js +2 -0
  485. package/src/fonts/opensans-semibold.woff +0 -0
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Passbolt ~ Open source password manager for teams
3
- * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
4
  *
5
5
  * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
6
  * For full copyright and license information, please see the LICENSE.txt
7
7
  * Redistributions of files must retain the above copyright notice.
8
8
  *
9
- * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
10
  * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
11
  * @link https://www.passbolt.com Passbolt(tm)
12
12
  * @since 3.0.0
@@ -14,12 +14,15 @@
14
14
  import React, {Component} from "react";
15
15
  import PropTypes from "prop-types";
16
16
  import debounce from "debounce-promise";
17
- import {Trans, withTranslation} from "react-i18next";
17
+ import {Trans} from "react-i18next";
18
18
  import SecurityComplexity from "../../../../shared/lib/Secret/SecretComplexity";
19
19
  import SecretComplexity from "../../../../shared/lib/Secret/SecretComplexity";
20
20
  import Password from "../../../../shared/components/Password/Password";
21
21
  import {SecretGenerator} from "../../../../shared/lib/SecretGenerator/SecretGenerator";
22
22
  import PasswordComplexity from "../../../../shared/components/PasswordComplexity/PasswordComplexity";
23
+ import ExternalServiceUnavailableError from "../../../../shared/lib/Error/ExternalServiceUnavailableError";
24
+ import Tooltip from "../../Common/Tooltip/Tooltip";
25
+ import ExternalServiceError from "../../../../shared/lib/Error/ExternalServiceError";
23
26
 
24
27
  /**
25
28
  * The component display variations.
@@ -41,6 +44,7 @@ class CreateGpgKey extends Component {
41
44
  constructor(props) {
42
45
  super(props);
43
46
  this.state = this.defaultState;
47
+ this.isPwndProcessingPromise = null;
44
48
  this.evaluatePassphraseIsInDictionaryDebounce = debounce(this.evaluatePassphraseIsInDictionary, 300);
45
49
  this.bindEventHandlers();
46
50
  this.createReferences();
@@ -54,7 +58,7 @@ class CreateGpgKey extends Component {
54
58
  passphrase: '', // The current passphrase
55
59
  passphraseEntropy: null, // The current passphrase entropy
56
60
  actions: {
57
- processing: false // True if one's processing passphrase
61
+ processing: false, // True if one's processing passphrase
58
62
  },
59
63
  hintClassNames: { // The class names for passphrase hints
60
64
  enoughLength: '',
@@ -62,7 +66,8 @@ class CreateGpgKey extends Component {
62
66
  alphanumeric: '',
63
67
  specialCharacters: '',
64
68
  notInDictionary: ''
65
- }
69
+ },
70
+ isPwnedServiceAvailable: true // True if the isPwned service can be reached
66
71
  };
67
72
  }
68
73
 
@@ -80,7 +85,7 @@ class CreateGpgKey extends Component {
80
85
  const validation = {
81
86
  enoughLength: this.state.hintClassNames.enoughLength === "success",
82
87
  enoughEntropy: this.state.passphraseEntropy && this.state.passphraseEntropy !== 0,
83
- notInDictionary: this.state.hintClassNames.notInDictionary === "success"
88
+ notInDictionary: this.state.hintClassNames.notInDictionary !== "error"
84
89
  };
85
90
  return Object.values(validation).every(value => value);
86
91
  }
@@ -104,7 +109,6 @@ class CreateGpgKey extends Component {
104
109
  */
105
110
  bindEventHandlers() {
106
111
  this.handlePassphraseChange = this.handlePassphraseChange.bind(this);
107
- this.handleImportGpgKey = this.handleImportGpgKey.bind(this);
108
112
  this.handleSubmit = this.handleSubmit.bind(this);
109
113
  }
110
114
 
@@ -131,45 +135,20 @@ class CreateGpgKey extends Component {
131
135
 
132
136
  /**
133
137
  * Whenever the passphrase change
134
- * @param event The input event
138
+ * @param {Event} event The input event
135
139
  */
136
140
  async handlePassphraseChange(event) {
137
141
  const passphrase = event.target.value;
138
- this.setState({passphrase});
139
- const passphraseEntropy = passphrase ? SecretGenerator.entropy(passphrase) : null;
140
- const hintClassNames = await this.evaluatePassphraseHintClassNames(passphrase);
141
- this.setState({passphraseEntropy, hintClassNames});
142
- await this.checkPassphraseIsInDictionary(passphrase, hintClassNames);
143
- }
144
-
145
- /**
146
- * check if the passphrase is in dictionary
147
- * @returns {Promise<void>}
148
- */
149
- async checkPassphraseIsInDictionary() {
150
- const hintClassName = condition => condition ? 'success' : 'error';
151
-
152
- // debounce only to check the passphrase is in dictionary
153
- const isPwned = await this.evaluatePassphraseIsInDictionaryDebounce(this.state.passphrase).catch(() => null);
154
- const notInDictionary = isPwned !== null ? hintClassName(!isPwned) : null;
155
-
156
- // if the passphrase is in dictionary, force the complexity to n/a
157
- const passphraseEntropy = Boolean(this.state.passphrase) && isPwned ? 0 : this.state.passphraseEntropy;
142
+ let hintClassNames = {};
143
+ let passphraseEntropy = null;
158
144
 
159
- this.setState({
160
- hintClassNames: {
161
- ...this.state.hintClassNames,
162
- notInDictionary
163
- },
164
- passphraseEntropy
165
- });
166
- }
145
+ if (passphrase.length) {
146
+ passphraseEntropy = SecretGenerator.entropy(passphrase);
147
+ hintClassNames = this.evaluatePassphraseHintClassNames(passphrase);
148
+ this.isPwndProcessingPromise = this.evaluatePassphraseIsInDictionaryDebounce();
149
+ }
167
150
 
168
- /**
169
- * Whenever the user wants to import his gpg key manually
170
- */
171
- handleImportGpgKey() {
172
- this.importGpgKey();
151
+ this.setState({passphrase, passphraseEntropy, hintClassNames});
173
152
  }
174
153
 
175
154
  /**
@@ -183,30 +162,67 @@ class CreateGpgKey extends Component {
183
162
 
184
163
  /**
185
164
  * Evaluate the passphrase hints classnames
186
- * @param passphrase The passphrase to evaluate
165
+ * @param {string} passphrase The passphrase to evaluate
166
+ * @return {object}
187
167
  */
188
168
  evaluatePassphraseHintClassNames(passphrase) {
189
169
  const masks = SecurityComplexity.matchMasks(passphrase);
190
- const hintClassName = condition => condition ? 'success' : 'error';
170
+ const hintClassName = condition => condition ? "success" : "warning";
191
171
  return {
192
- enoughLength: hintClassName(passphrase.length >= 8),
172
+ enoughLength: passphrase.length >= 8 ? "success" : "error",
193
173
  uppercase: hintClassName(masks.uppercase),
194
174
  alphanumeric: hintClassName(masks.alpha && masks.digit),
195
175
  specialCharacters: hintClassName(masks.special),
196
- notInDictionary: this.state.hintClassNames.notInDictionary || 'error'
176
+ notInDictionary: this.state.hintClassNames.notInDictionary
197
177
  };
198
178
  }
199
179
 
200
180
  /**
201
181
  * Evaluate if the passphrase is in dictionary
202
- * @param passphrase The passphrase to evaluate
203
- * @return {Promise<boolean>} Return true if the password is part of a dictionary, false otherwise
182
+ * @return {Promise<void>}
204
183
  */
205
- async evaluatePassphraseIsInDictionary(passphrase) {
206
- if (passphrase.length >= 8) {
207
- return SecretComplexity.ispwned(passphrase);
184
+ async evaluatePassphraseIsInDictionary() {
185
+ let isPwnedServiceAvailable = this.state.isPwnedServiceAvailable;
186
+ if (!isPwnedServiceAvailable) {
187
+ return;
208
188
  }
209
- return true;
189
+
190
+ const passphrase = this.state.passphrase;
191
+ let notInDictionaryHint = "success";
192
+
193
+ if (passphrase.length < 8) {
194
+ notInDictionaryHint = "error";
195
+ } else {
196
+ try {
197
+ const isPwned = await SecretComplexity.ispwned(passphrase);
198
+ notInDictionaryHint = isPwned ? "error" : "success";
199
+ } catch (error) {
200
+ // If the service is unavailable don't block the user journey.
201
+ if (error instanceof ExternalServiceUnavailableError || error instanceof ExternalServiceError) {
202
+ isPwnedServiceAvailable = false;
203
+ notInDictionaryHint = "unavailable";
204
+ } else {
205
+ throw error;
206
+ }
207
+ }
208
+ }
209
+
210
+ this.setState({
211
+ isPwnedServiceAvailable,
212
+ hintClassNames: {
213
+ ...this.state.hintClassNames,
214
+ notInDictionary: notInDictionaryHint
215
+ }
216
+ });
217
+ }
218
+
219
+ /**
220
+ * Await for isPwned service to finish its process and returns true if the current displayed passphrase is pwned.
221
+ * @return {Promise<boolean>}
222
+ */
223
+ async isCurrentPassphrasePwned() {
224
+ await this.isPwndProcessingPromise;
225
+ return this.state.hintClassNames.notInDictionary === "error";
210
226
  }
211
227
 
212
228
  /**
@@ -214,6 +230,11 @@ class CreateGpgKey extends Component {
214
230
  */
215
231
  async generateGpgKey() {
216
232
  await this.toggleProcessing();
233
+ const isPwned = await this.isCurrentPassphrasePwned();
234
+ if (isPwned) {
235
+ await this.toggleProcessing();
236
+ return;
237
+ }
217
238
  this.props.onComplete(this.state.passphrase);
218
239
  }
219
240
 
@@ -221,15 +242,11 @@ class CreateGpgKey extends Component {
221
242
  * Toggle the processing mode
222
243
  */
223
244
  async toggleProcessing() {
224
- await this.setState({actions: {processing: !this.state.actions.processing}});
225
- }
226
-
227
- /**
228
- * Get the translate function
229
- * @returns {function(...[*]=)}
230
- */
231
- get translate() {
232
- return this.props.t;
245
+ const actions = {
246
+ ...this.state.actions,
247
+ processing: !this.state.actions.processing
248
+ };
249
+ await this.setState({actions});
233
250
  }
234
251
 
235
252
  /**
@@ -279,7 +296,15 @@ class CreateGpgKey extends Component {
279
296
  <Trans>It contains special characters (like / or * or %)</Trans>
280
297
  </li>
281
298
  <li className={this.state.hintClassNames.notInDictionary}>
299
+ {this.state.isPwnedServiceAvailable &&
282
300
  <Trans>It is not part of an exposed data breach</Trans>
301
+ }
302
+ {!this.state.isPwnedServiceAvailable &&
303
+ <Tooltip message={<Trans>The pwnedpasswords service is unavailable, your passphrase might be part of an exposed data breach</Trans>}
304
+ direction="bottom">
305
+ <Trans>It is not part of an exposed data breach</Trans>
306
+ </Tooltip>
307
+ }
283
308
  </li>
284
309
  </ul>
285
310
  </div>
@@ -317,7 +342,6 @@ CreateGpgKey.propTypes = {
317
342
  CreateGpgKeyVariation.GENERATE_ACCOUNT_RECOVERY_GPG_KEY
318
343
  ]), // Defines how the form should be displayed and behaves
319
344
  onSecondaryActionClick: PropTypes.func, // Callback to trigger when the user clicks on the secondary action link.
320
- t: PropTypes.func.isRequired, // The translation function
321
345
  };
322
346
 
323
- export default withTranslation('common')(CreateGpgKey);
347
+ export default CreateGpgKey;
@@ -161,7 +161,7 @@ describe("CreateGpgKey", () => {
161
161
  };
162
162
  await waitFor(() => expect(page.canGoToNextStep).toBeTruthy());
163
163
  await page.generateKey(inProgressFn);
164
- expect(onComplete).toHaveBeenCalled();
164
+ await waitFor(() => expect(onComplete).toHaveBeenCalled());
165
165
  expect(generateResolve).toBeDefined();
166
166
  });
167
167
 
@@ -179,7 +179,7 @@ describe("CreateGpgKey", () => {
179
179
  await page.fill(veryStrongPassphrase);
180
180
  await waitFor(() => expect(page.canGoToNextStep).toBeTruthy());
181
181
  await page.generateKey(inProgressFn);
182
- expect(onComplete).toHaveBeenCalled();
182
+ await waitFor(() => expect(onComplete).toHaveBeenCalled());
183
183
  expect(generateResolve).toBeDefined();
184
184
  });
185
185
  });
@@ -17,7 +17,7 @@ import CreateGpgKey, {CreateGpgKeyVariation} from "./CreateGpgKey";
17
17
  import {defaultProps} from "./CreateGpgKey.test.data";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/CreateGpgKey',
20
+ title: 'Passbolt Component/Authentication/CreateGpgKey',
21
21
  component: CreateGpgKey
22
22
  };
23
23
 
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import React, {Component} from "react";
15
15
  import PropTypes from "prop-types";
16
- import {Trans, withTranslation} from "react-i18next";
16
+ import {Trans} from "react-i18next";
17
17
 
18
18
  /**
19
19
  * The component display variations.
@@ -57,4 +57,4 @@ DisplayAlreadyLoggedInError.propTypes = {
57
57
  ]).isRequired, // Defines how the disalog should be displayed
58
58
  onLogoutButtonClick: PropTypes.func.isRequired, // The callback function that should trigger a log out of the current user
59
59
  };
60
- export default withTranslation('common')(DisplayAlreadyLoggedInError);
60
+ export default DisplayAlreadyLoggedInError;
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import DisplayAlreadyLoggedInError, {DisplayAlreadyLoggedInErrorVariations} from "./DisplayAlreadyLoggedInError";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/DisplayAlreadyLoggedInError',
20
+ title: 'Passbolt Component/Authentication/DisplayAlreadyLoggedInError',
21
21
  component: DisplayAlreadyLoggedInError
22
22
  };
23
23
 
@@ -14,7 +14,7 @@
14
14
  import React, {Component} from "react";
15
15
  import PropTypes from "prop-types";
16
16
  import {withAppContext} from "../../../contexts/AppContext";
17
- import {Trans, withTranslation} from "react-i18next";
17
+ import {Trans} from "react-i18next";
18
18
 
19
19
  const DOWNLOAD_FIREFOX_URL = "https://www.mozilla.org/firefox/download/thanks/";
20
20
  const DOWNLOAD_CHROME_URL = "https://www.google.com/chrome/";
@@ -60,4 +60,4 @@ class DisplayBrowserNotSupported extends Component {
60
60
  DisplayBrowserNotSupported.propTypes = {
61
61
  context: PropTypes.any, // The application context
62
62
  };
63
- export default withAppContext(withTranslation('common')(DisplayBrowserNotSupported));
63
+ export default withAppContext(DisplayBrowserNotSupported);
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import DisplayBrowserNotSupported from "./DisplayBrowserNotSupported";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/DisplayBrowserNotSupported',
20
+ title: 'Passbolt Component/Authentication/DisplayBrowserNotSupported',
21
21
  component: DisplayBrowserNotSupported
22
22
  };
23
23
 
@@ -14,7 +14,7 @@
14
14
  import React, {Component} from "react";
15
15
  import {withAppContext} from "../../../contexts/AppContext";
16
16
  import PropTypes from "prop-types";
17
- import {Trans, withTranslation} from "react-i18next";
17
+ import {Trans} from "react-i18next";
18
18
 
19
19
  class DisplayExpiredTokenError extends Component {
20
20
  /**
@@ -42,4 +42,4 @@ class DisplayExpiredTokenError extends Component {
42
42
  DisplayExpiredTokenError.propTypes = {
43
43
  context: PropTypes.any, // The application context
44
44
  };
45
- export default withAppContext(withTranslation('common')(DisplayExpiredTokenError));
45
+ export default withAppContext(DisplayExpiredTokenError);
@@ -18,7 +18,7 @@ import DisplayExpiredTokenError from "./DisplayExpiredTokenError";
18
18
  import {defaultProps} from "./DisplayExpiredTokenError.test.data";
19
19
 
20
20
  export default {
21
- title: 'Passbolt/Authentication/DisplayExpiredTokenError',
21
+ title: 'Passbolt Component/Authentication/DisplayExpiredTokenError',
22
22
  component: DisplayExpiredTokenError
23
23
  };
24
24
 
@@ -14,7 +14,7 @@
14
14
  import React, {Component} from "react";
15
15
  import {withAppContext} from "../../../contexts/AppContext";
16
16
  import PropTypes from "prop-types";
17
- import {Trans, withTranslation} from "react-i18next";
17
+ import {Trans} from "react-i18next";
18
18
 
19
19
  class DisplayRequireInvitationError extends Component {
20
20
  /**
@@ -42,4 +42,4 @@ class DisplayRequireInvitationError extends Component {
42
42
  DisplayRequireInvitationError.propTypes = {
43
43
  context: PropTypes.any, // The application context
44
44
  };
45
- export default withAppContext(withTranslation('common')(DisplayRequireInvitationError));
45
+ export default withAppContext(DisplayRequireInvitationError);
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import DisplayRequireInvitationError from "./DisplayRequireInvitationError";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/DisplayRequireInvitationError',
20
+ title: 'Passbolt Component/Authentication/DisplayRequireInvitationError',
21
21
  component: DisplayRequireInvitationError
22
22
  };
23
23
 
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import React, {Component} from "react";
15
15
  import PropTypes from "prop-types";
16
- import {Trans, withTranslation} from "react-i18next";
16
+ import {Trans} from "react-i18next";
17
17
  import Icon from "../../../../shared/components/Icons/Icon";
18
18
 
19
19
  class DisplayUnexpectedError extends Component {
@@ -119,7 +119,7 @@ class DisplayUnexpectedError extends Component {
119
119
  }
120
120
 
121
121
  DisplayUnexpectedError.defaultProps = {
122
- title: <Trans>Something went wrong.</Trans>,
122
+ title: <Trans>Something went wrong!</Trans>,
123
123
  message: <Trans>The operation failed with the following error:</Trans>,
124
124
  };
125
125
 
@@ -136,4 +136,4 @@ DisplayUnexpectedError.propTypes = {
136
136
  ]),
137
137
  error: PropTypes.any, // The error to display
138
138
  };
139
- export default withTranslation('common')(DisplayUnexpectedError);
139
+ export default DisplayUnexpectedError;
@@ -22,7 +22,7 @@ import {
22
22
  } from "./DisplayUnexpectedError.test.data";
23
23
 
24
24
  export default {
25
- title: 'Passbolt/Authentication/DisplayUnexpectedError',
25
+ title: 'Passbolt Component/Authentication/DisplayUnexpectedError',
26
26
  component: DisplayUnexpectedError
27
27
  };
28
28
 
@@ -12,7 +12,7 @@
12
12
  * @since 3.0.0
13
13
  */
14
14
  import React, {Component} from "react";
15
- import {Trans, withTranslation} from "react-i18next";
15
+ import {Trans} from "react-i18next";
16
16
  import PropTypes from "prop-types";
17
17
 
18
18
  class DownloadRecoveryKit extends Component {
@@ -75,4 +75,4 @@ DownloadRecoveryKit.propTypes = {
75
75
  onComplete: PropTypes.func.isRequired, // Callback to trigger when the step is completed.
76
76
  };
77
77
 
78
- export default withTranslation('common')(DownloadRecoveryKit);
78
+ export default DownloadRecoveryKit;
@@ -18,7 +18,7 @@ import DownloadRecoveryKit from "./DownloadRecoveryKit";
18
18
  import {defaultProps} from "./DownloadRecoveryKit.test.data";
19
19
 
20
20
  export default {
21
- title: 'Passbolt/Authentication/DownloadRecoveryKit',
21
+ title: 'Passbolt Component/Authentication/DownloadRecoveryKit',
22
22
  component: DownloadRecoveryKit
23
23
  };
24
24
 
@@ -225,20 +225,20 @@ class EnterNameForm extends Component {
225
225
  <div className="enter-name">
226
226
  <h1><Trans>New here? Enter your name to get started.</Trans></h1>
227
227
  <form acceptCharset="utf-8" onSubmit={this.handleFormSubmit} noValidate>
228
- <div className={`input text required ${this.state.firstnameError ? "error" : ""}`}>
229
- <label htmlFor="firstname"><Trans>First Name</Trans></label>
228
+ <div className={`input text required ${this.state.firstnameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
229
+ <label htmlFor="firstname"><Trans>First name</Trans></label>
230
230
  <input id="firstname-input" type="text" name="firstname" ref={this.firstnameRef} value={this.state.firstname}
231
231
  onKeyUp={this.handleFirstnameInputOnKeyUp} onChange={this.handleInputChange}
232
- disabled={this.hasAllInputDisabled()} placeholder={this.translate("first name")} required="required"/>
232
+ disabled={this.hasAllInputDisabled()} placeholder={this.translate("First name")} required="required"/>
233
233
  {this.state.firstnameError &&
234
234
  <div className="error-message">{this.state.firstnameError}</div>
235
235
  }
236
236
  </div>
237
- <div className={`input text required ${this.state.lastnameError ? "error" : ""}`}>
238
- <label htmlFor="lastname"><Trans>Last Name</Trans></label>
237
+ <div className={`input text required ${this.state.lastnameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
238
+ <label htmlFor="lastname"><Trans>Last name</Trans></label>
239
239
  <input id="lastname-input" type="text" name="lastname" ref={this.lastnameRef} value={this.state.lastname}
240
240
  onKeyUp={this.handleLastnameInputOnKeyUp} onChange={this.handleInputChange}
241
- disabled={this.hasAllInputDisabled()} placeholder={this.translate("last name")} required="required"/>
241
+ disabled={this.hasAllInputDisabled()} placeholder={this.translate("Last name")} required="required"/>
242
242
  {this.state.lastnameError &&
243
243
  <div className="error-message">{this.state.lastnameError}</div>
244
244
  }
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import EnterNameForm from "./EnterNameForm";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/EnterNameForm',
20
+ title: 'Passbolt Component/Authentication/EnterNameForm',
21
21
  component: EnterNameForm
22
22
  };
23
23
 
@@ -280,7 +280,7 @@ class EnterUsernameForm extends Component {
280
280
  <div className="enter-username">
281
281
  <h1><Trans>Please enter your email to continue.</Trans></h1>
282
282
  <form acceptCharset="utf-8" onSubmit={this.handleFormSubmit} noValidate>
283
- <div className={`input text required ${this.state.usernameError ? "error" : ""}`}>
283
+ <div className={`input text required ${this.state.usernameError ? "error" : ""} ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
284
284
  <label htmlFor="username"><Trans>Email</Trans></label>
285
285
  <input id="username-input" type="text" ref={this.usernameRef} name="username" value={this.state.username}
286
286
  onKeyUp={this.handleUsernameInputOnKeyUp} onChange={this.handleInputChange} placeholder={this.translate("you@organization.com")}
@@ -17,7 +17,7 @@ import {MemoryRouter, Route} from "react-router-dom";
17
17
  import EnterUsernameForm from "./EnterUsernameForm";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/EnterUsernameForm',
20
+ title: 'Passbolt Component/Authentication/EnterUsernameForm',
21
21
  component: EnterUsernameForm
22
22
  };
23
23
 
@@ -55,7 +55,8 @@ class ImportGpgKey extends Component {
55
55
  emptyPrivateKey: false, // True if the private key is empty
56
56
  invalidPrivateKey: false, // True if the private key is invalid
57
57
  },
58
- errorMessage: '' // The error messag if required
58
+ errorMessage: '', // The error message if isRequired
59
+ keyHasAnExpirationDate: false, // True if the key being imported has an expiration date
59
60
  };
60
61
  }
61
62
 
@@ -95,6 +96,7 @@ class ImportGpgKey extends Component {
95
96
  this.handleChangePrivateKey = this.handleChangePrivateKey.bind(this);
96
97
  this.handleSelectPrivateKeyFile = this.handleSelectPrivateKeyFile.bind(this);
97
98
  this.handleSelectFile = this.handleSelectFile.bind(this);
99
+ this.checkExpiryDate = this.checkExpiryDate.bind(this);
98
100
  }
99
101
 
100
102
  /**
@@ -114,11 +116,26 @@ class ImportGpgKey extends Component {
114
116
  await this.validate();
115
117
 
116
118
  if (this.isValid) {
117
- await this.toggleProcessing();
119
+ this.toggleProcessing();
118
120
  await this.save();
119
121
  }
120
122
  }
121
123
 
124
+ /**
125
+ * Check the expiration date of the given private key.
126
+ * If the key has an expiry date, it shows a warning to the user.
127
+ * @param {string} privateKey
128
+ */
129
+ async checkExpiryDate(privateKey) {
130
+ if (!this.props.hasKeyExpirationDate) {
131
+ return;
132
+ }
133
+
134
+ // we do not display the warning message if the key can't be read.
135
+ const keyHasAnExpirationDate = await this.props.hasKeyExpirationDate(privateKey).catch(() => false);
136
+ this.setState({keyHasAnExpirationDate});
137
+ }
138
+
122
139
  /**
123
140
  * Whenever the user changes the private key
124
141
  * @param event An input event
@@ -126,6 +143,8 @@ class ImportGpgKey extends Component {
126
143
  async handleChangePrivateKey(event) {
127
144
  const privateKey = event.target.value;
128
145
  this.setState({privateKey});
146
+ await this.checkExpiryDate(privateKey);
147
+
129
148
  if (this.state.hasBeenValidated) {
130
149
  await this.validate();
131
150
  }
@@ -152,6 +171,7 @@ class ImportGpgKey extends Component {
152
171
  async handleSelectPrivateKeyFile(event) {
153
172
  const [privateKeyFile] = event.target.files;
154
173
  const privateKey = await this.readPrivateKeyFile(privateKeyFile);
174
+ await this.checkExpiryDate(privateKey);
155
175
  this.setState({privateKey, selectedFile: privateKeyFile});
156
176
  if (this.state.hasBeenValidated) {
157
177
  await this.validate();
@@ -171,9 +191,9 @@ class ImportGpgKey extends Component {
171
191
  * @param {Error} error The error
172
192
  * @throw {Error} If an unexpected errors hits the component. Errors not of type: InvalidMasterPasswordError.
173
193
  */
174
- async onSaveFailure(error) {
194
+ onSaveFailure(error) {
175
195
  // It can happen when some key validation went wrong.
176
- await this.toggleProcessing();
196
+ this.toggleProcessing();
177
197
  if (error.name === "GpgKeyError") {
178
198
  this.setState({errors: {invalidPrivateKey: true}, errorMessage: error.message});
179
199
  } else {
@@ -224,8 +244,8 @@ class ImportGpgKey extends Component {
224
244
  /**
225
245
  * Toggle the processing mode
226
246
  */
227
- async toggleProcessing() {
228
- await this.setState({actions: {processing: !this.state.actions.processing}});
247
+ toggleProcessing() {
248
+ this.setState({actions: {processing: !this.state.actions.processing}});
229
249
  }
230
250
 
231
251
  /**
@@ -252,7 +272,7 @@ class ImportGpgKey extends Component {
252
272
  <form
253
273
  acceptCharset="utf-8"
254
274
  onSubmit={this.handleSubmit}>
255
- <div className={`input textarea required openpgp-key ${this.hasErrors ? "error" : ""}`}>
275
+ <div className={`input textarea required openpgp-key ${this.hasErrors ? "error" : ""} ${!this.areActionsAllowed ? 'disabled' : ''}`}>
256
276
  <label htmlFor="private-key"><Trans>Private key</Trans></label>
257
277
  <textarea
258
278
  name="private-key"
@@ -275,6 +295,12 @@ class ImportGpgKey extends Component {
275
295
  <span><Trans>Choose a file</Trans></span>
276
296
  </button>
277
297
  </div>
298
+ {this.state.keyHasAnExpirationDate &&
299
+ <div className="warning-message">
300
+ <Trans>The private key should not have an expiry date.</Trans>&nbsp;
301
+ <Trans>Once expired you will not be able to connect to your account.</Trans>
302
+ </div>
303
+ }
278
304
  {this.state.hasBeenValidated &&
279
305
  <>
280
306
  {this.state.errors.emptyPrivateKey &&
@@ -323,5 +349,6 @@ ImportGpgKey.propTypes = {
323
349
  onSecondaryActionClick: PropTypes.func, // Callback to trigger when the user clicks on the secondary action link.
324
350
  t: PropTypes.func, // The translation function
325
351
  validatePrivateGpgKey: PropTypes.func, // The callback to check the validity of the gpg key
352
+ hasKeyExpirationDate: PropTypes.func, // The callback to check if the key has an expiration date
326
353
  };
327
354
  export default withAppContext(withTranslation('common')(ImportGpgKey));
@@ -28,7 +28,8 @@ export function defaultProps(props) {
28
28
  request: jest.fn(async() => ({}))
29
29
  }
30
30
  },
31
- validatePrivateGpgKey: jest.fn()
31
+ validatePrivateGpgKey: jest.fn(),
32
+ shouldShowExpiryDateWarning: jest.fn(() => Promise.resolve(false))
32
33
  };
33
34
  return Object.assign(defaultProps, props || {});
34
35
  }