passbolt-styleguide 3.5.2 → 3.6.0-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/build/css/help.min.css +3 -3
  2. package/build/css/public.min.css +4 -4
  3. package/build/css/themes/default/api_authentication.min.css +3 -3
  4. package/build/css/themes/default/api_cloud.min.css +3 -3
  5. package/build/css/themes/default/api_main.min.css +4 -4
  6. package/build/css/themes/default/api_reports.min.css +4 -4
  7. package/build/css/themes/default/api_webinstaller.min.css +3 -3
  8. package/build/css/themes/default/ext_app.min.css +4 -4
  9. package/build/css/themes/default/ext_authentication.min.css +3 -3
  10. package/build/css/themes/default/ext_external.min.css +2 -2
  11. package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
  12. package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
  13. package/build/css/themes/default/ext_quickaccess.min.css +3 -3
  14. package/build/css/themes/midgar/api_authentication.min.css +3 -3
  15. package/build/css/themes/midgar/api_main.min.css +4 -4
  16. package/build/css/themes/midgar/api_reports.min.css +4 -4
  17. package/build/css/themes/midgar/ext_app.min.css +4 -4
  18. package/build/css/themes/midgar/ext_authentication.min.css +3 -3
  19. package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
  20. package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
  21. package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
  22. package/build/js/dist/api-account-recovery.js +2 -0
  23. package/build/js/dist/api-account-recovery.js.LICENSE.txt +107 -0
  24. package/build/js/dist/api-app.js +1 -1
  25. package/build/js/dist/api-app.js.LICENSE.txt +73 -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 +159 -15
  31. package/jest.config.json +13 -0
  32. package/package.json +26 -21
  33. package/src/locales/en-UK/common.json +140 -4
  34. package/src/react-extension/ApiAccountRecovery.entry.js +25 -0
  35. package/src/react-extension/ApiAccountRecovery.js +233 -0
  36. package/src/react-extension/ApiApp.js +50 -43
  37. package/src/react-extension/ExtApp.js +129 -105
  38. package/src/react-extension/ExtAuthenticationAccountRecovery.js +173 -0
  39. package/src/react-extension/ExtAuthenticationLogin.js +35 -33
  40. package/src/react-extension/ExtAuthenticationRecover.js +23 -35
  41. package/src/react-extension/ExtAuthenticationSetup.js +24 -46
  42. package/src/react-extension/ExtBootstrapAccountRecovery.js +75 -0
  43. package/src/react-extension/ExtBootstrapApp.js +4 -0
  44. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.js +114 -0
  45. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.data.js +27 -0
  46. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.js +72 -0
  47. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.page.js +74 -0
  48. package/src/react-extension/components/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog.test.stories.js +51 -0
  49. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.js +80 -0
  50. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.test.data.js +60 -0
  51. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.test.js +110 -0
  52. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryStatusCheck/HandleAccountRecoveryStatusCheck.test.page.js +40 -0
  53. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.js +96 -0
  54. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.test.data.js +63 -0
  55. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.test.js +88 -0
  56. package/src/react-extension/components/AccountRecovery/HandleAccountRecoveryUserSettingsRoute/HandleAccountRecoveryUserSettingsRoute.test.page.js +37 -0
  57. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.js +214 -0
  58. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.data.js +49 -0
  59. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.js +98 -0
  60. package/src/react-extension/components/AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow.test.page.js +37 -0
  61. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.js +316 -0
  62. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.data.js +55 -0
  63. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.js +132 -0
  64. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.page.js +70 -0
  65. package/src/react-extension/components/AccountRecovery/ManageAccountRecoveryUserSettings/ManageAccountRecoveryUserSettings.test.stories.js +104 -0
  66. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.js +286 -0
  67. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.data.js +51 -0
  68. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.js +77 -0
  69. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.page.js +119 -0
  70. package/src/react-extension/components/AccountRecovery/ReviewAccountRecoveryRequest/ReviewAccountRecoveryRequest.test.stories.js +36 -0
  71. package/src/react-extension/components/Administration/AdministrationWorkspace.js +15 -2
  72. package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +5 -1
  73. package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +45 -0
  74. package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +23 -3
  75. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +254 -0
  76. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.data.js +153 -0
  77. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.js +109 -0
  78. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.page.js +174 -0
  79. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.test.stories.js +43 -0
  80. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +36 -0
  81. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +2 -1
  82. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +9 -0
  83. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +12 -0
  84. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.js +138 -0
  85. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.test.data.js +46 -0
  86. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.test.js +51 -0
  87. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationAccountRecoveryAction/DisplayAdministrationAccountRecoveryActions.test.page.js +93 -0
  88. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +2 -0
  89. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
  90. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +105 -2
  91. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.stories.js +104 -0
  92. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +2 -4
  93. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.test.js +10 -3
  94. package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.js +180 -0
  95. package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.test.data.js +47 -0
  96. package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.test.js +64 -0
  97. package/src/react-extension/components/Administration/HandleSaveAccountRecoveryOrganizationPolicyWorkflow/HandleSaveAccountRecoveryOrganizationPolicyWorkflow.test.page.js +35 -0
  98. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +435 -0
  99. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.data.js +186 -0
  100. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +100 -0
  101. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.page.js +159 -0
  102. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.stories.js +64 -0
  103. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.js +535 -0
  104. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.data.js +31 -0
  105. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.js +155 -0
  106. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.page.js +124 -0
  107. package/src/react-extension/components/Administration/ProvideAccountRecoveryOrganizationKey/ProvideAccountRecoveryOrganizationKey.test.stories.js +41 -0
  108. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.js +108 -0
  109. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.js +48 -0
  110. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.page.js +82 -0
  111. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/DownloadOrganizationKey.test.stories.js +51 -0
  112. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +471 -0
  113. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +181 -0
  114. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.js +289 -0
  115. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/ImportOrganizationKey.test.js +188 -0
  116. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.js +121 -0
  117. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +262 -0
  118. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.stories.js +50 -0
  119. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.js +73 -0
  120. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.data.js +41 -0
  121. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.js +48 -0
  122. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.page.js +64 -0
  123. package/src/react-extension/components/Authentication/AskForAuthenticationHelpCredentialLost/AskForAuthenticationHelpCredentialLost.test.stories.js +40 -0
  124. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.js +36 -0
  125. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.js +37 -0
  126. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.page.js +55 -0
  127. package/src/react-extension/components/Authentication/CheckAccountRecoveryEmail/CheckAccountRecoveryEmail.test.stories.js +39 -0
  128. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +3 -3
  129. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.page.js +0 -1
  130. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +21 -15
  131. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +33 -23
  132. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +18 -30
  133. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +110 -47
  134. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +33 -10
  135. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +36 -19
  136. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.js +191 -0
  137. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.data.js +90 -0
  138. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.js +92 -0
  139. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.page.js +109 -0
  140. package/src/react-extension/components/Authentication/ChooseAccountRecoveryPreference/ChooseAccountRecoveryPreference.test.stories.js +60 -0
  141. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.js +5 -29
  142. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.data.js +17 -18
  143. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.js +48 -25
  144. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.page.js +16 -9
  145. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +20 -16
  146. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +40 -36
  147. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +18 -14
  148. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +189 -103
  149. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +50 -11
  150. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +31 -19
  151. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.js +0 -9
  152. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.js +1 -1
  153. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/{DisplayBrowserNotSupportedPage.js → DisplayBrowserNotSupported.test.page.js} +2 -5
  154. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +21 -15
  155. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.js +0 -9
  156. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.data.js +36 -0
  157. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.js +34 -0
  158. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.page.js +49 -0
  159. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +23 -15
  160. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.js +0 -9
  161. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.js +1 -1
  162. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/{DisplayRequireInvitationErrorPage.js → DisplayRequireInvitationError.test.page.js} +0 -3
  163. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +21 -15
  164. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.js +91 -10
  165. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.data.js +56 -0
  166. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.js +46 -0
  167. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.page.js +79 -0
  168. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +48 -15
  169. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +12 -53
  170. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.data.js +16 -16
  171. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.js +10 -13
  172. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.page.js +16 -6
  173. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +21 -15
  174. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.data.js +17 -3
  175. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.page.js +0 -1
  176. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +21 -15
  177. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.data.js +28 -11
  178. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +21 -16
  179. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +17 -3
  180. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.js +56 -19
  181. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.data.js +25 -17
  182. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.js +204 -58
  183. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.page.js +43 -7
  184. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +31 -19
  185. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +0 -9
  186. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.data.js +17 -3
  187. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +62 -18
  188. package/src/react-extension/components/Authentication/{IntroduceSetupExtension/IntroduceSetupExtension.js → IntroduceExtension/IntroduceExtension.js} +8 -19
  189. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.data.js +24 -0
  190. package/src/react-extension/components/Authentication/{IntroduceSetupExtension/IntroduceSetupExtension.test.js → IntroduceExtension/IntroduceExtension.test.js} +16 -6
  191. package/src/react-extension/components/Authentication/{IntroduceSetupExtension/IntroduceSetupExtension.test.page.js → IntroduceExtension/IntroduceExtension.test.page.js} +3 -4
  192. package/src/react-extension/components/Authentication/IntroduceExtension/IntroduceExtension.test.stories.js +39 -0
  193. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.data.js +27 -9
  194. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.js +2 -8
  195. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.page.js +4 -9
  196. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +23 -14
  197. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.js +70 -0
  198. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.data.js +25 -0
  199. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.js +49 -0
  200. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.page.js +74 -0
  201. package/src/react-extension/components/Authentication/RequestAccountRecovery/RequestAccountRecovery.test.stories.js +40 -0
  202. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.js +41 -0
  203. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.data.js +36 -0
  204. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.js +35 -0
  205. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.page.js +50 -0
  206. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +41 -0
  207. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.js +42 -0
  208. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.js +43 -0
  209. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.page.js +62 -0
  210. package/src/react-extension/components/AuthenticationAccountRecovery/DisplayRestartFromScratchError/DisplayRestartFromScratchError.test.stories.js +40 -0
  211. package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/InsertAccountRecoveryIframe.js +64 -0
  212. package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateAccountRecovery/OrchestrateAccountRecovery.js +84 -0
  213. package/src/react-extension/components/AuthenticationAccountRecovery/OrchestrateApiAccountRecovery/OrchestrateApiAccountRecovery.js +66 -0
  214. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.js +8 -22
  215. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.data.js +25 -0
  216. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.js +52 -0
  217. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.page.js +82 -0
  218. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +23 -16
  219. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +156 -145
  220. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +67 -0
  221. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +157 -0
  222. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +155 -0
  223. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +32 -27
  224. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxFooter.js +48 -0
  225. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +90 -0
  226. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.js +12 -3
  227. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +1 -1
  228. package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +90 -82
  229. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +80 -87
  230. package/src/react-extension/components/Common/ActionFeedback/DisplayActionFeedbacks.test.js +8 -3
  231. package/src/react-extension/components/Common/Avatar/UserAvatar.js +6 -1
  232. package/src/react-extension/components/Common/Avatar/UserAvatar.test.data.js +27 -0
  233. package/src/react-extension/components/Common/Avatar/UserAvatar.test.stories.js +47 -0
  234. package/src/react-extension/components/Common/Dialog/ManageDialogs/ManageDialogs.js +7 -2
  235. package/src/react-extension/components/Common/Error/HandleErrorEvents/HandleErrorEvents.js +2 -3
  236. package/src/react-extension/components/Common/Error/NotifyError/NotifyError.js +78 -15
  237. package/src/react-extension/components/Common/Icons/Icon.js +7 -0
  238. package/src/react-extension/components/Common/Internationalisation/TranslationProvider.js +1 -0
  239. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +15 -2
  240. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.test.stories.js +49 -0
  241. package/src/react-extension/components/Common/Route/HandleApplicationFirstLoadRoute.js +77 -0
  242. package/src/react-extension/components/Common/Route/HandleRouteFallback.js +14 -46
  243. package/src/react-extension/components/Common/Tab/Tabs.js +3 -1
  244. package/src/react-extension/components/Common/Workflow/ManageWorkflows/ManageWorkflows.js +72 -0
  245. package/src/react-extension/components/InsertAppIframe.js +12 -6
  246. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +2 -4
  247. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.data.js +2 -2
  248. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +17 -2
  249. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +19 -3
  250. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.js +2 -4
  251. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.js +20 -6
  252. package/src/react-extension/components/Resource/DeleteResource/DeleteResource.test.stories.js +12 -0
  253. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.stories.js +107 -6
  254. package/src/react-extension/components/Resource/EditResource/EditResource.js +2 -4
  255. package/src/react-extension/components/Resource/EditResource/EditResource.test.data.js +2 -2
  256. package/src/react-extension/components/Resource/EditResource/EditResource.test.js +3 -0
  257. package/src/react-extension/components/Resource/EditResource/EditResource.test.stories.js +18 -4
  258. package/src/react-extension/components/Resource/ExportResources/ExportResources.js +5 -7
  259. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.js +9 -2
  260. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +4 -2
  261. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +5 -7
  262. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.js +8 -2
  263. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +4 -2
  264. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +24 -8
  265. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +2 -4
  266. package/src/react-extension/components/Resource/ImportResources/ImportResources.js +2 -4
  267. package/src/react-extension/components/Resource/ImportResources/ImportResources.test.js +10 -2
  268. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +4 -6
  269. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.js +9 -2
  270. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +9 -1
  271. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +4 -2
  272. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +19 -1
  273. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +15 -3
  274. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +8 -3
  275. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +9 -8
  276. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +6 -3
  277. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +1 -1
  278. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +1 -1
  279. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.data.js +11 -0
  280. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.test.js +11 -4
  281. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +11 -10
  282. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +2 -4
  283. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +16 -5
  284. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +13 -0
  285. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.js +8 -10
  286. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.js +12 -5
  287. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +4 -1
  288. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.js +2 -4
  289. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.js +2 -5
  290. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +6 -2
  291. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +2 -4
  292. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +15 -4
  293. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +10 -2
  294. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +4 -2
  295. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.js +2 -3
  296. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +3 -1
  297. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +3 -1
  298. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +2 -1
  299. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.js +1 -1
  300. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePasswordGenerator.test.stories.js +2 -3
  301. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.test.stories.js +7 -3
  302. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.js +2 -4
  303. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +6 -2
  304. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +2 -4
  305. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +6 -2
  306. package/src/react-extension/components/Share/ShareDialog.js +2 -4
  307. package/src/react-extension/components/Share/ShareDialog.test.js +14 -3
  308. package/src/react-extension/components/Share/ShareDialog.test.stories.js +5 -3
  309. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.js +4 -6
  310. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.js +6 -2
  311. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -0
  312. package/src/react-extension/components/User/CreateUser/CreateUser.js +2 -4
  313. package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +14 -3
  314. package/src/react-extension/components/User/DeleteUser/DeleteUser.js +2 -4
  315. package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +9 -2
  316. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.js +2 -4
  317. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +7 -1
  318. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.js +79 -0
  319. package/src/react-extension/components/User/DisplayExpiredAccountRecovery/DisplayExpiredAccountRecovery.test.stories.js +32 -0
  320. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.js +13 -3
  321. package/src/react-extension/components/User/DisplayUserBadgeMenu/DisplayUserBadgeMenu.test.stories.js +7 -9
  322. package/src/react-extension/components/User/DisplayUserWorkspace/DisplayUserWorkspace.js +5 -1
  323. package/src/react-extension/components/User/DisplayUserWorkspace/DisplayUserWorkspace.test.data.js +18 -9
  324. package/src/react-extension/components/User/DisplayUserWorkspace/DisplayUserWorkspace.test.js +2 -2
  325. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +48 -6
  326. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.data.js +16 -1
  327. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.js +14 -0
  328. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.page.js +8 -0
  329. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.test.stories.js +55 -0
  330. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.js +35 -0
  331. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.data.js +33 -13
  332. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.js +16 -3
  333. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.page.js +19 -6
  334. package/src/react-extension/components/User/DisplayUsers/DisplayUsers.test.stories.js +38 -0
  335. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +46 -10
  336. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.data.js +21 -6
  337. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.js +38 -5
  338. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.page.js +10 -0
  339. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.test.stories.js +53 -0
  340. package/src/react-extension/components/User/EditUser/EditUser.js +2 -4
  341. package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +8 -1
  342. package/src/react-extension/components/User/FilterUsersByGroups/DisplayGroupContextualMenu.js +2 -4
  343. package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.js +98 -0
  344. package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.test.data.js +56 -0
  345. package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.test.js +54 -0
  346. package/src/react-extension/components/User/HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute.test.page.js +37 -0
  347. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +36 -3
  348. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1 -1
  349. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.js +1 -1
  350. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.js +234 -0
  351. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.data.js +125 -0
  352. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.js +150 -0
  353. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.page.js +113 -0
  354. package/src/react-extension/components/UserDetails/DisplayUserDetailsAccountRecovery/DisplayUserDetailsAccountRecovery.test.stories.js +142 -0
  355. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.js +467 -0
  356. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.data.js +167 -0
  357. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.js +106 -0
  358. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.page.js +101 -0
  359. package/src/react-extension/components/UserDetails/DisplayUserDetailsActivity/DisplayUserDetailsActivity.test.stories.js +143 -0
  360. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.js +5 -0
  361. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +1 -1
  362. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.data.js +1 -1
  363. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +1 -1
  364. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +1 -1
  365. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.data.js +1 -1
  366. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +1 -1
  367. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +2 -4
  368. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -1
  369. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.js +2 -4
  370. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +8 -1
  371. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.js +2 -4
  372. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +8 -1
  373. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.test.data.js +1 -1
  374. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.test.js +1 -1
  375. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.data.js +1 -1
  376. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.data.js +1 -1
  377. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +2 -1
  378. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +2 -4
  379. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.data.js +1 -1
  380. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +13 -2
  381. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +1 -1
  382. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
  383. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.js +5 -2
  384. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +1 -1
  385. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +11 -1
  386. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +1 -1
  387. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.js +11 -3
  388. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -1
  389. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.js +240 -0
  390. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.data.js +53 -0
  391. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.js +110 -0
  392. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.page.js +85 -0
  393. package/src/react-extension/components/UserSetting/DisplayUserAccountRecovery/DisplayAccountRecoveryUserSettings.test.stories.js +65 -0
  394. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +3 -4
  395. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +1 -1
  396. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +1 -1
  397. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspace/DisplayUserSettingsWorkspace.js +16 -2
  398. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.js +2 -1
  399. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.js +2 -4
  400. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +18 -12
  401. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.js +2 -4
  402. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +17 -3
  403. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.js +29 -0
  404. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +5 -0
  405. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +2 -4
  406. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +10 -3
  407. package/src/react-extension/contexts/AccountRecoveryUserContext.js +223 -0
  408. package/src/react-extension/contexts/AccountRecoveryUserContext.test.data.js +55 -0
  409. package/src/react-extension/contexts/AccountRecoveryUserContext.test.js +58 -0
  410. package/src/react-extension/contexts/ActionFeedbackContext.test.data.js +28 -0
  411. package/src/react-extension/contexts/AdminAccountRecoveryContext.js +211 -0
  412. package/src/react-extension/contexts/AdminAccountRecoveryContext.test.data.js +66 -0
  413. package/src/react-extension/contexts/AdminAccountRecoveryContext.test.js +229 -0
  414. package/src/react-extension/contexts/AdministrationWorkspaceContext.js +27 -0
  415. package/src/react-extension/contexts/ApiAccountRecoveryContext.js +148 -0
  416. package/src/react-extension/contexts/ApiRecoverContext.js +14 -15
  417. package/src/react-extension/contexts/ApiSetupContext.js +8 -8
  418. package/src/react-extension/contexts/Authentication/AuthenticationAccountRecoveryContext.js +282 -0
  419. package/src/react-extension/contexts/Authentication/AuthenticationAccountRecoveryContext.test.data.js +51 -0
  420. package/src/react-extension/contexts/Authentication/AuthenticationAccountRecoveryContext.test.js +231 -0
  421. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +264 -0
  422. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +79 -0
  423. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +234 -0
  424. package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.js +325 -0
  425. package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.test.data.js +63 -0
  426. package/src/react-extension/contexts/Authentication/AuthenticationRecoverContext.test.js +379 -0
  427. package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +339 -0
  428. package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.test.data.js +63 -0
  429. package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.test.js +364 -0
  430. package/src/react-extension/contexts/DialogContext.test.data.js +27 -0
  431. package/src/react-extension/contexts/ExtAppContext.js +0 -6
  432. package/src/react-extension/contexts/ExtAppContext.test.data.js +50 -0
  433. package/src/react-extension/contexts/NavigationContext.js +26 -2
  434. package/src/react-extension/contexts/ResourceWorkspaceContext.js +9 -2
  435. package/src/react-extension/contexts/ResourceWorkspaceContext.test.page.js +10 -1
  436. package/src/react-extension/contexts/UserSettingsContext.js +1 -2
  437. package/src/react-extension/contexts/UserWorkspaceContext.js +35 -10
  438. package/src/react-extension/contexts/UserWorkspaceContext.test.data.js +13 -0
  439. package/src/react-extension/contexts/UserWorkspaceContext.test.page.js +6 -1
  440. package/src/react-extension/contexts/WorkflowContext.js +89 -0
  441. package/src/react-extension/contexts/WorkflowContext.test.data.js +27 -0
  442. package/src/react-extension/lib/Error/GpgKeyError.js +22 -0
  443. package/src/react-extension/lib/Error/InvalidMasterPasswordError.js +23 -0
  444. package/src/react-extension/lib/Error/ServerKeyChangedError.js +22 -0
  445. package/src/react-extension/test/fixture/Settings/siteSettings.js +4 -0
  446. package/src/react-extension/test/fixture/Settings/userSettings.js +1 -1
  447. package/src/react-extension/test/mock/MockPort.js +2 -2
  448. package/src/react-extension/test/mock/MockStorage.js +0 -2
  449. package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +2 -1
  450. package/src/react-extension/test/mock/components/React/mockSetState.js +22 -0
  451. package/src/react-quickaccess/ExtQuickAccess.js +10 -1
  452. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +1 -1
  453. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +6 -10
  454. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +6 -10
  455. package/src/react-quickaccess/components/LoginPage/LoginPage.js +2 -6
  456. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +1 -0
  457. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.js +17 -3
  458. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +5 -3
  459. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +31 -2
  460. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +1 -1
  461. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +32 -3
  462. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.data.js +6 -3
  463. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +29 -19
  464. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.data.js +2 -0
  465. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +12 -9
  466. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.js +1 -1
  467. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +127 -164
  468. package/src/react-web-integration/lib/Dom/DomUtils.js +23 -1
  469. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +7 -1
  470. package/src/react-web-integration/lib/InForm/InFormManager.js +24 -14
  471. package/src/react-web-integration/lib/InForm/InformManager.test.data.js +80 -2
  472. package/src/react-web-integration/lib/InForm/InformManager.test.js +147 -7
  473. package/src/react-web-integration/lib/InForm/InformManager.test.page.js +16 -2
  474. package/src/shared/lib/Error/EntityValidationError.js +81 -0
  475. package/src/shared/lib/apiClient/apiClient.test.js +1 -1
  476. package/src/shared/services/accountRecovery/ApiAppAccountRecoveryUserService.js +78 -0
  477. package/src/shared/services/accountRecovery/ExtAppAccountRecoveryUserService.js +24 -0
  478. package/test/jest.setup.js +8 -0
  479. package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +0 -97
  480. package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +0 -33
  481. package/src/react-extension/components/Authentication/CheckPassphrase/GenerateKeyOnPassphraseLostSecondaryAction.js +0 -41
  482. package/src/react-extension/components/Authentication/CheckPassphrase/HelpOnPassphraseLostSecondaryAction.js +0 -41
  483. package/src/react-extension/components/Authentication/CheckPassphrase/HelpOnPrivateKeyLostSecondaryAction.js +0 -41
  484. package/src/react-extension/components/Authentication/ImportGpgKey/GenerateKeySecondaryAction.js +0 -40
  485. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.data.js +0 -11
  486. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +0 -34
  487. package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.js +0 -87
  488. package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +0 -33
  489. package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginInProgress.js +0 -49
  490. package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +0 -33
  491. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLogin.js +0 -102
  492. package/src/react-extension/components/Internationalisation/ChangeLocale/ChangeExtAuthenticationLocale.js +0 -63
  493. package/src/react-extension/contexts/AuthenticationContext.js +0 -467
  494. package/src/react-extension/contexts/AuthenticationContext.test.data.js +0 -15
  495. package/src/react-extension/contexts/AuthenticationContext.test.js +0 -252
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) Passbolt SARL (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) Passbolt SARL (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.4.0
13
+ */
14
+ import {MemoryRouter, Route} from "react-router-dom";
15
+ import React from "react";
16
+ import DisplayUsers from "./DisplayUsers";
17
+ import {defaultAppContext, defaultProps, propsWithFirstUserAttentionRequired} from "./DisplayUsers.test.data";
18
+
19
+
20
+ export default {
21
+ title: 'Passbolt/User/DisplayUsers',
22
+ component: DisplayUsers
23
+ };
24
+
25
+ const Template = args =>
26
+ <MemoryRouter initialEntries={['/']}>
27
+ <div className="page">
28
+ <div className="panel">
29
+ <Route component={routerProps => <DisplayUsers {...args} {...routerProps}/>}></Route>
30
+ </div>
31
+ </div>
32
+ </MemoryRouter>;
33
+
34
+ export const Initial = Template.bind({});
35
+ Initial.args = Object.assign(defaultProps(), {context: defaultAppContext()});
36
+
37
+ export const AccountRecoveryPending = Template.bind({});
38
+ AccountRecoveryPending.args = Object.assign(propsWithFirstUserAttentionRequired(), {context: defaultAppContext()});
@@ -23,6 +23,9 @@ import DeleteUserWithConflicts from "../DeleteUser/DeleteUserWithConflicts";
23
23
  import DeleteUser from "../DeleteUser/DeleteUser";
24
24
  import NotifyError from "../../Common/Error/NotifyError/NotifyError";
25
25
  import {Trans, withTranslation} from "react-i18next";
26
+ import {withWorkflow} from "../../../contexts/WorkflowContext";
27
+ import HandleReviewAccountRecoveryRequestWorkflow
28
+ from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
26
29
 
27
30
  class DisplayUsersContextualMenu extends React.Component {
28
31
  /**
@@ -45,6 +48,7 @@ class DisplayUsersContextualMenu extends React.Component {
45
48
  this.handleResendInviteClickEvent = this.handleResendInviteClickEvent.bind(this);
46
49
  this.handleDeleteClickEvent = this.handleDeleteClickEvent.bind(this);
47
50
  this.handleDisableMfaEvent = this.handleDisableMfaEvent.bind(this);
51
+ this.handleReviewRecoveryRequestClickEvent = this.handleReviewRecoveryRequestClickEvent.bind(this);
48
52
  }
49
53
 
50
54
  /**
@@ -109,7 +113,7 @@ class DisplayUsersContextualMenu extends React.Component {
109
113
  */
110
114
  async handlePublicKeyCopy() {
111
115
  const gpgkeyInfo = await this.props.context.port.request('passbolt.keyring.get-public-key-info-by-user', this.user.id);
112
- await this.props.context.port.request("passbolt.clipboard.copy", gpgkeyInfo.key);
116
+ await this.props.context.port.request("passbolt.clipboard.copy", gpgkeyInfo.armored_key);
113
117
  this.props.actionFeedbackContext.displaySuccess(this.translate("The public key has been copied to clipboard"));
114
118
  this.props.hide();
115
119
  }
@@ -180,17 +184,24 @@ class DisplayUsersContextualMenu extends React.Component {
180
184
  this.props.dialogContext.open(DeleteUserWithConflicts);
181
185
  }
182
186
 
187
+ /**
188
+ * Handle review recovery request click event
189
+ */
190
+ handleReviewRecoveryRequestClickEvent() {
191
+ const accountRecoveryRequestId = this.user.pending_account_recovery_request.id;
192
+ this.props.workflowContext.start(HandleReviewAccountRecoveryRequestWorkflow, {accountRecoveryRequestId});
193
+ this.props.hide();
194
+ }
195
+
183
196
  /**
184
197
  * Display error dialog
185
198
  * @param error
186
199
  */
187
200
  handleError(error) {
188
201
  const errorDialogProps = {
189
- title: this.translate("There was an unexpected error..."),
190
- message: error.message
202
+ error: error
191
203
  };
192
- this.props.context.setContext({errorDialogProps});
193
- this.props.dialogContext.open(NotifyError);
204
+ this.props.dialogContext.open(NotifyError, errorDialogProps);
194
205
  }
195
206
 
196
207
  /**
@@ -209,6 +220,13 @@ class DisplayUsersContextualMenu extends React.Component {
209
220
  return this.isLoggedInUserAdmin();
210
221
  }
211
222
 
223
+ /**
224
+ * Check if the user can use the review recovery request capability.
225
+ */
226
+ canIReviewAccountRecoveryRequest() {
227
+ return this.props.context.siteSettings.canIUse("accountRecovery") && this.isLoggedInUserAdmin();
228
+ }
229
+
212
230
  /**
213
231
  * Can delete the user. A user cannot deleted its own account.
214
232
  * @returns {boolean}
@@ -217,6 +235,14 @@ class DisplayUsersContextualMenu extends React.Component {
217
235
  return this.props.context.loggedInUser.id !== this.user.id;
218
236
  }
219
237
 
238
+ /**
239
+ * Has a pending account recovery for the user.
240
+ * @returns {boolean}
241
+ */
242
+ hasPendingAccountRecoveryRequest() {
243
+ return this.user && Boolean(this.user.pending_account_recovery_request);
244
+ }
245
+
220
246
  /**
221
247
  * Can update the resource
222
248
  * @returns {boolean}
@@ -256,12 +282,10 @@ class DisplayUsersContextualMenu extends React.Component {
256
282
  */
257
283
  onResendInviteFailure(error) {
258
284
  const errorDialogProps = {
259
- title: this.translate("There was an unexpected error..."),
260
- message: error.message
285
+ error: error
261
286
  };
262
287
  this.props.hide();
263
- this.props.context.setContext({errorDialogProps});
264
- this.props.dialogContext.open(NotifyError);
288
+ this.props.dialogContext.open(NotifyError, errorDialogProps);
265
289
  }
266
290
 
267
291
  /**
@@ -372,6 +396,17 @@ class DisplayUsersContextualMenu extends React.Component {
372
396
  </div>
373
397
  </li>
374
398
  }
399
+ {this.canIReviewAccountRecoveryRequest() &&
400
+ <li key="review-recovery-user" className="ready">
401
+ <div className="row">
402
+ <div className="main-cell-wrapper">
403
+ <div className="main-cell">
404
+ <a id="review-recovery" onClick={this.handleReviewRecoveryRequestClickEvent} className={`${!this.hasPendingAccountRecoveryRequest() ? "disabled" : ""}`}><span><Trans>Review recovery request</Trans></span></a>
405
+ </div>
406
+ </div>
407
+ </div>
408
+ </li>
409
+ }
375
410
  </ContextualMenuWrapper>
376
411
  );
377
412
  }
@@ -382,11 +417,12 @@ DisplayUsersContextualMenu.propTypes = {
382
417
  hide: PropTypes.func, // Hide the contextual menu
383
418
  left: PropTypes.number, // left position in px of the page
384
419
  top: PropTypes.number, // top position in px of the page
420
+ workflowContext: PropTypes.any, // the workflow context
385
421
  dialogContext: PropTypes.any, // the dialog context
386
422
  user: PropTypes.object, // user selected
387
423
  actionFeedbackContext: PropTypes.any, // The action feedback context
388
424
  t: PropTypes.func, // The translation function
389
425
  };
390
426
 
391
- export default withAppContext(withDialog(withActionFeedback(withTranslation('common')(DisplayUsersContextualMenu))));
427
+ export default withAppContext(withWorkflow(withDialog(withActionFeedback(withTranslation('common')(DisplayUsersContextualMenu)))));
392
428
 
@@ -12,14 +12,14 @@ export function defaultAppContext(appContext) {
12
12
  canIUse: () => true
13
13
  },
14
14
  userSettings: {
15
- getTrustedDomain: () => 'some url'
15
+ getTrustedDomain: () => (new URL(window.location.href)).origin
16
16
  },
17
17
  loggedInUser: {
18
18
  role: {
19
19
  name: 'admin'
20
20
  }
21
21
  },
22
- setContext: jest.fn()
22
+ setContext: () => {}
23
23
  };
24
24
  return Object.assign(defaultAppContext, appContext || {});
25
25
  }
@@ -67,12 +67,15 @@ export function contextWithoutDelete() {
67
67
  export function defaultProps() {
68
68
  return {
69
69
  actionFeedbackContext: {
70
- displaySuccess: jest.fn()
70
+ displaySuccess: () => {}
71
71
  },
72
72
  dialogContext: {
73
- open: jest.fn()
73
+ open: () => {}
74
74
  },
75
- hide: jest.fn(),
75
+ workflowContext: {
76
+ start: jest.fn()
77
+ },
78
+ hide: () => {},
76
79
  user: {
77
80
  "id": "640ebc06-5ec1-5322-a1ae-6120ed2f3a74",
78
81
  "role_id": "a58de6d3-f52c-5080-b79b-a601a647ac85",
@@ -117,7 +120,19 @@ export function defaultProps() {
117
120
  },
118
121
  "__placeholder_last_logged_in__": "",
119
122
  "last_logged_in": "",
120
- is_mfa_enabled: false
123
+ "is_mfa_enabled": false,
124
+ pending_account_recovery_request: {
125
+ id: "54c6278e-f824-5fda-91ff-3e946b18d997"
126
+ },
121
127
  }
122
128
  };
123
129
  }
130
+
131
+ /**
132
+ * Props with temporary pending account recovery user
133
+ */
134
+ export function propsWithUserTemporaryHasPendingAccountRecovery() {
135
+ const props = defaultProps();
136
+ props.user.pending_account_recovery_request = true;
137
+ return props;
138
+ }
@@ -29,6 +29,7 @@ import EditUser from "../EditUser/EditUser";
29
29
  import ConfirmDisableUserMFA from "../ConfirmDisableUserMFA/ConfirmDisableUserMFA";
30
30
  import DeleteUser from "../DeleteUser/DeleteUser";
31
31
  import NotifyError from "../../Common/Error/NotifyError/NotifyError";
32
+ import HandleReviewAccountRecoveryWorkflow from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
32
33
 
33
34
  beforeEach(() => {
34
35
  jest.resetModules();
@@ -38,8 +39,10 @@ describe("Display Users Contextual Menu", () => {
38
39
  let page; // The page to test against
39
40
  const context = defaultAppContext(); // The applicative context
40
41
  const props = defaultProps(); // The props to pass
42
+ props.hide = jest.fn();
41
43
 
42
44
  it("As LU I should copy an user permalink", async() => {
45
+ expect.assertions(3);
43
46
  page = new DisplayUsersContextualMenuPage(context, props);
44
47
  await waitFor(() => {});
45
48
 
@@ -47,17 +50,18 @@ describe("Display Users Contextual Menu", () => {
47
50
  jest.spyOn(props.actionFeedbackContext, 'displaySuccess').mockImplementationOnce(() => {});
48
51
  jest.spyOn(props, 'hide').mockImplementationOnce(() => {});
49
52
  await page.copyPermalink();
50
- expect(context.port.request).toHaveBeenCalledWith("passbolt.clipboard.copy", "some url/app/users/view/640ebc06-5ec1-5322-a1ae-6120ed2f3a74");
53
+ expect(context.port.request).toHaveBeenCalledWith("passbolt.clipboard.copy", `${context.userSettings.getTrustedDomain()}/app/users/view/640ebc06-5ec1-5322-a1ae-6120ed2f3a74`);
51
54
  expect(props.actionFeedbackContext.displaySuccess).toHaveBeenCalled();
52
55
  expect(props.hide).toHaveBeenCalled();
53
56
  });
54
57
 
55
58
  it("As LU I should copy an user public key", async() => {
59
+ expect.assertions(3);
56
60
  page = new DisplayUsersContextualMenuPage(context, props);
57
61
  await waitFor(() => {});
58
62
 
59
63
  const gpgKey = "some key";
60
- jest.spyOn(context.port, 'request').mockImplementationOnce(() => ({key: gpgKey}));
64
+ jest.spyOn(context.port, 'request').mockImplementationOnce(() => ({armored_key: gpgKey}));
61
65
  jest.spyOn(props.actionFeedbackContext, 'displaySuccess').mockImplementationOnce(() => {});
62
66
  jest.spyOn(props, 'hide').mockImplementationOnce(() => {});
63
67
  await page.copyPublicKey();
@@ -67,6 +71,7 @@ describe("Display Users Contextual Menu", () => {
67
71
  });
68
72
 
69
73
  it("As LU I should copy an user email address", async() => {
74
+ expect.assertions(3);
70
75
  page = new DisplayUsersContextualMenuPage(context, props);
71
76
  await waitFor(() => {});
72
77
 
@@ -80,12 +85,14 @@ describe("Display Users Contextual Menu", () => {
80
85
  });
81
86
 
82
87
  it("As LU I should not edit an user if I don't have the capability to do it", async() => {
88
+ expect.assertions(1);
83
89
  page = new DisplayUsersContextualMenuPage(contextWithoutEdit(), props);
84
90
  await waitFor(() => {});
85
91
  expect(page.canEdit).toBeFalsy();
86
92
  });
87
93
 
88
94
  it("As LU I should edit an user if I have the capability to do it", async() => {
95
+ expect.assertions(4);
89
96
  page = new DisplayUsersContextualMenuPage(context, props);
90
97
  await waitFor(() => {});
91
98
 
@@ -104,12 +111,14 @@ describe("Display Users Contextual Menu", () => {
104
111
  });
105
112
 
106
113
  it("As LU I should not resend an invite to an user if I don't have the capability to do it", async() => {
114
+ expect.assertions(1);
107
115
  page = new DisplayUsersContextualMenuPage(contextWithoutEdit(), props);
108
116
  await waitFor(() => {});
109
117
  expect(page.canResendInvite).toBeFalsy();
110
118
  });
111
119
 
112
120
  it("As LU I should resend an invite to an user if I have the capability to do it", async() => {
121
+ expect.assertions(2);
113
122
  page = new DisplayUsersContextualMenuPage(context, props);
114
123
  await waitFor(() => {});
115
124
 
@@ -123,6 +132,7 @@ describe("Display Users Contextual Menu", () => {
123
132
  });
124
133
 
125
134
  it("As LU I should not disable an user MFA if I don't have the capability to do it", async() => {
135
+ expect.assertions(1);
126
136
  page = new DisplayUsersContextualMenuPage(contextWithoutDisableMFA(), props);
127
137
  await waitFor(() => {});
128
138
 
@@ -130,6 +140,7 @@ describe("Display Users Contextual Menu", () => {
130
140
  });
131
141
 
132
142
  it("As LU I should disable an user MFA if I have the capability to do it", async() => {
143
+ expect.assertions(3);
133
144
  page = new DisplayUsersContextualMenuPage(context, props);
134
145
  await waitFor(() => {});
135
146
 
@@ -145,12 +156,14 @@ describe("Display Users Contextual Menu", () => {
145
156
  });
146
157
 
147
158
  it("As LU I should not delete an user if I don't have the capability to do it", async() => {
159
+ expect.assertions(1);
148
160
  page = new DisplayUsersContextualMenuPage(contextWithoutDelete(), props);
149
161
  await waitFor(() => {});
150
162
  expect(page.canDelete).toBeFalsy();
151
163
  });
152
164
 
153
165
  it("As LU I should delete an user if I have the capability to do it", async() => {
166
+ expect.assertions(5);
154
167
  page = new DisplayUsersContextualMenuPage(context, props);
155
168
  await waitFor(() => {});
156
169
 
@@ -170,21 +183,22 @@ describe("Display Users Contextual Menu", () => {
170
183
  });
171
184
 
172
185
  it('As LU I should see an error message if the delete went wrong', async() => {
186
+ expect.assertions(2);
173
187
  page = new DisplayUsersContextualMenuPage(context, props);
174
188
  await waitFor(() => {});
175
189
 
176
190
  const error = {message: 'some error'};
177
- const errorDialogProps = {title: "There was an unexpected error...", message: error.message};
191
+ const errorDialogProps = {error: error};
178
192
  jest.spyOn(context.port, 'request').mockImplementationOnce(() => Promise.reject({message: error.message}));
179
193
 
180
194
  await page.delete();
181
195
 
182
196
  expect(context.port.request).toHaveBeenLastCalledWith("passbolt.users.delete-dry-run", "640ebc06-5ec1-5322-a1ae-6120ed2f3a74");
183
- expect(context.setContext).toHaveBeenLastCalledWith({errorDialogProps});
184
- expect(props.dialogContext.open).toHaveBeenCalledWith(NotifyError);
197
+ expect(props.dialogContext.open).toHaveBeenCalledWith(NotifyError, errorDialogProps);
185
198
  });
186
199
 
187
200
  it('As LU I should see an delete dry error message if the delete request has a delete dry error', async() => {
201
+ expect.assertions(2);
188
202
  page = new DisplayUsersContextualMenuPage(context, props);
189
203
  await waitFor(() => {});
190
204
 
@@ -196,4 +210,23 @@ describe("Display Users Contextual Menu", () => {
196
210
  expect(context.port.request).toHaveBeenLastCalledWith("passbolt.users.delete-dry-run", "640ebc06-5ec1-5322-a1ae-6120ed2f3a74");
197
211
  expect(props.dialogContext.open).toHaveBeenCalled();
198
212
  });
213
+
214
+ it("As LU I should review an account recovery of a user if I have the capability to do it", async() => {
215
+ expect.assertions(3);
216
+ page = new DisplayUsersContextualMenuPage(context, props);
217
+ await waitFor(() => {});
218
+
219
+ // The logged user is admin
220
+ expect(page.canEdit).toBeTruthy();
221
+
222
+ jest.spyOn(context, 'setContext').mockImplementationOnce(() => {});
223
+ jest.spyOn(props.dialogContext, 'open').mockImplementationOnce(() => {});
224
+ jest.spyOn(props, 'hide').mockImplementationOnce(() => {});
225
+
226
+ await page.reviewRecovery();
227
+
228
+ const accountRecoveryRequestId = props.user.pending_account_recovery_request.id;
229
+ expect(props.workflowContext.start).toHaveBeenCalledWith(HandleReviewAccountRecoveryWorkflow, {accountRecoveryRequestId});
230
+ expect(props.hide).toHaveBeenCalled();
231
+ });
199
232
  });
@@ -139,4 +139,14 @@ export default class DisplayUsersContextualMenuPage {
139
139
  fireEvent.click(element, leftClick);
140
140
  await waitFor(() => {});
141
141
  }
142
+
143
+ /**
144
+ * Call to review an account recovery of a user
145
+ */
146
+ async reviewRecovery() {
147
+ const element = this._page.container.querySelectorAll('li a')[7];
148
+ const leftClick = {button: 0};
149
+ fireEvent.click(element, leftClick);
150
+ await waitFor(() => {});
151
+ }
142
152
  }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.6.0
13
+ */
14
+
15
+ import {MemoryRouter, Route} from "react-router-dom";
16
+ import React from "react";
17
+ import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
18
+ import DisplayUsersContextualMenu from "./DisplayUsersContextualMenu";
19
+ import {
20
+ defaultAppContext,
21
+ defaultProps,
22
+ propsWithUserTemporaryHasPendingAccountRecovery
23
+ } from "./DisplayUsersContextualMenu.test.data";
24
+
25
+
26
+ export default {
27
+ title: 'Passbolt/User/DisplayUsersContextualMenu',
28
+ component: DisplayUsersContextualMenu
29
+ };
30
+
31
+
32
+ const Template = args =>
33
+ <MockTranslationProvider>
34
+ <MemoryRouter initialEntries={['/']}>
35
+ <Route component={routerProps => <DisplayUsersContextualMenu {...args} {...routerProps}/>}></Route>
36
+ </MemoryRouter>
37
+ </MockTranslationProvider>;
38
+
39
+ export const AdminWithoutReviewRecovery = Template.bind({});
40
+ AdminWithoutReviewRecovery.args = Object.assign(defaultProps(), {context: defaultAppContext()});
41
+
42
+ export const AdminWithReviewRecovery = Template.bind({});
43
+ AdminWithReviewRecovery.args = Object.assign(propsWithUserTemporaryHasPendingAccountRecovery(), {context: defaultAppContext()});
44
+
45
+ export const User = Template.bind({});
46
+ const userRole = {
47
+ loggedInUser: {
48
+ role: {
49
+ name: 'user'
50
+ }
51
+ },
52
+ };
53
+ User.args = Object.assign(defaultProps(), {context: defaultAppContext(userRole)});
@@ -213,11 +213,9 @@ class EditUser extends Component {
213
213
  */
214
214
  handleError(error) {
215
215
  const errorDialogProps = {
216
- title: this.translate("There was an unexpected error..."),
217
- message: error.message
216
+ error: error
218
217
  };
219
- this.props.context.setContext({errorDialogProps});
220
- this.props.dialogContext.open(NotifyError);
218
+ this.props.dialogContext.open(NotifyError, errorDialogProps);
221
219
  }
222
220
 
223
221
  /**
@@ -3,6 +3,7 @@ import React from "react";
3
3
  import AppContext from "../../../contexts/AppContext";
4
4
  import PropTypes from "prop-types";
5
5
  import EditUser from "./EditUser";
6
+ import MockPort from "../../../test/mock/MockPort";
6
7
 
7
8
 
8
9
  export default {
@@ -34,7 +35,9 @@ const context = {
34
35
  ],
35
36
  editUserDialogProps: {
36
37
  id: "8e3874ae-4b40-590b-968a-418f704b9d9a"
37
- }
38
+ },
39
+ setContext: () => {},
40
+ port: new MockPort()
38
41
  };
39
42
 
40
43
 
@@ -50,6 +53,10 @@ Template.propTypes = {
50
53
  };
51
54
 
52
55
  export const Initial = Template.bind({});
56
+ Initial.args = {
57
+ context: context,
58
+ onClose: () => {}
59
+ };
53
60
  Initial.parameters = {
54
61
  css: "api_main"
55
62
  };
@@ -102,11 +102,9 @@ class DisplayGroupContextualMenu extends React.Component {
102
102
  */
103
103
  handleError(error) {
104
104
  const errorDialogProps = {
105
- title: this.translate("There was an unexpected error..."),
106
- message: error.message
105
+ error: error
107
106
  };
108
- this.props.context.setContext({errorDialogProps});
109
- this.props.dialogContext.open(NotifyError);
107
+ this.props.dialogContext.open(NotifyError, errorDialogProps);
110
108
  }
111
109
 
112
110
 
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.6.0
13
+ */
14
+ import React from "react";
15
+ import {withUserWorkspace} from "../../../contexts/UserWorkspaceContext";
16
+ import PropTypes from "prop-types";
17
+ import {withAppContext} from "../../../contexts/AppContext";
18
+ import {withRouter} from "react-router-dom";
19
+ import {withTranslation} from "react-i18next";
20
+ import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
21
+ import HandleReviewAccountRecoveryRequestWorkflow
22
+ from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
23
+ import {withWorkflow} from "../../../contexts/WorkflowContext";
24
+
25
+ /**
26
+ * Handle the review account recovery request route.
27
+ * - Select the user in the grid.
28
+ * -Display the review account recovery request dialog.
29
+ */
30
+ class HandleReviewAccountRecoveryRequestRoute extends React.Component {
31
+ /**
32
+ * ComponentDidMount
33
+ * Invoked immediately after component is inserted into the tree
34
+ * @return {void}
35
+ */
36
+ componentDidMount() {
37
+ this.handleRoute();
38
+ }
39
+
40
+ /**
41
+ * Handle the review account recovery request route.
42
+ * @returns {Promise<void>}
43
+ */
44
+ async handleRoute() {
45
+ const accountRecoveryRequestId = this.props.match.params.accountRecoveryRequestId;
46
+ let accountRecoveryRequest;
47
+
48
+ try {
49
+ accountRecoveryRequest = await this.props.context.port.request("passbolt.account-recovery.get-request", accountRecoveryRequestId);
50
+ } catch (error) {
51
+ this.handleAccountRecoveryRequestNotFound();
52
+ return;
53
+ }
54
+
55
+ const user = this.props.context.users.find(user => user.id === accountRecoveryRequest.user_id);
56
+ if (!user) {
57
+ this.handleAccountRecoveryRequestUserNotFound();
58
+ return;
59
+ }
60
+
61
+ await this.props.userWorkspaceContext.onUserSelected.single(user);
62
+ this.props.workflowContext.start(HandleReviewAccountRecoveryRequestWorkflow, {accountRecoveryRequest});
63
+ }
64
+
65
+ /**
66
+ * The account recovery request cannot be found.
67
+ */
68
+ handleAccountRecoveryRequestNotFound() {
69
+ this.props.actionFeedbackContext.displayError(this.props.t("The account recovery request does not exist."));
70
+ }
71
+
72
+ /**
73
+ * The user who created the account recovery request cannot be found.
74
+ */
75
+ handleAccountRecoveryRequestUserNotFound() {
76
+ this.props.actionFeedbackContext.displayError(this.props.t("The user who requested an account recovery does not exist."));
77
+ }
78
+
79
+ /**
80
+ * Render the component
81
+ * @returns {JSX}
82
+ */
83
+ render() {
84
+ return <></>;
85
+ }
86
+ }
87
+
88
+ HandleReviewAccountRecoveryRequestRoute.propTypes = {
89
+ actionFeedbackContext: PropTypes.any, // The action feedback context
90
+ context: PropTypes.any, // The application context
91
+ history: PropTypes.object, // The router match helper
92
+ match: PropTypes.object, // The router match helper
93
+ t: PropTypes.func, // The translation function
94
+ userWorkspaceContext: PropTypes.any, // The user workspace context
95
+ workflowContext: PropTypes.any, // The workflow context
96
+ };
97
+
98
+ export default withAppContext(withUserWorkspace(withActionFeedback(withWorkflow(withRouter(withTranslation("common")(HandleReviewAccountRecoveryRequestRoute))))));
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.6.0
13
+ */
14
+
15
+ import {v4 as uuidv4} from "uuid";
16
+ import {defaultAppContext} from "../../../contexts/ExtAppContext.test.data";
17
+ import {defaultActionFeedbackContextContext} from "../../../contexts/ActionFeedbackContext.test.data";
18
+ import {defaultUserWorkspaceContext} from "../../../contexts/UserWorkspaceContext.test.data";
19
+
20
+ /**
21
+ * Default props
22
+ * @param {Object} [props] Props to override
23
+ * @returns {Object}
24
+ */
25
+ export function defaultProps(props = {}) {
26
+ const users = [{id: uuidv4()}];
27
+ const defaultProps = {
28
+ actionFeedbackContext: defaultActionFeedbackContextContext(props?.actionFeedbackContext),
29
+ context: defaultAppContext({users, ...props?.context}),
30
+ match: {
31
+ params: {
32
+ accountRecoveryRequestId: uuidv4()
33
+ }
34
+ },
35
+ userWorkspaceContext: defaultUserWorkspaceContext()
36
+ };
37
+ delete props.context; // treated in default props.
38
+ delete props.actionFeedbackContext; // treated in default props.
39
+ return Object.assign(defaultProps, props);
40
+ }
41
+
42
+ /**
43
+ * Get a pending account recovery request.
44
+ * @param {Object} [data] Properties to override.
45
+ * @returns {Object}
46
+ */
47
+ export function pendingAccountRecoveryRequest(data = {}) {
48
+ const _default = {
49
+ "id": uuidv4(),
50
+ "user_id": uuidv4(),
51
+ "status": "pending",
52
+ "created": "2020-05-04T20:31:45+00:00",
53
+ };
54
+
55
+ return Object.assign(_default, data);
56
+ }