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
@@ -1,6 +1,5 @@
1
1
  import {MemoryRouter, Route} from "react-router-dom";
2
2
  import React from "react";
3
- import AppContext from "../../../contexts/AppContext";
4
3
  import PropTypes from "prop-types";
5
4
  import DisplayUserBadgeMenu from "./DisplayUserBadgeMenu";
6
5
 
@@ -10,15 +9,10 @@ export default {
10
9
  component: DisplayUserBadgeMenu
11
10
  };
12
11
 
13
- const context = {};
14
-
15
-
16
12
  const Template = args =>
17
- <AppContext.Provider value={context}>
18
- <MemoryRouter initialEntries={['/']}>
19
- <Route component={routerProps => <DisplayUserBadgeMenu {...args} {...routerProps}/>}></Route>
20
- </MemoryRouter>
21
- </AppContext.Provider>;
13
+ <MemoryRouter initialEntries={['/']}>
14
+ <Route component={routerProps => <DisplayUserBadgeMenu {...args} {...routerProps}/>}></Route>
15
+ </MemoryRouter>;
22
16
 
23
17
  Template.propTypes = {
24
18
  context: PropTypes.object,
@@ -26,6 +20,7 @@ Template.propTypes = {
26
20
 
27
21
  export const Initial = Template.bind({});
28
22
  Initial.args = {
23
+ baseUrl: (new URL(window.location.href)).origin,
29
24
  user: {
30
25
  "id": "8e3874ae-4b40-590b-968a-418f704b9d9a",
31
26
  "role_id": "a58de6d3-f52c-5080-b79b-a601a647ac85",
@@ -63,5 +58,8 @@ Initial.args = {
63
58
  },
64
59
  "__placeholder_last_logged_in__": "",
65
60
  "last_logged_in": ""
61
+ },
62
+ context: {
63
+ onLogoutRequested: () => {}
66
64
  }
67
65
  };
@@ -16,7 +16,7 @@
16
16
  import React from 'react';
17
17
  import DisplayUsers from "../DisplayUsers/DisplayUsers";
18
18
  import {withUserWorkspace} from "../../../contexts/UserWorkspaceContext";
19
- import {withRouter} from "react-router-dom";
19
+ import {Route, withRouter} from "react-router-dom";
20
20
  import PropTypes from "prop-types";
21
21
  import DisplayUserDetails from "../../UserDetails/DisplayUserDetails/DisplayUserDetails";
22
22
  import DisplayUserWorkspaceActions from "../DisplayUserWorkspaceActions/DisplayUserWorkspaceActions";
@@ -29,6 +29,7 @@ import FilterUsersByText from "../FilterUsersByText/FilterUsersByText";
29
29
  import DisplayUserGroupDetails from "../../UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails";
30
30
  import DisplayUserWorkspaceMainActions from "../DisplayUserWorkspaceMainActions/DisplayUserWorkspaceMainActions";
31
31
  import FilterUsersByBreadcrumb from "../FilterUsersByBreadcrumb/FilterUsersByBreadcrumb";
32
+ import HandleReviewAccountRecoveryRequestRoute from "../HandleReviewAccountRecoveryRequestRoute/HandleReviewAccountRecoveryRequestRoute";
32
33
 
33
34
  /**
34
35
  * This component is a container for all the user workspace features
@@ -57,6 +58,9 @@ class DisplayUserWorkspace extends React.Component {
57
58
  render() {
58
59
  return (
59
60
  <div>
61
+ {this.props.context.users &&
62
+ <Route path="/app/account-recovery/requests/review/:accountRecoveryRequestId" component={HandleReviewAccountRecoveryRequestRoute}/>
63
+ }
60
64
  <div className="header second">
61
65
  <Logo/>
62
66
  <FilterUsersByText/>
@@ -1,18 +1,27 @@
1
- import MockPort from "../../../test/mock/MockPort";
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 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) 2020 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 2.11.0
13
+ */
14
+
15
+ import {defaultAppContext} from "../../../contexts/ExtAppContext.test.data";
2
16
 
3
17
  /**
4
18
  * Returns the default app context for the unit test
5
19
  * @param appContext An existing app context
6
20
  * @returns {any | ({userSettings: UserSettings, siteSettings: SiteSettings, port: MockPort} & {})}
7
21
  */
8
- export function defaultAppContext(appContext) {
9
- const defaultAppContext = {
10
- port: new MockPort(),
11
- userSettings: {
12
- getTrustedDomain: () => 'some url'
13
- },
14
- };
15
- return Object.assign(defaultAppContext, appContext || {});
22
+ export function defaultContext(data = {}) {
23
+ const defaultData = defaultAppContext();
24
+ return Object.assign(defaultData, data);
16
25
  }
17
26
 
18
27
  /**
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import React from 'react';
19
19
  import {
20
- defaultAppContext,
20
+ defaultContext,
21
21
  propsWithGroupDetails,
22
22
  propsWithoutLock,
23
23
  propsWithUserDetails
@@ -42,7 +42,7 @@ beforeEach(() => {
42
42
 
43
43
  describe("Display User Workspace", () => {
44
44
  let page; // The page to test against
45
- const context = defaultAppContext(); // The applicative context
45
+ const context = defaultContext(); // The applicative context
46
46
 
47
47
  it('As LU, I should see the user details area if the area is locked and the details is on an user', async() => {
48
48
  page = new DisplayUserWorkspacePage(context, propsWithUserDetails());
@@ -25,6 +25,9 @@ import NotifyError from "../../Common/Error/NotifyError/NotifyError";
25
25
  import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
26
26
  import ConfirmDisableUserMFA from "../ConfirmDisableUserMFA/ConfirmDisableUserMFA";
27
27
  import {Trans, withTranslation} from "react-i18next";
28
+ import HandleReviewAccountRecoveryRequestWorkflow
29
+ from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
30
+ import {withWorkflow} from "../../../contexts/WorkflowContext";
28
31
 
29
32
  /**
30
33
  * This component is a container of multiple actions applicable on user
@@ -62,6 +65,7 @@ class DisplayUserWorkspaceActions extends React.Component {
62
65
  this.handleDisableMfaEvent = this.handleDisableMfaEvent.bind(this);
63
66
  this.handleCopyPermalinkEvent = this.handleCopyPermalinkEvent.bind(this);
64
67
  this.handleResendInviteClickEvent = this.handleResendInviteClickEvent.bind(this);
68
+ this.handleReviewRecoveryRequestEvent = this.handleReviewRecoveryRequestEvent.bind(this);
65
69
  }
66
70
 
67
71
  /**
@@ -179,7 +183,6 @@ class DisplayUserWorkspaceActions extends React.Component {
179
183
  */
180
184
  handleError(error) {
181
185
  const errorDialogProps = {
182
- title: this.translate("There was an unexpected error..."),
183
186
  message: error.message
184
187
  };
185
188
  this.props.context.setContext({errorDialogProps});
@@ -212,6 +215,15 @@ class DisplayUserWorkspaceActions extends React.Component {
212
215
  this.closeMoreMenu();
213
216
  }
214
217
 
218
+ /**
219
+ * Handle review recovery request click event
220
+ */
221
+ handleReviewRecoveryRequestEvent() {
222
+ this.closeMoreMenu();
223
+ const accountRecoveryRequestId = this.selectedUser.pending_account_recovery_request.id;
224
+ this.props.workflowContext.start(HandleReviewAccountRecoveryRequestWorkflow, {accountRecoveryRequestId});
225
+ }
226
+
215
227
  /**
216
228
  * Get selected user
217
229
  * @returns {user|null}
@@ -262,6 +274,21 @@ class DisplayUserWorkspaceActions extends React.Component {
262
274
  return this.selectedUser && !this.selectedUser.active;
263
275
  }
264
276
 
277
+ /**
278
+ * Check if the user can use the review recovery request capability.
279
+ */
280
+ canIReviewAccountRecoveryRequest() {
281
+ return this.props.context.siteSettings.canIUse("accountRecovery") && this.isLoggedInUserAdmin();
282
+ }
283
+
284
+ /**
285
+ * Has a pending account recovery for the user.
286
+ * @returns {boolean}
287
+ */
288
+ hasPendingAccountRecoveryRequest() {
289
+ return this.selectedUser && Boolean(this.selectedUser.pending_account_recovery_request);
290
+ }
291
+
265
292
  /**
266
293
  * Check if the users workspace has one user selected.
267
294
  * @return {boolean}
@@ -344,12 +371,10 @@ class DisplayUserWorkspaceActions extends React.Component {
344
371
  */
345
372
  onResendInviteFailure(error) {
346
373
  const errorDialogProps = {
347
- title: "There was an unexpected error...",
348
- message: error.message
374
+ error: error
349
375
  };
350
376
  this.toggleMoreMenu();
351
- this.props.context.setContext({errorDialogProps});
352
- this.props.dialogContext.open(NotifyError);
377
+ this.props.dialogContext.open(NotifyError, errorDialogProps);
353
378
  }
354
379
 
355
380
  /**
@@ -433,6 +458,22 @@ class DisplayUserWorkspaceActions extends React.Component {
433
458
  </div>
434
459
  </li>
435
460
  }
461
+ {this.canIReviewAccountRecoveryRequest() &&
462
+ <li key="review-recovery-user" className="ready">
463
+ <div className="row">
464
+ <div className="main-cell-wrapper">
465
+ <div className="main-cell">
466
+ <a
467
+ id="review-recovery"
468
+ onClick={this.handleReviewRecoveryRequestEvent}
469
+ className={`${!this.hasPendingAccountRecoveryRequest() ? "disabled" : ""}`}>
470
+ <span><Trans>Review recovery request</Trans></span>
471
+ </a>
472
+ </div>
473
+ </div>
474
+ </div>
475
+ </li>
476
+ }
436
477
  </ul>
437
478
  </div>
438
479
  </ul>
@@ -458,9 +499,10 @@ class DisplayUserWorkspaceActions extends React.Component {
458
499
  DisplayUserWorkspaceActions.propTypes = {
459
500
  context: PropTypes.any, // The application context
460
501
  userWorkspaceContext: PropTypes.any, // the user workspace context
502
+ workflowContext: PropTypes.any, // the workflow context
461
503
  dialogContext: PropTypes.any, // the dialog context
462
504
  actionFeedbackContext: PropTypes.object, // the action feeedback context
463
505
  t: PropTypes.func, // The translation function
464
506
  };
465
507
 
466
- export default withAppContext(withActionFeedback(withDialog(withUserWorkspace(withTranslation('common')(DisplayUserWorkspaceActions)))));
508
+ export default withAppContext(withActionFeedback(withWorkflow(withDialog(withUserWorkspace(withTranslation('common')(DisplayUserWorkspaceActions))))));
@@ -11,6 +11,9 @@ export function defaultAppContext(appContext) {
11
11
  siteSettings: {
12
12
  canIUse: () => true
13
13
  },
14
+ userSettings: {
15
+ getTrustedDomain: () => 'https://passbolt.local'
16
+ },
14
17
  loggedInUser: {
15
18
  id: "220ebc06-5ec1-5322-a1ae-6120ed2f3a74",
16
19
  role: {
@@ -76,7 +79,10 @@ export function propsWithSelectedUser() {
76
79
  },
77
80
  "__placeholder_last_logged_in__": "",
78
81
  "last_logged_in": "",
79
- is_mfa_enabled: true
82
+ is_mfa_enabled: true,
83
+ pending_account_recovery_request: {
84
+ id: "54c6278e-f824-5fda-91ff-3e946b18d997"
85
+ },
80
86
  }
81
87
  ]
82
88
  }
@@ -136,3 +142,12 @@ export function propsWithSelectedMFADisabledUser() {
136
142
  props.userWorkspaceContext.selectedUsers[0].is_mfa_enabled = false;
137
143
  return props;
138
144
  }
145
+
146
+ /**
147
+ * Props with temporary pending account recovery selected user
148
+ */
149
+ export function propsWithSelectedUserTemporaryHasPendingAccountRecovery() {
150
+ const props = propsWithSelectedUser();
151
+ props.userWorkspaceContext.selectedUsers[0].pending_account_recovery_request = true;
152
+ return props;
153
+ }
@@ -132,6 +132,20 @@ describe("Display User Workspace Actions", () => {
132
132
  await page.lockDetails();
133
133
  expect(props.userWorkspaceContext.onDetailsLocked).toHaveBeenCalled();
134
134
  });
135
+
136
+ it('As AD I should not disable a review account recovery request if a user is selected', async() => {
137
+ page = new DisplayUserWorkspaceActionsPage(context, propsWithSelectedUser());
138
+ await waitFor(() => {});
139
+ await page.moreActions();
140
+ expect(page.canReviewAccountRecovery).toBeTruthy();
141
+ });
142
+
143
+ it('As AD I should not disable a review account recovery request if no user is selected', async() => {
144
+ page = new DisplayUserWorkspaceActionsPage(context, propsWithoutSelectedUser());
145
+ await waitFor(() => {});
146
+ await page.moreActions();
147
+ expect(page.canReviewAccountRecovery).toBeFalsy();
148
+ });
135
149
  });
136
150
 
137
151
 
@@ -82,6 +82,14 @@ export default class DisplayUserWorkspaceActionsPage {
82
82
  return Boolean(element) && !element.classList.contains('disabled');
83
83
  }
84
84
 
85
+ /**
86
+ * Returns true if one can review account recovery of a user
87
+ */
88
+ get canReviewAccountRecovery() {
89
+ const element = this._page.container.querySelectorAll('li a')[5];
90
+ return Boolean(element) && !element.classList.contains('disabled');
91
+ }
92
+
85
93
  /**
86
94
  * Asks for more actions through the dropdown
87
95
  */
@@ -0,0 +1,55 @@
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 DisplayUserWorkspaceActions from "./DisplayUserWorkspaceActions";
19
+ import {
20
+ defaultAppContext,
21
+ propsWithSelectedUser,
22
+ propsWithSelectedUserTemporaryHasPendingAccountRecovery
23
+ } from "./DisplayUserWorkspaceActions.test.data";
24
+
25
+
26
+ export default {
27
+ title: 'Passbolt/User/DisplayUserWorkspaceActions',
28
+ component: DisplayUserWorkspaceActions
29
+ };
30
+
31
+
32
+ const Template = args =>
33
+ <MockTranslationProvider>
34
+ <div className="header third">
35
+ <MemoryRouter initialEntries={['/']}>
36
+ <Route component={routerProps => <DisplayUserWorkspaceActions {...args} {...routerProps}/>}></Route>
37
+ </MemoryRouter>
38
+ </div>
39
+ </MockTranslationProvider>;
40
+
41
+ export const AdminWithoutReviewRecovery = Template.bind({});
42
+ AdminWithoutReviewRecovery.args = Object.assign(propsWithSelectedUser(), {context: defaultAppContext()});
43
+
44
+ export const AdminWithReviewRecovery = Template.bind({});
45
+ AdminWithReviewRecovery.args = Object.assign(propsWithSelectedUserTemporaryHasPendingAccountRecovery(), {context: defaultAppContext()});
46
+
47
+ export const User = Template.bind({});
48
+ const userRole = {
49
+ loggedInUser: {
50
+ role: {
51
+ name: 'user'
52
+ }
53
+ },
54
+ };
55
+ User.args = Object.assign(propsWithSelectedUser, {context: defaultAppContext(userRole)});
@@ -247,6 +247,14 @@ class DisplayUsers extends React.Component {
247
247
  return this.props.context.loggedInUser && this.props.context.loggedInUser.role.name === 'admin';
248
248
  }
249
249
 
250
+ /**
251
+ * Returns true if the accountRecovery feature is enabled and if the logged in user is an admin.
252
+ * @returns {boolean}
253
+ */
254
+ hasAttentionRequiredColumn() {
255
+ return this.props.context.siteSettings.canIUse("accountRecovery") && this.isLoggedInUserAdmin();
256
+ }
257
+
250
258
  /**
251
259
  * Format date in time ago
252
260
  * @param {string} date The date to format
@@ -266,6 +274,7 @@ class DisplayUsers extends React.Component {
266
274
  const roleName = this.props.userWorkspaceContext.getTranslatedRoleName(user.role_id);
267
275
  const mfa = user.is_mfa_enabled ? this.translate("Enabled") : this.translate("Disabled");
268
276
  const rowClassName = `${isSelected ? "selected" : ""} ${user.active ? "" : "inactive"}`;
277
+ const hasUserAttentionRequired = Boolean(user.pending_account_recovery_request);
269
278
 
270
279
  return (
271
280
  <tr
@@ -285,6 +294,13 @@ class DisplayUsers extends React.Component {
285
294
  </div>
286
295
  </div>
287
296
  </td>
297
+ {this.hasAttentionRequiredColumn() &&
298
+ <td className="s-cell attention-required">
299
+ {hasUserAttentionRequired &&
300
+ <Icon name="exclamation" baseline={true}/>
301
+ }
302
+ </td>
303
+ }
288
304
  <td className="cell-name l-cell">
289
305
  <div title={`${user.profile.first_name} ${user.profile.last_name}`}>
290
306
  {`${user.profile.first_name} ${user.profile.last_name}`}
@@ -368,6 +384,25 @@ class DisplayUsers extends React.Component {
368
384
  </label>
369
385
  </div>
370
386
  </th>
387
+ {this.hasAttentionRequiredColumn() &&
388
+ <th className="s-cell attention-required">
389
+ <a onClick={ev => this.handleSortByColumnClick(ev, "attentionRequired")}>
390
+ <div className="cell-header">
391
+ <span className="cell-header-text">
392
+ <Icon name="exclamation" baseline={true}/>
393
+ </span>
394
+ <span className="cell-header-icon-sort">
395
+ {this.isSortedColumn("attentionRequired") && this.isSortedAsc() &&
396
+ <Icon baseline={true} name="caret-up"/>
397
+ }
398
+ {this.isSortedColumn("attentionRequired") && !this.isSortedAsc() &&
399
+ <Icon baseline={true} name="caret-down"/>
400
+ }
401
+ </span>
402
+ </div>
403
+ </a>
404
+ </th>
405
+ }
371
406
  <th className="cell-name l-cell sortable">
372
407
  <a onClick={ev => this.handleSortByColumnClick(ev, "name")}>
373
408
  <div className="cell-header">
@@ -1,24 +1,34 @@
1
- import MockPort from "../../../test/mock/MockPort";
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 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) 2020 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 2.11.0
13
+ */
14
+
2
15
  import {UserWorkspaceFilterTypes} from "../../../contexts/UserWorkspaceContext";
16
+ import {defaultAppContext} from "../../../contexts/ExtAppContext.test.data";
3
17
 
4
18
  /**
5
19
  * Returns the default app context for the unit test
6
20
  * @param appContext An existing app context
7
21
  * @returns {any | ({userSettings: UserSettings, siteSettings: SiteSettings, port: MockPort} & {})}
8
22
  */
9
- export function defaultAppContext(appContext) {
10
- const defaultAppContext = {
11
- port: new MockPort(),
12
- siteSettings: {
13
- getServerTimezone: () => ''
14
- },
23
+ export function defaultContext(data = {}) {
24
+ const defaultData = defaultAppContext({
15
25
  loggedInUser: {
16
26
  role: {
17
27
  name: 'admin'
18
28
  }
19
29
  }
20
- };
21
- return Object.assign(defaultAppContext, appContext || {});
30
+ });
31
+ return Object.assign(defaultData, data);
22
32
  }
23
33
 
24
34
 
@@ -29,7 +39,7 @@ export function defaultAppContext(appContext) {
29
39
  export function defaultProps() {
30
40
  return {
31
41
  userWorkspaceContext: {
32
- onUserScrolled: jest.fn(),
42
+ onUserScrolled: () => {},
33
43
  scrollTo: {
34
44
  user: {
35
45
  "id": "54c6278e-f824-5fda-91ff-3e946b18d994",
@@ -78,9 +88,9 @@ export function defaultProps() {
78
88
  is_mfa_enabled: false
79
89
  }
80
90
  },
81
- onSorterChanged: jest.fn(),
91
+ onSorterChanged: () => {},
82
92
  onUserSelected: {
83
- single: jest.fn()
93
+ single: () => {}
84
94
  },
85
95
  sorter: {
86
96
  propertyName: 'modified'
@@ -181,7 +191,7 @@ export function defaultProps() {
181
191
  filter: {
182
192
  type: UserWorkspaceFilterTypes.ALL
183
193
  },
184
- getTranslatedRoleName: jest.fn(name => name),
194
+ getTranslatedRoleName: name => name,
185
195
  }
186
196
  };
187
197
  }
@@ -215,3 +225,13 @@ export function propsWithNoUsersWithTextSearch() {
215
225
  }
216
226
  };
217
227
  }
228
+
229
+ /**
230
+ * Props with no users using the text search
231
+ * @returns {any}
232
+ */
233
+ export function propsWithFirstUserAttentionRequired() {
234
+ const props = defaultProps();
235
+ props.userWorkspaceContext.filteredUsers[0].pending_account_recovery_request = true;
236
+ return props;
237
+ }
@@ -17,8 +17,8 @@
17
17
  */
18
18
 
19
19
  import {
20
- defaultAppContext,
21
- defaultProps,
20
+ defaultContext,
21
+ defaultProps, propsWithFirstUserAttentionRequired,
22
22
  propsWithNoUsersWithTextSearch,
23
23
  propsWithNullUsers
24
24
  } from "./DisplayUsers.test.data";
@@ -31,7 +31,7 @@ beforeEach(() => {
31
31
 
32
32
  describe("Display Users", () => {
33
33
  let page; // The page to test against
34
- const context = defaultAppContext(); // The applicative context
34
+ const context = defaultContext(); // The applicative context
35
35
  const props = defaultProps(); // The props to pass
36
36
 
37
37
  describe("As LU, I should see the appropriate list of users", () => {
@@ -54,6 +54,13 @@ describe("Display Users", () => {
54
54
  expect(page.user(1).username).toBe('carol@passbolt.com');
55
55
  expect(page.user(2).username).toBe('dame@passbolt.com');
56
56
  });
57
+
58
+ it('AS LU, I should see the appropriate filtered list of users with a user attention required', async() => {
59
+ page = new DisplayUsersPage(context, propsWithFirstUserAttentionRequired());
60
+ await waitFor(() => {});
61
+ expect(page.usersCount).toBe(2);
62
+ expect(page.user(1).attentionRequired).toBeTruthy();
63
+ });
57
64
  });
58
65
 
59
66
  describe('As LU, I should select users', () => {
@@ -81,6 +88,12 @@ describe("Display Users", () => {
81
88
  page = new DisplayUsersPage(context, props);
82
89
  });
83
90
 
91
+ it('As AD, I should sort the users by attention required', async() => {
92
+ jest.spyOn(props.userWorkspaceContext, 'onSorterChanged').mockImplementationOnce(() => {});
93
+ await page.sortByAttentionRequired();
94
+ expect(props.userWorkspaceContext.onSorterChanged).toHaveBeenCalledWith('attentionRequired');
95
+ });
96
+
84
97
  it('As LU, I should sort the users by fullname', async() => {
85
98
  jest.spyOn(props.userWorkspaceContext, 'onSorterChanged').mockImplementationOnce(() => {});
86
99
  await page.sortByFullname();
@@ -76,6 +76,9 @@ export default class DisplayUsersPage {
76
76
  get username() {
77
77
  return element.querySelector('.username div').textContent;
78
78
  },
79
+ get attentionRequired() {
80
+ return Boolean(element.querySelector('.attention-required .exclamation'));
81
+ },
79
82
  async select() {
80
83
  const leftClick = {button: 0};
81
84
  fireEvent.click(element, leftClick);
@@ -87,18 +90,28 @@ export default class DisplayUsersPage {
87
90
  /**
88
91
  * Sort the users by their full name
89
92
  */
90
- async sortByFullname() {
93
+ async sortByAttentionRequired() {
91
94
  const element = this._page.container.querySelectorAll('thead th a')[0];
92
95
  const leftClick = {button: 0};
93
96
  fireEvent.click(element, leftClick);
94
97
  await waitFor(() => {});
95
98
  }
96
99
 
100
+ /**
101
+ * Sort the users by their full name
102
+ */
103
+ async sortByFullname() {
104
+ const element = this._page.container.querySelectorAll('thead th a')[1];
105
+ const leftClick = {button: 0};
106
+ fireEvent.click(element, leftClick);
107
+ await waitFor(() => {});
108
+ }
109
+
97
110
  /**
98
111
  * Sort the users by their username
99
112
  */
100
113
  async sortByUsername() {
101
- const element = this._page.container.querySelectorAll('thead th a')[1];
114
+ const element = this._page.container.querySelectorAll('thead th a')[2];
102
115
  const leftClick = {button: 0};
103
116
  fireEvent.click(element, leftClick);
104
117
  await waitFor(() => {});
@@ -108,7 +121,7 @@ export default class DisplayUsersPage {
108
121
  * Sort the users by role
109
122
  */
110
123
  async sortByRole() {
111
- const element = this._page.container.querySelectorAll('thead th a')[2];
124
+ const element = this._page.container.querySelectorAll('thead th a')[3];
112
125
  const leftClick = {button: 0};
113
126
  fireEvent.click(element, leftClick);
114
127
  await waitFor(() => {});
@@ -118,7 +131,7 @@ export default class DisplayUsersPage {
118
131
  * Sort the users by their last date of modification
119
132
  */
120
133
  async sortByModified() {
121
- const element = this._page.container.querySelectorAll('thead th a')[3];
134
+ const element = this._page.container.querySelectorAll('thead th a')[4];
122
135
  const leftClick = {button: 0};
123
136
  fireEvent.click(element, leftClick);
124
137
  await waitFor(() => {});
@@ -128,7 +141,7 @@ export default class DisplayUsersPage {
128
141
  * Sort the users by their last date of login
129
142
  */
130
143
  async sortByLastLoggedIn() {
131
- const element = this._page.container.querySelectorAll('thead th a')[4];
144
+ const element = this._page.container.querySelectorAll('thead th a')[5];
132
145
  const leftClick = {button: 0};
133
146
  fireEvent.click(element, leftClick);
134
147
  await waitFor(() => {});
@@ -138,7 +151,7 @@ export default class DisplayUsersPage {
138
151
  * Sort the users by their mfa enable status
139
152
  */
140
153
  async sortByMFAEnabled() {
141
- const element = this._page.container.querySelectorAll('thead th a')[5];
154
+ const element = this._page.container.querySelectorAll('thead th a')[6];
142
155
  const leftClick = {button: 0};
143
156
  fireEvent.click(element, leftClick);
144
157
  await waitFor(() => {});