passbolt-styleguide 3.6.2 → 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 (431) 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 +43 -7
  31. package/i18next-parser.config.js +22 -0
  32. package/package.json +8 -5
  33. package/src/img/og/og_image.png +0 -0
  34. package/src/locales/de-DE/common.json +308 -173
  35. package/src/locales/en-UK/common.json +155 -175
  36. package/src/locales/es-ES/common.json +955 -0
  37. package/src/locales/fr-FR/common.json +308 -174
  38. package/src/locales/ja-JP/common.json +292 -172
  39. package/src/locales/lt-LT/common.json +985 -0
  40. package/src/locales/nl-NL/common.json +329 -194
  41. package/src/locales/pl-PL/common.json +337 -172
  42. package/src/locales/sv-SE/common.json +307 -172
  43. package/src/public-website-sign-in/PublicWebsiteSignInBootstrap.js +25 -0
  44. package/src/public-website-sign-in/lib/SignIn/SignInManager.js +85 -0
  45. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.data.js +45 -0
  46. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.js +59 -0
  47. package/src/public-website-sign-in/lib/SignIn/SignInManager.test.page.js +67 -0
  48. package/src/react-extension/ExtBootstrapAccountRecovery.js +17 -0
  49. package/src/react-extension/ExtBootstrapApp.js +17 -0
  50. package/src/react-extension/ExtBootstrapLogin.js +17 -0
  51. package/src/react-extension/ExtBootstrapRecover.js +17 -0
  52. package/src/react-extension/ExtBootstrapSetup.js +17 -0
  53. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.stories.js +1 -1
  54. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.js +1 -9
  55. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.js +1 -9
  56. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.js +1 -1
  57. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.stories.js +1 -1
  58. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.js +1 -1
  59. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.stories.js +1 -1
  60. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +6 -3
  61. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.data.js +10 -7
  62. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.stories.js +1 -1
  63. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +2 -15
  64. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.js +2 -12
  65. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +2 -11
  66. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +1 -1
  67. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +1 -1
  68. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +1 -9
  69. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.stories.js +1 -1
  70. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +1 -9
  71. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +1 -1
  72. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +12 -6
  73. package/src/react-extension/components/Administration/DisplayLoadingDialog/DisplayLoadingDialog.js +2 -11
  74. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +6 -6
  75. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +1 -1
  76. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +25 -1
  77. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
  78. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +1 -1
  79. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +1 -1
  80. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +25 -1
  81. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
  82. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +1 -1
  83. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.js +12 -2
  84. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +1 -1
  85. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +1 -1
  86. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +24 -24
  87. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +1 -1
  88. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +1 -1
  89. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.stories.js +1 -1
  90. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +6 -3
  91. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.data.js +20 -5
  92. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.stories.js +1 -1
  93. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.js +1 -11
  94. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.stories.js +1 -1
  95. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.js +1 -9
  96. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.stories.js +1 -1
  97. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +90 -46
  98. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +61 -17
  99. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.js +1 -1
  100. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.js +1 -9
  101. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +14 -0
  102. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.stories.js +1 -1
  103. package/src/react-extension/components/Announcement/AnnouncementWrapper/AnnouncementWrapper.js +3 -2
  104. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayExpiredSubscriptionAnnouncement.js +3 -3
  105. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayGoingToExpireSubscriptionAnnouncement.js +3 -2
  106. package/src/react-extension/components/Announcement/HandleSubscriptionAnnouncement/DisplayInvalidSubscriptionAnnouncement.js +3 -3
  107. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.js +2 -2
  108. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.stories.js +1 -1
  109. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.js +2 -2
  110. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.stories.js +1 -1
  111. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -12
  112. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +1 -1
  113. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +88 -41
  114. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +1 -1
  115. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.js +2 -2
  116. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.stories.js +11 -1
  117. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +2 -2
  118. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +1 -1
  119. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +24 -14
  120. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +2 -2
  121. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +1 -1
  122. package/src/react-extension/components/Authentication/DisplayAlreadyLoggedInError/DisplayAlreadyLoggedInError.js +2 -2
  123. package/src/react-extension/components/Authentication/DisplayAlreadyLoggedInError/DisplayAlreadyLoggedInError.test.stories.js +1 -1
  124. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.js +2 -2
  125. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +1 -1
  126. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.js +2 -2
  127. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +1 -1
  128. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.js +2 -2
  129. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +1 -1
  130. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.js +3 -3
  131. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +1 -1
  132. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +2 -2
  133. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +1 -1
  134. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.js +6 -6
  135. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +1 -1
  136. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.js +1 -1
  137. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +1 -1
  138. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.js +34 -7
  139. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.data.js +2 -1
  140. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.js +20 -1
  141. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.page.js +4 -0
  142. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +1 -1
  143. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +2 -2
  144. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +4 -1
  145. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.js +2 -2
  146. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.stories.js +1 -1
  147. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.js +1 -9
  148. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +1 -1
  149. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.js +2 -2
  150. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.stories.js +6 -1
  151. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.js +2 -2
  152. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +1 -1
  153. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.js +2 -2
  154. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.stories.js +1 -1
  155. package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/OrchestrateAccountRecovery.js +2 -2
  156. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +2 -2
  157. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +1 -1
  158. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +1 -9
  159. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +1 -1
  160. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxFooter.js +2 -2
  161. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -2
  162. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +1 -1
  163. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +1 -1
  164. package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +3 -2
  165. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +3 -3
  166. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.stories.js +1 -1
  167. package/src/react-extension/components/Common/ActionFeedback/ShareActionFeedback.js +2 -2
  168. package/src/react-extension/components/Common/Autocomplete/Autocomplete.js +8 -2
  169. package/src/react-extension/components/Common/Avatar/UserAvatar.test.data.js +6 -4
  170. package/src/react-extension/components/Common/Avatar/UserAvatar.test.stories.js +3 -2
  171. package/src/react-extension/components/Common/Button/Button.test.stories.js +5 -5
  172. package/src/react-extension/components/Common/Checkbox/Checkbox.test.stories.js +1 -1
  173. package/src/react-extension/components/Common/ContextualMenu/ContextualMenu.test.stories.js +1 -1
  174. package/src/react-extension/components/Common/ContextualMenu/ContextualMenuWrapper.js +10 -8
  175. package/src/react-extension/components/Common/Dialog/DialogCloseButton/DialogCloseButton.js +2 -1
  176. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogFooter.test.stories.js +2 -2
  177. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogWrapper.js +2 -2
  178. package/src/react-extension/components/Common/Dialog/DialogWrapper/DialogWrapper.test.stories.js +1 -1
  179. package/src/react-extension/components/Common/DragInfo/DragInfo.test.stories.js +10 -8
  180. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.js +3 -11
  181. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.test.stories.js +6 -1
  182. package/src/react-extension/components/Common/Footer/Footer.js +3 -13
  183. package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.js +16 -7
  184. package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItemLoading.js +4 -0
  185. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormCancelButton.js +3 -12
  186. package/src/react-extension/components/Common/Inputs/FormSubmitButton/FormSubmitButton.js +2 -2
  187. package/src/react-extension/components/Common/Internationalisation/TranslationProvider.js +0 -1
  188. package/src/react-extension/components/Common/Link/Link.test.stories.js +1 -1
  189. package/src/react-extension/components/Common/Loading/LoadingBar/LoadingBar.test.stories.js +1 -1
  190. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.test.stories.js +1 -1
  191. package/src/react-extension/components/Common/Menu/DisplayMainMenu.js +2 -11
  192. package/src/react-extension/components/Common/Navigation/Search/SearchBar.js +7 -7
  193. package/src/react-extension/components/Common/Navigation/Search/SearchBar.test.stories.js +1 -1
  194. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +2 -11
  195. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +1 -1
  196. package/src/react-extension/components/Common/RadioButton/RadioButton.test.stories.js +1 -1
  197. package/src/react-extension/components/Common/Select/Select.js +44 -12
  198. package/src/react-extension/components/Common/Select/Select.test.stories.js +1 -1
  199. package/src/react-extension/components/Common/Text/Text.test.stories.js +1 -1
  200. package/src/react-extension/components/Common/TextField/TextField.test.stories.js +1 -1
  201. package/src/react-extension/components/Common/Toggle/Toggle.test.stories.js +1 -1
  202. package/src/react-extension/components/Common/Tooltip/Tooltip.test.stories.js +2 -2
  203. package/src/react-extension/components/Internationalisation/ChangeLocale/ChangeLocale.test.page.js +1 -1
  204. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +9 -9
  205. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +1 -1
  206. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +3 -3
  207. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.page.js +1 -1
  208. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.stories.js +1 -1
  209. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +4 -4
  210. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.stories.js +1 -1
  211. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspace.js +1 -9
  212. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.js +8 -17
  213. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.test.js +2 -2
  214. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMainMenu.test.stories.js +1 -1
  215. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +6 -6
  216. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.test.stories.js +1 -1
  217. package/src/react-extension/components/Resource/EditResource/EditResource.js +8 -8
  218. package/src/react-extension/components/Resource/EditResource/EditResource.test.stories.js +1 -1
  219. package/src/react-extension/components/Resource/ExportResources/ExportResources.js +9 -10
  220. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +1 -1
  221. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +1 -1
  222. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +1 -1
  223. package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +1 -1
  224. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +2 -11
  225. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +1 -1
  226. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItemContextualMenu.js +2 -11
  227. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByRootFolderContextualMenu.js +2 -11
  228. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.js +2 -11
  229. package/src/react-extension/components/Resource/FilterResourcesByGroups/FilterResourcesByGroups.test.stories.js +1 -1
  230. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.js +4 -13
  231. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.js +1 -1
  232. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +1 -1
  233. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +1 -1
  234. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +1 -1
  235. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsContextualMenu.js +2 -11
  236. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +2 -11
  237. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsListContextualMenu.js +3 -12
  238. package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +1 -1
  239. package/src/react-extension/components/Resource/ImportResources/ImportResources.test.stories.js +1 -1
  240. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +1 -1
  241. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +1 -1
  242. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +1 -1
  243. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +5 -3
  244. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.js +1 -1
  245. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +1 -1
  246. package/src/react-extension/components/ResourceComment/DeleteResourceComment/DeleteComment.js +2 -1
  247. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.js +1 -9
  248. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +5 -3
  249. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.js +2 -2
  250. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +5 -3
  251. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +3 -3
  252. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +2 -2
  253. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsComment.js +2 -11
  254. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.js +2 -10
  255. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +1 -1
  256. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +1 -1
  257. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.data.js +1 -1
  258. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsPermission.js +2 -10
  259. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.js +3 -12
  260. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +1 -1
  261. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +1 -1
  262. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +1 -1
  263. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +1 -1
  264. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.js +1 -1
  265. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +1 -1
  266. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +1 -1
  267. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +1 -1
  268. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +1 -1
  269. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +1 -1
  270. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.js +1 -9
  271. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +1 -1
  272. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +1 -1
  273. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.js +10 -7
  274. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +1 -1
  275. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +12 -9
  276. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +1 -1
  277. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +10 -7
  278. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +1 -1
  279. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.js +2 -2
  280. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +1 -1
  281. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +1 -1
  282. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +1 -1
  283. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +2 -2
  284. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTagsItemViewer.js +2 -11
  285. package/src/react-extension/components/Share/ShareDialog.js +124 -22
  286. package/src/react-extension/components/Share/ShareDialog.test.data.js +25 -1
  287. package/src/react-extension/components/Share/ShareDialog.test.js +87 -36
  288. package/src/react-extension/components/Share/ShareDialog.test.page.js +1 -1
  289. package/src/react-extension/components/Share/ShareDialog.test.stories.js +1 -1
  290. package/src/react-extension/components/Share/SharePermissionDeleteButton.js +2 -1
  291. package/src/react-extension/components/Share/SharePermissionItem.js +56 -0
  292. package/src/react-extension/components/Share/ShareVariesDetails.js +2 -11
  293. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.js +1 -1
  294. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +1 -1
  295. package/src/react-extension/components/User/CreateUser/CreateUser.js +9 -9
  296. package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +1 -1
  297. package/src/react-extension/components/User/DeleteUser/DeleteUser.js +1 -1
  298. package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +1 -1
  299. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.js +3 -3
  300. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +1 -1
  301. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.js +1 -9
  302. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.test.stories.js +1 -1
  303. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.js +8 -17
  304. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.test.stories.js +1 -1
  305. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +3 -3
  306. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.stories.js +1 -1
  307. package/src/react-extension/components/User/DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions.js +8 -17
  308. package/src/react-extension/components/User/DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions.test.js +4 -4
  309. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +1 -1
  310. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.stories.js +1 -1
  311. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.stories.js +1 -1
  312. package/src/react-extension/components/User/EditUser/EditUser.js +9 -9
  313. package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +1 -1
  314. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +1 -1
  315. package/src/react-extension/components/User/FilterUsersByGroups/DisplayGroupContextualMenu.js +2 -11
  316. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroup.test.stories.js +1 -1
  317. package/src/react-extension/components/User/FilterUsersByGroups/FilterUsersByGroupContextualMenu.js +2 -11
  318. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.js +3 -12
  319. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +1 -1
  320. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.js +1 -9
  321. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +1 -1
  322. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +3 -3
  323. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.js +1 -9
  324. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.data.js +1 -1
  325. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.stories.js +1 -1
  326. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.js +1 -9
  327. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.stories.js +1 -1
  328. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +1 -1
  329. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.js +1 -1
  330. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +22 -83
  331. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +8 -1
  332. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.data.js +20 -2
  333. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.js +25 -1
  334. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +28 -26
  335. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +85 -57
  336. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +21 -6
  337. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +1 -1
  338. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.js +1 -1
  339. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +1 -1
  340. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.js +2 -2
  341. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +1 -1
  342. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +1 -1
  343. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +1 -1
  344. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.js +4 -13
  345. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +1 -1
  346. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembersGroupMember.js +1 -9
  347. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +132 -151
  348. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -1
  349. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +37 -14
  350. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +5 -2
  351. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroupItem.js +209 -0
  352. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
  353. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DisplayChangePassphraseIntroduction.js +2 -3
  354. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/DownloadRecoveryKit.js +2 -2
  355. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +25 -12
  356. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +5 -1
  357. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +7 -0
  358. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +2 -10
  359. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +1 -1
  360. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.js +1 -1
  361. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.stories.js +1 -1
  362. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +9 -2
  363. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +58 -35
  364. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.js +1 -1
  365. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +1 -1
  366. package/src/react-extension/components/UserSetting/DisplayUserSettingWorkspaceActions/DisplayUserSettingWorkspaceActions.js +2 -11
  367. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -2
  368. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +1 -1
  369. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.js +1 -9
  370. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +1 -1
  371. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +8 -8
  372. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +1 -1
  373. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +4 -13
  374. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +1 -1
  375. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +1 -1
  376. package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.js +14 -1
  377. package/src/react-extension/test/fixture/Settings/siteSettings.js +20 -14
  378. package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +8 -1
  379. package/src/react-quickaccess/ExtQuickAccess.js +23 -9
  380. package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +0 -1
  381. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgress.js +2 -5
  382. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +1 -1
  383. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +2 -2
  384. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +1 -1
  385. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +1 -1
  386. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +1 -1
  387. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +1 -1
  388. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +1 -1
  389. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +1 -1
  390. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +1 -1
  391. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +1 -1
  392. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +1 -1
  393. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +1 -1
  394. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +1 -1
  395. package/src/react-quickaccess/components/GeneratePasswordPage/ConfigurePasswordGenerator.js +2 -3
  396. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -3
  397. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.stories.js +1 -1
  398. package/src/react-quickaccess/components/Header/Header.test.stories.js +1 -1
  399. package/src/react-quickaccess/components/HomePage/HomePage.js +0 -8
  400. package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +1 -1
  401. package/src/react-quickaccess/components/LoginPage/LoginPage.js +1 -9
  402. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +1 -1
  403. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.js +1 -1
  404. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +1 -1
  405. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +5 -5
  406. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +1 -1
  407. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +1 -1
  408. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +1 -1
  409. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +4 -4
  410. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +1 -1
  411. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -3
  412. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +1 -1
  413. package/src/react-quickaccess/components/Search/Search.js +5 -5
  414. package/src/react-quickaccess/components/Search/Search.test.stories.js +1 -1
  415. package/src/react-web-integration/BrowserIntegrationBootstrap.js +0 -17
  416. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +1 -1
  417. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +2 -2
  418. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +1 -1
  419. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +11 -1
  420. package/src/react-web-integration/lib/InForm/InformManager.test.data.js +60 -0
  421. package/src/react-web-integration/lib/InForm/InformManager.test.js +151 -6
  422. package/src/react-web-integration/lib/InForm/InformManager.test.page.js +39 -0
  423. package/src/shared/components/Icons/Icon.test.stories.js +1 -1
  424. package/src/shared/components/Password/Password.js +2 -1
  425. package/src/shared/components/Password/Password.test.page.js +4 -1
  426. package/src/shared/components/Password/Password.test.stories.js +1 -1
  427. package/src/shared/components/PasswordComplexity/PasswordComplexity.js +2 -2
  428. package/src/shared/components/PasswordComplexity/PasswordComplexity.test.stories.js +5 -5
  429. package/src/stories/assets/intro/hero.png +0 -0
  430. package/src/stories/assets/intro/intro.css +47 -0
  431. package/test/jest.setup.js +2 -0
@@ -24,7 +24,7 @@ import {
24
24
 
25
25
 
26
26
  export default {
27
- title: 'Passbolt/Authentication/ChooseAccountRecoveryPreference',
27
+ title: 'Passbolt Component/Authentication/ChooseAccountRecoveryPreference',
28
28
  component: ChooseAccountRecoveryPreference
29
29
  };
30
30
 
@@ -41,20 +41,30 @@ const Template = args =>
41
41
  </div>
42
42
  </MockTranslationProvider>;
43
43
 
44
+ const defaultParameters = {
45
+ css: "ext_authentication"
46
+ };
47
+
44
48
  export const MandatoryWithLink = Template.bind({});
45
49
  MandatoryWithLink.args = mandatoryPolicyPropsWithImportedKey();
50
+ MandatoryWithLink.parameters = defaultParameters;
46
51
 
47
52
  export const OptOutWithLink = Template.bind({});
48
53
  OptOutWithLink.args = optOutPolicyPropsWithImportedKey();
54
+ OptOutWithLink.parameters = defaultParameters;
49
55
 
50
56
  export const OptInWithLink = Template.bind({});
51
57
  OptInWithLink.args = optInPolicyPropsWithImportedKey();
58
+ OptInWithLink.parameters = defaultParameters;
52
59
 
53
60
  export const Mandatory = Template.bind({});
54
61
  Mandatory.args = mandatoryPolicyProps();
62
+ Mandatory.parameters = defaultParameters;
55
63
 
56
64
  export const OptOut = Template.bind({});
57
65
  OptOut.args = optOutPolicyProps();
66
+ OptOut.parameters = defaultParameters;
58
67
 
59
68
  export const OptIn = Template.bind({});
60
69
  OptIn.args = optInPolicyProps();
70
+ OptIn.parameters = defaultParameters;
@@ -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 {CirclePicker} from "react-color";
18
18
  import SecretComplexity from "../../../../shared/lib/Secret/SecretComplexity";
19
19
 
@@ -349,4 +349,4 @@ ChooseSecurityToken.propTypes = {
349
349
  onComplete: PropTypes.func.isRequired, // The callback function to call when the form is submitted
350
350
  };
351
351
 
352
- export default withTranslation('common')(ChooseSecurityToken);
352
+ export default ChooseSecurityToken;
@@ -16,7 +16,7 @@ import {MemoryRouter, Route} from "react-router-dom";
16
16
  import ChooseSecurityToken from "./ChooseSecurityToken";
17
17
 
18
18
  export default {
19
- title: 'Passbolt/Authentication/ChooseSecurityToken',
19
+ title: 'Passbolt Component/Authentication/ChooseSecurityToken',
20
20
  component: ChooseSecurityToken
21
21
  };
22
22
 
@@ -14,7 +14,7 @@
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";
@@ -44,6 +44,7 @@ class CreateGpgKey extends Component {
44
44
  constructor(props) {
45
45
  super(props);
46
46
  this.state = this.defaultState;
47
+ this.isPwndProcessingPromise = null;
47
48
  this.evaluatePassphraseIsInDictionaryDebounce = debounce(this.evaluatePassphraseIsInDictionary, 300);
48
49
  this.bindEventHandlers();
49
50
  this.createReferences();
@@ -57,7 +58,7 @@ class CreateGpgKey extends Component {
57
58
  passphrase: '', // The current passphrase
58
59
  passphraseEntropy: null, // The current passphrase entropy
59
60
  actions: {
60
- processing: false // True if one's processing passphrase
61
+ processing: false, // True if one's processing passphrase
61
62
  },
62
63
  hintClassNames: { // The class names for passphrase hints
63
64
  enoughLength: '',
@@ -108,7 +109,6 @@ class CreateGpgKey extends Component {
108
109
  */
109
110
  bindEventHandlers() {
110
111
  this.handlePassphraseChange = this.handlePassphraseChange.bind(this);
111
- this.handleImportGpgKey = this.handleImportGpgKey.bind(this);
112
112
  this.handleSubmit = this.handleSubmit.bind(this);
113
113
  }
114
114
 
@@ -145,19 +145,12 @@ class CreateGpgKey extends Component {
145
145
  if (passphrase.length) {
146
146
  passphraseEntropy = SecretGenerator.entropy(passphrase);
147
147
  hintClassNames = this.evaluatePassphraseHintClassNames(passphrase);
148
- this.evaluatePassphraseIsInDictionaryDebounce();
148
+ this.isPwndProcessingPromise = this.evaluatePassphraseIsInDictionaryDebounce();
149
149
  }
150
150
 
151
151
  this.setState({passphrase, passphraseEntropy, hintClassNames});
152
152
  }
153
153
 
154
- /**
155
- * Whenever the user wants to import his gpg key manually
156
- */
157
- handleImportGpgKey() {
158
- this.importGpgKey();
159
- }
160
-
161
154
  /**
162
155
  * Whenever the user submits the passphrase
163
156
  * @param event A form submit event
@@ -223,11 +216,25 @@ class CreateGpgKey extends Component {
223
216
  });
224
217
  }
225
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";
226
+ }
227
+
226
228
  /**
227
229
  * Generate the Gpg key
228
230
  */
229
231
  async generateGpgKey() {
230
232
  await this.toggleProcessing();
233
+ const isPwned = await this.isCurrentPassphrasePwned();
234
+ if (isPwned) {
235
+ await this.toggleProcessing();
236
+ return;
237
+ }
231
238
  this.props.onComplete(this.state.passphrase);
232
239
  }
233
240
 
@@ -235,7 +242,11 @@ class CreateGpgKey extends Component {
235
242
  * Toggle the processing mode
236
243
  */
237
244
  async toggleProcessing() {
238
- await this.setState({actions: {processing: !this.state.actions.processing}});
245
+ const actions = {
246
+ ...this.state.actions,
247
+ processing: !this.state.actions.processing
248
+ };
249
+ await this.setState({actions});
239
250
  }
240
251
 
241
252
  /**
@@ -331,7 +342,6 @@ CreateGpgKey.propTypes = {
331
342
  CreateGpgKeyVariation.GENERATE_ACCOUNT_RECOVERY_GPG_KEY
332
343
  ]), // Defines how the form should be displayed and behaves
333
344
  onSecondaryActionClick: PropTypes.func, // Callback to trigger when the user clicks on the secondary action link.
334
- t: PropTypes.func.isRequired, // The translation function
335
345
  };
336
346
 
337
- 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
  }
@@ -125,7 +125,7 @@ describe("ImportGpgKey", () => {
125
125
  validatePrivateGpgKey: jest.fn(() => { throw new Error("The private key should not be revoked."); })
126
126
  });
127
127
  props.context.port.request.mockImplementation(() => ({
128
- expires: "Never",
128
+ expires: "Infinity",
129
129
  revoked: true
130
130
  }));
131
131
  const page = new ImportGpgKeyPage(props);
@@ -223,5 +223,24 @@ describe("ImportGpgKey", () => {
223
223
  await page.verifyKey();
224
224
  expect(page.hasInvalidPrivateKeyError).toBeFalsy();
225
225
  });
226
+
227
+ it("As AN I should see a warning if the private key has an expiration date", async() => {
228
+ const props = defaultProps({
229
+ validatePrivateGpgKey: jest.fn(() => { throw new Error("The private key should be a valid armored GPG key."); }),
230
+ hasKeyExpirationDate: jest.fn(() => Promise.resolve(true))
231
+ });
232
+ props.context.port.request.mockImplementation(() => ({
233
+ expires: "2100-01-01 00:00:00.000",
234
+ revoked: false
235
+ }));
236
+ const page = new ImportGpgKeyPage(props);
237
+
238
+ expect.assertions(3);
239
+ await page.fill('Some private key');
240
+ await page.verifyKey();
241
+ expect(page.hasInvalidPrivateKeyError).toBeTruthy();
242
+ expect(page.warningMessage).toContain("The private key should not have an expiry date.");
243
+ expect(page.warningMessage).toContain("Once expired you will not be able to connect to your account.");
244
+ });
226
245
  });
227
246
  });
@@ -109,6 +109,10 @@ export default class ImportGpgKeyPage {
109
109
  return !this.privateKeyInput.hasAttribute('disabled');
110
110
  }
111
111
 
112
+ get warningMessage() {
113
+ return this._page.container.querySelector('.warning-message').textContent;
114
+ }
115
+
112
116
  /**
113
117
  * Change the private key input value
114
118
  * @param privateKey The new passphrase
@@ -17,7 +17,7 @@ import ImportGpgKey, {ImportGpgKeyVariations} from "./ImportGpgKey";
17
17
  import {defaultProps} from "./ImportGpgKey.test.data";
18
18
 
19
19
  export default {
20
- title: 'Passbolt/Authentication/ImportGpgKey',
20
+ title: 'Passbolt Component/Authentication/ImportGpgKey',
21
21
  component: ImportGpgKey
22
22
  };
23
23
 
@@ -15,7 +15,7 @@ import React, {Component} from "react";
15
15
  import {BROWSER_NAMES, detectBrowserName} from "../../../../shared/lib/Browser/detectBrowserName";
16
16
  import {withAppContext} from "../../../contexts/AppContext";
17
17
  import PropTypes from "prop-types";
18
- import {Trans, withTranslation} from "react-i18next";
18
+ import {Trans} from "react-i18next";
19
19
 
20
20
  const CHROME_STORE_BROWSER_EXTENSION_URL = "https://chrome.google.com/webstore/detail/passbolt-extension/didegimhafipceonhjepacocaffmoppf";
21
21
  const FIREFOX_STORE_BROWSER_EXTENSION_URL = "https://addons.mozilla.org/firefox/addon/passbolt";
@@ -127,4 +127,4 @@ class InstallExtension extends Component {
127
127
  InstallExtension.propTypes = {
128
128
  context: PropTypes.any, // The application context
129
129
  };
130
- export default withAppContext(withTranslation('common')(InstallExtension));
130
+ export default withAppContext(InstallExtension);
@@ -16,7 +16,7 @@ import {MemoryRouter, Route} from "react-router-dom";
16
16
  import InstallExtension from "./InstallExtension";
17
17
 
18
18
  export default {
19
- title: 'Passbolt/Authentication/InstallExtension',
19
+ title: 'Passbolt Component/Authentication/InstallExtension',
20
20
  component: InstallExtension
21
21
  };
22
22
 
@@ -55,6 +55,7 @@ Chrome.loaders = [
55
55
  });
56
56
  },
57
57
  ];
58
+ Chrome.parameters = defaultParameters;
58
59
 
59
60
  export const Edge = Template.bind({});
60
61
  Edge.loaders = [
@@ -65,6 +66,7 @@ Edge.loaders = [
65
66
  });
66
67
  },
67
68
  ];
69
+ Edge.parameters = defaultParameters;
68
70
 
69
71
  export const UnsupportedBrowser = Template.bind({});
70
72
  UnsupportedBrowser.loaders = [
@@ -75,3 +77,4 @@ UnsupportedBrowser.loaders = [
75
77
  });
76
78
  },
77
79
  ];
80
+ UnsupportedBrowser.parameters = defaultParameters;