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,114 @@
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, {Component} from "react";
15
+ import PropTypes from "prop-types";
16
+ import {Trans, withTranslation} from "react-i18next";
17
+ import DialogWrapper from "../../Common/Dialog/DialogWrapper/DialogWrapper";
18
+ import FormSubmitButton from "../../Common/Inputs/FormSubmitButton/FormSubmitButton";
19
+ import {withAppContext} from "../../../contexts/AppContext";
20
+ import {withRouter} from "react-router-dom";
21
+
22
+ /**
23
+ * The component display variations.
24
+ * @type {Object}
25
+ */
26
+ export const PolicyVariations = {
27
+ MANDATORY: 'mandatory',
28
+ OPT_OUT: 'opt-out'
29
+ };
30
+
31
+ class AccountRecoveryInviteUserSettingPreferenceDialog extends Component {
32
+ constructor(props) {
33
+ super(props);
34
+ this.bindCallbacks();
35
+ }
36
+
37
+ /**
38
+ * Bind callbacks methods
39
+ */
40
+ bindCallbacks() {
41
+ this.handleSubmit = this.handleSubmit.bind(this);
42
+ this.handleCancel = this.handleCancel.bind(this);
43
+ }
44
+
45
+ /**
46
+ * Handle click on continue button
47
+ * @param {Event} event A form submit event
48
+ */
49
+ async handleSubmit(event) {
50
+ event.preventDefault();
51
+ this.props.onClose();
52
+ await this.props.history.push({pathname: "/app/settings/account-recovery/edit"});
53
+ }
54
+
55
+ /**
56
+ * Handle click on cancel buttons
57
+ */
58
+ async handleCancel() {
59
+ await this.props.context.port.request('passbolt.account-recovery.postpone-user-setting-invitation');
60
+ this.props.onClose();
61
+ }
62
+
63
+ /**
64
+ * Get the translate function
65
+ * @returns {function(...[*]=)}
66
+ */
67
+ get translate() {
68
+ return this.props.t;
69
+ }
70
+
71
+ /**
72
+ * Render the component
73
+ * @returns {JSX}
74
+ */
75
+ render() {
76
+ return (
77
+ <DialogWrapper
78
+ title={`${this.translate("Account recovery enrollment")}`}
79
+ onClose={this.handleCancel}
80
+ className="recovery-account-policy-dialog">
81
+ <form onSubmit={this.handleSubmit}>
82
+ <div className="form-content">
83
+ <p>
84
+ {{
85
+ [PolicyVariations.MANDATORY]: <Trans>It is mandatory to share securely a copy of your private key with your organization recovery contacts. Would you like to continue?</Trans>,
86
+ [PolicyVariations.OPT_OUT]: <Trans>It is recommended to share securely a copy of your private key with your organization recovery contacts. Would you like to continue?</Trans>,
87
+ }[this.props.policy]}
88
+ </p>
89
+ </div>
90
+ <div className="submit-wrapper clearfix">
91
+ <FormSubmitButton
92
+ value={this.translate("Continue")}/>
93
+ <button
94
+ className={`button cancel`}
95
+ role="button"
96
+ type="button"
97
+ onClick={this.handleCancel}>
98
+ <span><Trans>Cancel</Trans></span>
99
+ </button>
100
+ </div>
101
+ </form>
102
+ </DialogWrapper>
103
+ );
104
+ }
105
+ }
106
+
107
+ AccountRecoveryInviteUserSettingPreferenceDialog.propTypes = {
108
+ context: PropTypes.object, // The application context
109
+ policy: PropTypes.string, // The organization policy details
110
+ onClose: PropTypes.func, // The close callback
111
+ t: PropTypes.func, // The translation function
112
+ history: PropTypes.object, // The navigation history
113
+ };
114
+ export default withRouter(withAppContext(withTranslation("common")(AccountRecoveryInviteUserSettingPreferenceDialog)));
@@ -0,0 +1,27 @@
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
+ export const defaultProps = (data = {}) => {
16
+ const defaultData = {
17
+ context: {
18
+ port: {
19
+ request: jest.fn(),
20
+ },
21
+ },
22
+ policy: "opt-out",
23
+ onClose: jest.fn(),
24
+ };
25
+
26
+ return Object.assign(defaultData, data);
27
+ };
@@ -0,0 +1,72 @@
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 {createMemoryHistory} from "history";
16
+ import AccountRecoveryInviteUserSettingPreferenceDialogPage from "./AccountRecoveryInviteUserSettingPreferenceDialog.test.page";
17
+ import {waitFor} from "@testing-library/react";
18
+ import {PolicyVariations} from "./AccountRecoveryInviteUserSettingPreferenceDialog";
19
+ import {defaultProps} from "./AccountRecoveryInviteUserSettingPreferenceDialog.test.data";
20
+ import each from "jest-each";
21
+
22
+ beforeEach(() => {
23
+ jest.resetModules();
24
+ jest.resetAllMocks();
25
+ });
26
+
27
+ each([
28
+ {displayAs: PolicyVariations.MANDATORY, text: "It is mandatory to share securely a copy of your private key with your organization recovery contacts. Would you like to continue?"},
29
+ {displayAs: PolicyVariations.OPT_OUT, text: "It is recommended to share securely a copy of your private key with your organization recovery contacts. Would you like to continue?"},
30
+ ]).describe("AccountRecoveryInviteUserSettingPreferenceDialog", scenario => {
31
+ const props = defaultProps({
32
+ policy: scenario.displayAs
33
+ });
34
+
35
+ it(`As LU who haven't decided yet about the account recovery program, I'm prompted to follow a link to securely share my private key with the organization by applying to the account recovery program, scenario: ${JSON.stringify(scenario)}`, async() => {
36
+ const page = new AccountRecoveryInviteUserSettingPreferenceDialogPage(props);
37
+ await waitFor(() => { });
38
+
39
+ expect.assertions(1);
40
+ expect(page.message).toStrictEqual(scenario.text);
41
+ });
42
+
43
+ it(`As LU who haven't decided yet about the account recovery program, I can choose to continue to my user settings to take a decision about the account recovery, scenario: ${JSON.stringify(scenario)}`, async() => {
44
+ const history = createMemoryHistory();
45
+ const page = new AccountRecoveryInviteUserSettingPreferenceDialogPage(props, history);
46
+ await waitFor(() => { });
47
+
48
+ await page.clickOnContinue();
49
+ expect.assertions(1);
50
+ expect(history.location.pathname).toBe("/app/settings/account-recovery/edit");
51
+ });
52
+
53
+ it(`As LU who haven't decided yet about the account recovery program, I can postponed my choice for the account recovery programe by clicking the "cancel" button, scenario: ${JSON.stringify(scenario)}`, async() => {
54
+ const page = new AccountRecoveryInviteUserSettingPreferenceDialogPage(props);
55
+ await waitFor(() => { });
56
+
57
+ await page.clickOnCancel();
58
+ expect.assertions(2);
59
+ expect(props.context.port.request).toHaveBeenCalledWith("passbolt.account-recovery.postpone-user-setting-invitation");
60
+ expect(props.onClose).toHaveBeenCalledTimes(1);
61
+ });
62
+
63
+ it(`As LU who haven't decided yet about the account recovery program, I can postponed my choice for the account recovery programe by clicking the cross on the dialog, scenario: ${JSON.stringify(scenario)}`, async() => {
64
+ const page = new AccountRecoveryInviteUserSettingPreferenceDialogPage(props);
65
+ await waitFor(() => { });
66
+
67
+ await page.clickOnCross();
68
+ expect.assertions(2);
69
+ expect(props.context.port.request).toHaveBeenCalledWith("passbolt.account-recovery.postpone-user-setting-invitation");
70
+ expect(props.onClose).toHaveBeenCalledTimes(1);
71
+ });
72
+ });
@@ -0,0 +1,74 @@
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 {render, fireEvent, waitFor} from "@testing-library/react";
15
+ import React from "react";
16
+ import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
17
+ import AccountRecoveryInviteUserSettingPreferenceDialog from "./AccountRecoveryInviteUserSettingPreferenceDialog";
18
+ import {Router} from 'react-router-dom';
19
+ import {createMemoryHistory} from "history";
20
+
21
+ /**
22
+ * The AccountRecoveryInviteUserSettingPreferenceDialogPage component represented as a page
23
+ */
24
+ export default class AccountRecoveryInviteUserSettingPreferenceDialogPage {
25
+ /**
26
+ * Default constructor
27
+ * @param props Props to attach
28
+ */
29
+ constructor(props, history) {
30
+ history = history || createMemoryHistory();
31
+ this._page = render(
32
+ <MockTranslationProvider>
33
+ <Router history={history}>
34
+ <AccountRecoveryInviteUserSettingPreferenceDialog {...props} />
35
+ </Router>
36
+ </MockTranslationProvider>
37
+ );
38
+ }
39
+
40
+ selector(selection) {
41
+ return this._page.container.querySelector(selection);
42
+ }
43
+
44
+ get message() {
45
+ return this.selector('.recovery-account-policy-dialog p').textContent;
46
+ }
47
+
48
+ get cancelButton() {
49
+ return this.selector('.recovery-account-policy-dialog .button.cancel');
50
+ }
51
+
52
+ get cancelCross() {
53
+ return this.selector('.recovery-account-policy-dialog .dialog-close');
54
+ }
55
+
56
+ get continueButton() {
57
+ return this.selector('.recovery-account-policy-dialog .submit-wrapper input[type="submit"]');
58
+ }
59
+
60
+ async clickOnContinue() {
61
+ fireEvent.click(this.continueButton, {button: 0});
62
+ await waitFor(() => {});
63
+ }
64
+
65
+ async clickOnCancel() {
66
+ fireEvent.click(this.cancelButton, {button: 0});
67
+ await waitFor(() => {});
68
+ }
69
+
70
+ async clickOnCross() {
71
+ fireEvent.click(this.cancelCross, {button: 0});
72
+ await waitFor(() => {});
73
+ }
74
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.6.0
13
+ */
14
+
15
+ import React from "react";
16
+ import {MemoryRouter} from "react-router-dom";
17
+ import AccountRecoveryInviteUserSettingPreferenceDialog from "./AccountRecoveryInviteUserSettingPreferenceDialog";
18
+ import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
19
+ import MockPort from "../../../test/mock/MockPort";
20
+
21
+ export default {
22
+ title: 'Passbolt/AccountRecovery/AccountRecoveryInviteUserSettingPreferenceDialog',
23
+ component: AccountRecoveryInviteUserSettingPreferenceDialog
24
+ };
25
+
26
+ const Template = args =>
27
+ <MockTranslationProvider>
28
+ <MemoryRouter initialEntries={['/']}>
29
+ <AccountRecoveryInviteUserSettingPreferenceDialog {...args}/>
30
+ </MemoryRouter>
31
+ </MockTranslationProvider>;
32
+
33
+ export const Mandatory = Template.bind({});
34
+ Mandatory.args = {
35
+ context: {
36
+ port: new MockPort(),
37
+ locale: "en-US",
38
+ },
39
+ policy: "mandatory",
40
+ onClose: () => {}
41
+ };
42
+
43
+ export const OptOut = Template.bind({});
44
+ OptOut.args = {
45
+ context: {
46
+ port: new MockPort(),
47
+ locale: "en-US",
48
+ },
49
+ policy: "opt-out",
50
+ onClose: () => {}
51
+ };
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.6.0
13
+ */
14
+
15
+ import React from 'react';
16
+ import {withRouter} from 'react-router-dom';
17
+ import {withAppContext} from "../../../contexts/AppContext";
18
+ import {withDialog} from "../../../contexts/DialogContext";
19
+ import {withAccountRecovery} from "../../../contexts/AccountRecoveryUserContext";
20
+ import PropTypes from "prop-types";
21
+ import {AccountRecoveryUserContextProvider} from "../../../contexts/AccountRecoveryUserContext";
22
+ import AccountRecoveryInviteUserSettingPreferenceDialog from '../AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog';
23
+
24
+ /**
25
+ * This component listens any event related to passphrase entry dialog actions to perform
26
+ */
27
+ class HandleAccountRecoveryStatusCheck extends React.Component {
28
+ /**
29
+ * Whenever the component is mounted
30
+ */
31
+ async componentDidMount() {
32
+ await this.props.accountRecoveryContext.findAccountRecoveryPolicy();
33
+ if (!this.isOrganizationPolicyRequiresAUserChoice()) {
34
+ return;
35
+ }
36
+
37
+ const isResponsePostpone = await this.props.context.port.request("passbolt.account-recovery.has-user-postponed-user-setting-invitation");
38
+
39
+ if (isResponsePostpone) {
40
+ return;
41
+ }
42
+
43
+ const isUserAccountRecoverySubscriptionStatusPending = this.props.accountRecoveryContext.getUserAccountRecoverySubscriptionStatus() === AccountRecoveryUserContextProvider.STATUS_PENDING;
44
+ if (!isUserAccountRecoverySubscriptionStatusPending) {
45
+ return;
46
+ }
47
+
48
+ const pathname = this.props.location.pathname;
49
+ if (pathname.startsWith("/app/settings/account-recovery")) {
50
+ return;
51
+ }
52
+
53
+ this.props.dialogContext.open(AccountRecoveryInviteUserSettingPreferenceDialog, {
54
+ policy: this.props.accountRecoveryContext.getPolicy()
55
+ });
56
+ }
57
+
58
+ isOrganizationPolicyRequiresAUserChoice() {
59
+ const policy = this.props.accountRecoveryContext.getPolicy();
60
+ return policy === AccountRecoveryUserContextProvider.POLICY_MANDATORY
61
+ || policy === AccountRecoveryUserContextProvider.POLICY_OPT_OUT;
62
+ }
63
+
64
+ /**
65
+ * Renders the component
66
+ * @returns {JSX.Element}
67
+ */
68
+ render() {
69
+ return null;
70
+ }
71
+ }
72
+
73
+ HandleAccountRecoveryStatusCheck.propTypes = {
74
+ dialogContext: PropTypes.any, // the dialog context
75
+ accountRecoveryContext: PropTypes.object, // The account recovery context
76
+ context: PropTypes.object, // the application context
77
+ location: PropTypes.object, // the current page location
78
+ };
79
+
80
+ export default withRouter(withAppContext(withAccountRecovery(withDialog(HandleAccountRecoveryStatusCheck))));
@@ -0,0 +1,60 @@
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 {defaultAppContext} from "../../../contexts/ExtAppContext.test.data";
15
+
16
+ /**
17
+ * Default props
18
+ * @returns {{dialogContext: {open: jest.Mock}, context: {onCheckIsAuthenticatedRequested: jest.Mock}}}
19
+ */
20
+ export function defaultProps(data = {}) {
21
+ const context = defaultAppContext();
22
+ context.loggedInUser = {};
23
+
24
+ const defaultData = {
25
+ dialogContext: {
26
+ open: jest.fn()
27
+ },
28
+ context: context
29
+ };
30
+ return Object.assign(defaultData, data);
31
+ }
32
+
33
+ export function defaultAccountRecoveryUserService(organizationAccountRecoveryPolicy) {
34
+ return {
35
+ getOrganizationAccountRecoverySettings: jest.fn(() => organizationAccountRecoveryPolicy)
36
+ };
37
+ }
38
+
39
+ export function getOrganizationAccountRecoveryPolicy(data = {}) {
40
+ const defaultData = {
41
+ policy: "opt-in",
42
+ account_recovery_organization_public_key: {
43
+ armored_key: "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\r\nmQINBFXHTB8BEADAaRMUn++WVatrw3kQK7\/6S6DvBauIYcBateuFjczhwEKXUD6T\r\nhLm7nOv5\/TKzCpnB5WkP+UZyfT\/+jCC2x4+pSgog46jIOuigWBL6Y9F6KkedApFK\r\nxnF6cydxsKxNf\/V70Nwagh9ZD4W5ujy+RCB6wYVARDKOlYJnHKWqco7anGhWYj8K\r\nKaDT+7yM7LGy+tCZ96HCw4AvcTb2nXF197Btu2RDWZ\/0MhO+DFuLMITXbhxgQC\/e\r\naA1CS6BNS7F91pty7s2hPQgYg3HUaDogTiIyth8R5Inn9DxlMs6WDXGc6IElSfhC\r\nnfcICao22AlM6X3vTxzdBJ0hm0RV3iU1df0J9GoM7Y7y8OieOJeTI22yFkZpCM8i\r\ntL+cMjWyiID06dINTRAvN2cHhaLQTfyD1S60GXTrpTMkJzJHlvjMk0wapNdDM1q3\r\njKZC+9HAFvyVf0UsU156JWtQBfkE1lqAYxFvMR\/ne+kI8+6ueIJNcAtScqh0LpA5\r\nuvPjiIjvlZygqPwQ\/LUMgxS0P7sPNzaKiWc9OpUNl4\/P3XTboMQ6wwrZ3wOmSYuh\r\nFN8ez51U8UpHPSsI8tcHWx66WsiiAWdAFctpeR\/ZuQcXMvgEad57pz\/jNN2JHycA\r\n+awesPIJieX5QmG44sfxkOvHqkB3l193yzxu\/awYRnWinH71ySW4GJepPQARAQAB\r\ntB9BZGEgTG92ZWxhY2UgPGFkYUBwYXNzYm9sdC5jb20+iQJOBBMBCgA4AhsDBQsJ\r\nCAcDBRUKCQgLBRYCAwEAAh4BAheAFiEEA\/YOlY9MspcjrN92E1O1sV2bBU8FAl0b\r\nmi8ACgkQE1O1sV2bBU+Okw\/\/b\/PRVTz0\/hgdagcVNYPn\/lclDFuwwqanyvYu6y6M\r\nAiLVn6CUtxfU7GH2aSwZSr7D\/46TSlBHvxVvNlYROMx7odbLgq47OJxfUDG5OPi7\r\nLZgsuE8zijCPURZTZu20m+ratsieV0ziri+xJV09xJrjdkXHdX2PrkU0YeJxhE50\r\nJuMR1rf7EHfCp45nWbXoM4H+LnadGC1zSHa1WhSJkeaYw9jp1gh93BKD8+kmUrm6\r\ncKEjxN54YpgjFwSdA60b+BZgXbMgA37gNQCnZYjk7toaQClUbqLMaQxHPIjETB+Z\r\njJNKOYn740N2LTRtCi3ioraQNgXQEU7tWsXGS0tuMMN7w4ya1I6sYV3fCtfiyXFw\r\nfuYnjjGzn5hXtTjiOLJ+2kdy5OmNZc9wpf6IpKv7\/F2RUwLsBUfH4ondNNXscdkB\r\n6Zoj1Hxt16TpkHnYrKsSWtoOs90JnlwYbHnki6R\/gekYRSRSpD\/ybScQDRASQ0aO\r\nhbi71WuyFbLZF92P1mEK5GInJeiFjKaifvJ8F+oagI9hiYcHgX6ghktaPrANa2De\r\nOjmesQ0WjIHirzFKx3avYIkOFwKp8v6KTzynAEQ8XUqZmqEhNjEgVKHH0g3sC+EC\r\nZ\/HGLHsRRIN1siYnJGahrrkNs7lFI5LTqByHh52bismY3ADLemxH6Voq+DokvQn4\r\nHxS5Ag0EVcdMHwEQAMFWZvlswoC+dEFISBhJLz0XpTR5M84MCn19s\/ILjp6dGPbC\r\nvlGcT5Ol\/wL43T3hML8bzq18MRGgkzhwsBkUXO+E7jVePjuGFvRwS5W+QYwCuAmw\r\nDijDdMhrev1mrdVK61v\/2U9kt5faETW8ZIYIvAWLaw\/lMHbVmKOa35ZCIJWcNsrv\r\noro2kGUklM6Nq1JQyU+puGPHuvm+1ywZzpAH5q55pMgfO+9JjMU3XFs+eqv6LVyA\r\n\/Y6T7ZK1H8inbUPm\/26sSvmYsT\/4xNVosC\/ha9lFEAasz\/rbVg7thffje4LWOXJB\r\no40iBTlHsNbCGs5BfNC0wl719JDA4V8mwhGInNtETCrGwg3mBlDrk5jYrDq5IMVk\r\nyX4Z6T8Fd2fLHmUr2kFc4vC96tGQGhNrbAa\/EeaAkWMeFyp\/YOW0Z3X2tz5A+lm+\r\nqevJZ3HcQd+7ca6mPTrYSVVXhclwSkyCLlhRJwEwSxrn+a2ZToYNotLs1uEy6tOL\r\nbIyhFBQNsR6mTa2ttkd\/89wJ+r9s7XYDOyibTQyUGgOXu\/0l1K0jTREKlC91wKkm\r\ndw\/lJkjZCIMc\/KTHiB1e7f5NdFtxwErToEZOLVumop0FjRqzHoXZIR9OCSMUzUmM\r\nspGHalE71GfwB9DkAlgvoJPohyiipJ\/Paw3pOytZnb\/7A\/PoRSjELgDNPJhxABEB\r\nAAGJAjYEGAEKACACGwwWIQQD9g6Vj0yylyOs33YTU7WxXZsFTwUCXRuaPgAKCRAT\r\nU7WxXZsFTxX0EADAN9lreHgEvsl4JK89JqwBLjvGeXGTNmHsfczCTLAutVde+Lf0\r\nqACAhKhG0J8Omru2jVkUqPhkRcaTfaPKopT2KU8GfjKuuAlJ+BzH7oUq\/wy70t2h\r\nsglAYByv4y0emwnGyFC8VNw2Fe+Wil2y5d8DI8XHGp0bAXehjT2S7\/v1lEypeiiE\r\nNbhAnGG94Zywwwim0RltyNKXOgGeT4mroYxAL0zeTaX99Lch+DqyaeDq94g4sfhA\r\nVvGT2KJDT85vR3oNbB0U5wlbKPa+bUl8CokEDjqrDmdZOOs\/UO2mc45V3X5RNRtp\r\nNZMBGPJsxOKQExEOZncOVsY7ZqLrecuR8UJBQnhPd1aoz3HCJppaPI02uINWyQLs\r\nCogTf+nQWnLyN9qLrToriahNcZlDfuJCRVKTQ1gw1lkSN3IZRSkBuRYRe05US+C6\r\n8JMKHP+1XMKMgQM2XR7r4noMJKLaVUzfLXuPIWH2xNdgYXcIOSRjiANkIv4O7lWM\r\nxX9vD6LklijrepMl55Omu0bhF5rRn2VAubfxKhJs0eQn69+NWaVUrNMQ078nF+8G\r\nKT6vH32q9i9fpV38XYlwM9qEa0il5wfrSwPuDd5vmGgk9AOlSEzY2vE1kvp7lEt1\r\nTdb3ZfAajPMO3Iov5dwvm0zhJDQHFo7SFi5jH0Pgk4bAd9HBmB8sioxL4Q==\r\n=Kwft\r\n-----END PGP PUBLIC KEY BLOCK-----"
44
+ },
45
+ creator: {
46
+ username: "ada@passbolt.com",
47
+ profile: {
48
+ first_name: "ada",
49
+ last_name: "lovelace"
50
+ },
51
+ gpgkey: {
52
+ user_id: "fa69d48f-1a3d-4f9f-b7a0-709dce039e96",
53
+ armored_key: "faked armored key",
54
+ fingerprint: "848E95CC7493129AD862583129B81CA8936023DD"
55
+ }
56
+ },
57
+ modified: "2022-01-13T13:19:04.661Z"
58
+ };
59
+ return Object.assign(defaultData, data);
60
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.6.0
13
+ */
14
+
15
+ /**
16
+ * Unit tests on SessionExpired in regard of specifications
17
+ */
18
+ import {waitFor} from "@testing-library/dom";
19
+ import {defaultProps, defaultAccountRecoveryUserService, getOrganizationAccountRecoveryPolicy} from "./HandleAccountRecoveryStatusCheck.test.data";
20
+ import HandleAccountRecoveryStatusCheckPage from "./HandleAccountRecoveryStatusCheck.test.page";
21
+ import AccountRecoveryInviteUserSettingPreferenceDialog from "../AccountRecoveryInviteUserSettingPreferenceDialog/AccountRecoveryInviteUserSettingPreferenceDialog";
22
+
23
+ beforeEach(() => {
24
+ jest.resetModules();
25
+ });
26
+
27
+ afterEach(() => {
28
+ jest.clearAllMocks();
29
+ });
30
+
31
+ describe("As a logged in user, I have to approve or reject the new account recovery policy", () => {
32
+ const props = defaultProps(); // The props to pass
33
+
34
+ /**
35
+ * Given that I am a registered user
36
+ * And the Account recovery is enabled for my organisation
37
+ * And the Account recovery policy is “Opt-out” or “Mandatory”
38
+ * And I have a pending account recovery organisation policy
39
+ * And I am asked to join the account recovery program
40
+ * When I click on the “Continue” choice
41
+ * Then I'm redirected to my account recovery user settings
42
+ * And I am prompted to join the account recovery program
43
+ */
44
+ it('As a logged in user who has a pending organization account recovery policy, I can see a dialog prompting me to join the account recovery program if the policy is “opt-out” after logging in.', async() => {
45
+ const organizationPolicy = getOrganizationAccountRecoveryPolicy({policy: "opt-out"});
46
+ const mockedAccountRecoveryUserService = defaultAccountRecoveryUserService(organizationPolicy);
47
+
48
+ // The user didn't postponed the account recovery program enrollment
49
+ props.context.port.request = jest.fn(() => false);
50
+
51
+ expect.assertions(3);
52
+ props.dialogContext.open.mockImplementation((component, data) => {
53
+ expect(component).toBe(AccountRecoveryInviteUserSettingPreferenceDialog);
54
+ expect(data).toStrictEqual({policy: "opt-out"});
55
+ expect(props.context.port.request).toHaveBeenCalledTimes(1);
56
+ });
57
+
58
+ new HandleAccountRecoveryStatusCheckPage(props, mockedAccountRecoveryUserService);
59
+ });
60
+
61
+ /**
62
+ * Given that I already postponed am a registered user
63
+ * And the Account recovery is enabled for my organisation
64
+ * And the Account recovery policy is “Opt-out” or “Mandatory”
65
+ * And I have a pending account recovery organisation policy
66
+ * And I am asked to join the account recovery program
67
+ * When I click on the “Continue” choice
68
+ * Then I'm redirected to my account recovery user settings
69
+ * And I am prompted to join the account recovery program
70
+ */
71
+ it('As a logged in user who has a pending organization account recovery policy, I can see a dialog prompting me to join the account recovery program if the policy is “mandatory” after logging in.', async() => {
72
+ const organizationPolicy = getOrganizationAccountRecoveryPolicy({policy: "mandatory"});
73
+ const mockedAccountRecoveryUserService = defaultAccountRecoveryUserService(organizationPolicy);
74
+
75
+ // The user didn't postponed the account recovery program enrollment
76
+ props.context.port.request = jest.fn(() => false);
77
+
78
+ expect.assertions(3);
79
+ props.dialogContext.open.mockImplementation((component, data) => {
80
+ expect(component).toBe(AccountRecoveryInviteUserSettingPreferenceDialog);
81
+ expect(data).toStrictEqual({policy: "mandatory"});
82
+ expect(props.context.port.request).toHaveBeenCalledTimes(1);
83
+ });
84
+
85
+ new HandleAccountRecoveryStatusCheckPage(props, mockedAccountRecoveryUserService);
86
+ });
87
+
88
+ /**
89
+ * Given that I already postponed am a registered user
90
+ * And the Account recovery is enabled for my organisation
91
+ * And the Account recovery policy is “Opt-out” or “Mandatory”
92
+ * And I have a pending account recovery organisation policy
93
+ * And I have postponed my enrollement for the account recovery program
94
+ * Then I'm not prompted to join the account recovery program
95
+ */
96
+ it("As a logged in user who has postponed my account recovery enrollement, I'm not aksed again to enroll.", async() => {
97
+ const organizationPolicy = getOrganizationAccountRecoveryPolicy({policy: "mandatory"});
98
+ const mockedAccountRecoveryUserService = defaultAccountRecoveryUserService(organizationPolicy);
99
+
100
+ // The user postponed the account recovery program enrollment
101
+ props.context.port.request = jest.fn(() => true);
102
+
103
+ expect.assertions(2);
104
+
105
+ new HandleAccountRecoveryStatusCheckPage(props, mockedAccountRecoveryUserService);
106
+ await waitFor(() => {});
107
+ expect(mockedAccountRecoveryUserService.getOrganizationAccountRecoverySettings).toHaveBeenCalledTimes(1);
108
+ expect(props.dialogContext.open).not.toHaveBeenCalled();
109
+ });
110
+ });
@@ -0,0 +1,40 @@
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 {render} from "@testing-library/react";
15
+ import React from "react";
16
+ import {BrowserRouter as Router} from "react-router-dom";
17
+ import AccountRecoveryUserContextProvider from "../../../contexts/AccountRecoveryUserContext";
18
+ import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
19
+ import HandleAccountRecoveryStatusCheck from "./HandleAccountRecoveryStatusCheck";
20
+
21
+ /**
22
+ * The HandleAccountRecoveryStatusCheck component represented as a page
23
+ */
24
+ export default class HandleAccountRecoveryStatusCheckPage {
25
+ /**
26
+ * Default constructor
27
+ * @param props Props to attach
28
+ */
29
+ constructor(props, mockedAccountRecoveryUserService) {
30
+ this._page = render(
31
+ <AccountRecoveryUserContextProvider accountRecoveryUserService={mockedAccountRecoveryUserService} context={props.context}>
32
+ <MockTranslationProvider>
33
+ <Router>
34
+ <HandleAccountRecoveryStatusCheck {...props}/>
35
+ </Router>
36
+ </MockTranslationProvider>
37
+ </AccountRecoveryUserContextProvider>
38
+ );
39
+ }
40
+ }