passbolt-styleguide 3.8.4 → 3.9.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 (318) hide show
  1. package/build/css/help.min.css +3 -3
  2. package/build/css/public.min.css +3 -3
  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 +3 -3
  6. package/build/css/themes/default/api_reports.min.css +3 -3
  7. package/build/css/themes/default/api_webinstaller.min.css +3 -3
  8. package/build/css/themes/default/ext_app.min.css +3 -3
  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 +3 -3
  16. package/build/css/themes/midgar/api_reports.min.css +3 -3
  17. package/build/css/themes/midgar/ext_app.min.css +3 -3
  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/css/themes/solarized_dark/api_authentication.min.css +1 -1
  23. package/build/css/themes/solarized_dark/api_main.min.css +1 -1
  24. package/build/css/themes/solarized_dark/api_reports.min.css +1 -1
  25. package/build/css/themes/solarized_dark/ext_app.min.css +1 -1
  26. package/build/css/themes/solarized_dark/ext_authentication.min.css +1 -1
  27. package/build/css/themes/solarized_dark/ext_in_form_cta.min.css +1 -1
  28. package/build/css/themes/solarized_dark/ext_in_form_menu.min.css +1 -1
  29. package/build/css/themes/solarized_dark/ext_quickaccess.min.css +1 -1
  30. package/build/css/themes/solarized_light/api_authentication.min.css +1 -1
  31. package/build/css/themes/solarized_light/api_main.min.css +1 -1
  32. package/build/css/themes/solarized_light/api_reports.min.css +1 -1
  33. package/build/css/themes/solarized_light/ext_app.min.css +1 -1
  34. package/build/css/themes/solarized_light/ext_authentication.min.css +1 -1
  35. package/build/css/themes/solarized_light/ext_in_form_cta.min.css +1 -1
  36. package/build/css/themes/solarized_light/ext_in_form_menu.min.css +1 -1
  37. package/build/css/themes/solarized_light/ext_quickaccess.min.css +1 -1
  38. package/build/js/dist/api-account-recovery.js +1 -1
  39. package/build/js/dist/api-app.js +1 -1
  40. package/build/js/dist/api-app.js.LICENSE.txt +75 -5
  41. package/build/js/dist/api-feedback.js +2 -0
  42. package/build/js/dist/api-feedback.js.LICENSE.txt +45 -0
  43. package/build/js/dist/api-recover.js +1 -1
  44. package/build/js/dist/api-setup.js +1 -1
  45. package/build/js/dist/api-triage.js +1 -1
  46. package/build/js/dist/api-vendors.js +1 -1
  47. package/build/js/dist/api-vendors.js.LICENSE.txt +19 -9
  48. package/build/js/dist/src/locales/de-DE/common.json +995 -0
  49. package/build/js/dist/src/locales/en-UK/common.json +1061 -0
  50. package/build/js/dist/src/locales/es-ES/common.json +995 -0
  51. package/build/js/dist/src/locales/fr-FR/common.json +995 -0
  52. package/build/js/dist/src/locales/ja-JP/common.json +980 -0
  53. package/build/js/dist/src/locales/lt-LT/common.json +1025 -0
  54. package/build/js/dist/src/locales/nl-NL/common.json +995 -0
  55. package/build/js/dist/src/locales/pl-PL/common.json +1025 -0
  56. package/build/js/dist/src/locales/sv-SE/common.json +995 -0
  57. package/package.json +18 -1
  58. package/src/img/controls/attention.svg +1 -0
  59. package/src/locales/en-UK/common.json +80 -16
  60. package/src/react-extension/ApiApp.js +17 -5
  61. package/src/react-extension/ApiFeedback.entry.js +24 -0
  62. package/src/react-extension/ExtApp.js +12 -5
  63. package/src/react-extension/ExtAuthenticationLogin.js +17 -15
  64. package/src/react-extension/ExtAuthenticationLogin.test.stories.js +59 -0
  65. package/src/react-extension/ExtBootstrapApp.js +1 -0
  66. package/src/react-extension/components/Administration/AdministrationWorkspace.js +24 -0
  67. package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +3 -3
  68. package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +13 -1
  69. package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +7 -0
  70. package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.js +101 -0
  71. package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.data.js +23 -0
  72. package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.stories.js +27 -0
  73. package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +1 -1
  74. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +78 -2
  75. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +3 -1
  76. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +60 -0
  77. package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +23 -4
  78. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationInternationalisationActions/DisplayAdministrationInternationalisationActions.js +125 -0
  79. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationMfaActions/DisplayAdministrationMfaActions.js +131 -0
  80. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSelfRegistrationActions/DisplayAdministrationSelfRegistrationActions.js +103 -0
  81. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSsoActions/DisplayAdministrationSsoActions.js +91 -0
  82. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions.js +85 -0
  83. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationUserDirectoryActions/DisplayAdministrationUserDirectoryActions.js +228 -0
  84. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +4 -0
  85. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
  86. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +3 -3
  87. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +14 -0
  88. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.page.js +0 -17
  89. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +18 -115
  90. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.data.js +11 -13
  91. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.js +38 -43
  92. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +47 -10
  93. package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +10 -43
  94. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +82 -367
  95. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data.js +128 -42
  96. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.js +75 -121
  97. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +46 -16
  98. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +18 -14
  99. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.js +103 -0
  100. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.js +53 -0
  101. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.page.js +81 -0
  102. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.stories.js +34 -0
  103. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.js +125 -0
  104. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.data.js +63 -0
  105. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.js +54 -0
  106. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.page.js +88 -0
  107. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.stories.js +35 -0
  108. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.js +381 -0
  109. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.data.js +69 -0
  110. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.js +332 -0
  111. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.page.js +247 -0
  112. package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.stories.js +72 -0
  113. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +19 -19
  114. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.data.js +1717 -1729
  115. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +11 -3
  116. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.page.js +4 -1
  117. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
  118. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +41 -140
  119. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +15 -3
  120. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +22 -49
  121. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.page.js +19 -11
  122. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +9 -3
  123. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +5 -6
  124. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.data.js +1717 -1728
  125. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +11 -3
  126. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.page.js +4 -1
  127. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
  128. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +362 -835
  129. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.data.js +427 -418
  130. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +134 -175
  131. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.page.js +108 -11
  132. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +17 -25
  133. package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +4 -2
  134. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +3 -3
  135. package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +1 -1
  136. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.js +32 -7
  137. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.data.js +0 -3
  138. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.js +145 -1
  139. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.page.js +52 -1
  140. package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.stories.js +15 -0
  141. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.js +340 -0
  142. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.data.js +56 -0
  143. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.js +223 -0
  144. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.page.js +235 -0
  145. package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.stories.js +55 -0
  146. package/src/react-extension/components/Administration/ManageSsoSettings/SsoProviders.data.js +34 -0
  147. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +12 -3
  148. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +27 -0
  149. package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +8 -0
  150. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.js +197 -0
  151. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.data.js +37 -0
  152. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.js +187 -0
  153. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.page.js +120 -0
  154. package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.stories.js +31 -0
  155. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +9 -5
  156. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +4 -0
  157. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +11 -42
  158. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +1 -0
  159. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -5
  160. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +4 -0
  161. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +16 -2
  162. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +17 -1
  163. package/src/react-extension/components/AuthenticationLogin/Login/Login.js +159 -61
  164. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +14 -11
  165. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +79 -0
  166. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +16 -0
  167. package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -0
  168. package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
  169. package/src/react-extension/components/Common/Error/ApiError/ApiError.js +119 -0
  170. package/src/react-extension/components/Common/Error/ApiError/ApiError.test.js +43 -0
  171. package/src/react-extension/components/Common/Error/ApiError/ApiError.test.page.js +108 -0
  172. package/src/react-extension/components/Common/Error/ApiError/ApiError.test.stories.js +39 -0
  173. package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.test.js +12 -0
  174. package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItem.js +2 -2
  175. package/src/react-extension/components/Common/Legacy/HandleLegacyAppjs.js +1 -1
  176. package/src/react-extension/components/Common/Navigation/Header/Logo.js +13 -1
  177. package/src/react-extension/components/Resource/CreateResource/CreateResource.js +103 -30
  178. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +44 -10
  179. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +35 -7
  180. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +3 -3
  181. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesListContextualMenu.js +6 -5
  182. package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +5 -4
  183. package/src/react-extension/components/Resource/EditResource/EditResource.js +95 -23
  184. package/src/react-extension/components/Resource/EditResource/EditResource.test.js +45 -13
  185. package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +35 -2
  186. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +2 -1
  187. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +3 -2
  188. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +23 -2
  189. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +8 -0
  190. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +26 -2
  191. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +22 -1
  192. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +8 -0
  193. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +25 -2
  194. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +2 -1
  195. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +2 -1
  196. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +14 -1
  197. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.js +8 -0
  198. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +12 -0
  199. package/src/react-extension/components/User/CreateUser/CreateUser.js +42 -3
  200. package/src/react-extension/components/User/CreateUser/CreateUser.test.js +16 -0
  201. package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +26 -0
  202. package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -1
  203. package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +5 -5
  204. package/src/react-extension/components/User/EditUser/EditUser.js +29 -2
  205. package/src/react-extension/components/User/EditUser/EditUser.test.js +12 -0
  206. package/src/react-extension/components/User/EditUser/EditUser.test.page.js +26 -0
  207. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +2 -1
  208. package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1332 -1331
  209. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +2 -1
  210. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +19 -1
  211. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +9 -0
  212. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +12 -0
  213. package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +2 -1
  214. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +16 -1
  215. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -0
  216. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +26 -1
  217. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
  218. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +6 -4
  219. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +4 -1
  220. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +21 -11
  221. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +10 -1
  222. package/src/react-extension/contexts/AdminSmtpSettingsContext.js +2 -0
  223. package/src/react-extension/contexts/AdminSmtpSettingsContext.test.data.js +13 -0
  224. package/src/react-extension/contexts/AdminSmtpSettingsContext.test.js +3 -1
  225. package/src/react-extension/contexts/AdminSsoContext.js +558 -0
  226. package/src/react-extension/contexts/AdminSsoContext.test.data.js +51 -0
  227. package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.js +194 -0
  228. package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.test.js +111 -0
  229. package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.js +265 -0
  230. package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.test.js +178 -0
  231. package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.js +453 -0
  232. package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.test.js +218 -0
  233. package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.js +168 -0
  234. package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.test.js +73 -0
  235. package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.js +353 -0
  236. package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.test.js +220 -0
  237. package/src/react-extension/contexts/AdministrationWorkspaceContext.js +17 -178
  238. package/src/react-extension/contexts/AdministrationWorkspaceContext.test.js +0 -26
  239. package/src/react-extension/contexts/ApiAppContext.test.data.js +4 -2
  240. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +54 -4
  241. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +10 -1
  242. package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +92 -14
  243. package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +1 -0
  244. package/src/react-extension/contexts/NavigationContext.js +34 -0
  245. package/src/react-extension/contexts/SsoContext.js +151 -0
  246. package/src/react-extension/contexts/SsoContext.test.data.js +36 -0
  247. package/src/react-extension/contexts/SsoContext.test.js +104 -0
  248. package/src/react-extension/lib/Domain/DomainUtil.js +70 -0
  249. package/src/react-extension/lib/Domain/DomainUtil.test.js +129 -0
  250. package/src/react-extension/lib/Domain/Domains.js +6113 -0
  251. package/src/react-extension/lib/Error/InputValidator.js +24 -0
  252. package/src/react-extension/lib/Map/DynamicRef.js +49 -0
  253. package/src/react-extension/lib/Map/DynamicRef.test.js +56 -0
  254. package/src/react-extension/lib/Map/MapObject.js +48 -0
  255. package/src/react-extension/lib/Map/MapObject.test.js +43 -0
  256. package/src/react-quickaccess/ExtQuickAccess.js +7 -4
  257. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -1
  258. package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +4 -0
  259. package/src/react-quickaccess/components/LoginPage/LoginPage.js +115 -4
  260. package/src/react-quickaccess/components/LoginPage/LoginPage.test.data.js +10 -0
  261. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +30 -3
  262. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +33 -1
  263. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +25 -0
  264. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.js +60 -0
  265. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.page.js +60 -0
  266. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +33 -1
  267. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +36 -7
  268. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -2
  269. package/src/react-quickaccess/contexts/SsoContext.js +150 -0
  270. package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +5 -0
  271. package/src/shared/constants/inputs.const.js +30 -0
  272. package/src/shared/lib/Browser/clipBoard.js +45 -0
  273. package/src/shared/lib/Browser/clipBoard.test.js +59 -0
  274. package/src/shared/models/Mfa/Duo.js +36 -0
  275. package/src/shared/models/Mfa/Duo.test.js +59 -0
  276. package/src/shared/models/Mfa/MfaDTO.js +51 -0
  277. package/src/shared/models/Mfa/MfaDTO.test.js +48 -0
  278. package/src/shared/models/Mfa/MfaEnumeration.js +17 -0
  279. package/src/shared/models/Mfa/MfaModel.js +48 -0
  280. package/src/shared/models/Mfa/MfaModel.test.js +37 -0
  281. package/src/shared/models/Mfa/Yubikey.js +35 -0
  282. package/src/shared/models/Mfa/Yubikey.test.js +47 -0
  283. package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.js +55 -0
  284. package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.test.js +37 -0
  285. package/src/shared/models/selfRegistration/SelfRegistrationDto.js +42 -0
  286. package/src/shared/models/selfRegistration/SelfRegistrationDto.test.js +48 -0
  287. package/src/shared/models/selfRegistration/SelfRegistrationEnumeration.js +17 -0
  288. package/src/shared/models/subscription/SubscriptionDto.js +34 -0
  289. package/src/shared/models/subscription/SubscriptionDto.test.js +31 -0
  290. package/src/shared/models/subscription/SubscriptionModel.js +33 -0
  291. package/src/shared/models/subscription/SubscriptionModel.test.js +48 -0
  292. package/src/shared/models/user/UserModel.js +37 -0
  293. package/src/shared/models/userDirectory/UserDirectoryDTO.js +57 -0
  294. package/src/shared/models/userDirectory/UserDirectoryDTO.test.js +40 -0
  295. package/src/shared/models/userDirectory/UserDirectoryEnum.js +22 -0
  296. package/src/shared/models/userDirectory/UserDirectoryModel.js +64 -0
  297. package/src/shared/models/userDirectory/UserDirectoryModel.test.js +37 -0
  298. package/src/shared/services/actions/subscription/SubscriptionActionService.js +69 -0
  299. package/src/shared/services/actions/subscription/SubscriptionActionService.test.js +73 -0
  300. package/src/shared/services/api/Internationalisation/InternationalisationService.js +46 -0
  301. package/src/shared/services/api/Mfa/MfaService.js +54 -0
  302. package/src/shared/services/{accountRecovery → api/accountRecovery}/ApiAppAccountRecoveryUserService.js +2 -2
  303. package/src/shared/services/{accountRecovery → api/accountRecovery}/ExtAppAccountRecoveryUserService.js +0 -0
  304. package/src/shared/services/api/secrets/pownedService.js +64 -0
  305. package/src/shared/services/api/secrets/pownedService.test.js +63 -0
  306. package/src/shared/services/api/selfRegistration/selfRegistrationService.js +64 -0
  307. package/src/shared/services/api/user/UserService.js +45 -0
  308. package/src/shared/services/api/userDirectory/UserDirectoryService.js +108 -0
  309. package/src/shared/services/forms/Mfa/MfaFormService.js +195 -0
  310. package/src/shared/services/forms/Mfa/MfaFormService.test.js +341 -0
  311. package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.js +92 -0
  312. package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.test.js +101 -0
  313. package/src/shared/services/forms/userDirectory/UserDirectoryFormService.js +118 -0
  314. package/src/shared/services/forms/userDirectory/UserDirectoryFormService.test.js +128 -0
  315. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +0 -205
  316. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.data.js +0 -37
  317. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.js +0 -197
  318. package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.page.js +0 -133
@@ -0,0 +1,218 @@
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.8.3
13
+ */
14
+
15
+ import {mockApiResponse} from '../../../../../test/mocks/mockApiResponse';
16
+ import {defaultProps, mockResult} from '../../../components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.data';
17
+ import {enableFetchMocks} from 'jest-fetch-mock';
18
+ import SelfRegistrationDomainsViewModel from '../../../../shared/models/selfRegistration/SelfRegistrationDomainsViewModel';
19
+ import {AdminSelfRegistrationContextProvider} from "../../../contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext";
20
+ import MapObject from '../../../lib/Map/MapObject';
21
+ import SelfRegistrationDto from '../../../../shared/models/selfRegistration/SelfRegistrationDto';
22
+ import ConfirmSaveSelfRegistrationSettings from '../../../components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings';
23
+ import ConfirmDeletionSelfRegistrationSettings from '../../../components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings';
24
+ import NotifyError from '../../../components/Common/Error/NotifyError/NotifyError';
25
+ import PassboltServiceUnavailableError from '../../../../shared/lib/Error/PassboltServiceUnavailableError';
26
+
27
+ describe("AdministrationSelfRegistrationContext", () => {
28
+ let adminSelfRegistrationContext; // The adminSelfRegistrationContext to test
29
+ const props = defaultProps(); // The props to pass
30
+
31
+ const mockApiCalls = () => {
32
+ fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse(mockResult()));
33
+ };
34
+
35
+ //Initialize context by default
36
+ const initContext = async() => {
37
+ mockApiCalls();
38
+ await adminSelfRegistrationContext.findSettings();
39
+ };
40
+
41
+ beforeEach(() => {
42
+ jest.resetAllMocks();
43
+ adminSelfRegistrationContext = new AdminSelfRegistrationContextProvider(props);
44
+ mockState(adminSelfRegistrationContext);
45
+ enableFetchMocks();
46
+ });
47
+
48
+ describe("AdministrationSelfRegistrationContext::findSettings", () => {
49
+ it("should get the current settings and store it in its state", async() => {
50
+ expect.assertions(3);
51
+
52
+ // Mock the call to API
53
+ mockApiCalls();
54
+ const expectedResult = new SelfRegistrationDomainsViewModel(mockResult());
55
+ await adminSelfRegistrationContext.findSettings();
56
+ const domains = adminSelfRegistrationContext.getAllowedDomains();
57
+ expect(domains.values()).toEqual(expectedResult.allowedDomains.values());
58
+ expect(adminSelfRegistrationContext.getCurrentSettings()).toEqual(mockResult());
59
+ expect(adminSelfRegistrationContext.isProcessing()).toBeFalsy();
60
+ });
61
+ it("should set processing to true when loading settings", async() => {
62
+ expect.assertions(1);
63
+
64
+ adminSelfRegistrationContext.setProcessing(false);
65
+ try {
66
+ await adminSelfRegistrationContext.findSettings();
67
+ } catch {
68
+ expect(adminSelfRegistrationContext.isProcessing()).toBeTruthy();
69
+ }
70
+ });
71
+ });
72
+
73
+ describe("AdministrationSelfRegistrationContext::hasSettingsChanges", () => {
74
+ let keys = null;
75
+
76
+ beforeEach(async() => {
77
+ await initContext();
78
+ keys = MapObject.iterators(adminSelfRegistrationContext.getAllowedDomains());
79
+ });
80
+ it("should return true if settings is different then current setting", () => {
81
+ expect.assertions(1);
82
+
83
+ const domains = MapObject.clone(adminSelfRegistrationContext.getAllowedDomains());
84
+ domains.set(keys[0], "passbot.com");
85
+ adminSelfRegistrationContext.setDomains({allowedDomains: domains});
86
+
87
+ expect(adminSelfRegistrationContext.hasSettingsChanges()).toBeTruthy();
88
+ });
89
+
90
+ it("should return false if settings is different then current setting", () => {
91
+ expect.assertions(1);
92
+ const [firstValue] = adminSelfRegistrationContext.getAllowedDomains().values();
93
+
94
+ const domains = MapObject.clone(adminSelfRegistrationContext.getAllowedDomains());
95
+ domains.set(keys[0], "passbot.com");
96
+ adminSelfRegistrationContext.setDomains({allowedDomains: domains});
97
+ domains.set(keys[0], firstValue);
98
+ adminSelfRegistrationContext.setDomains({allowedDomains: domains});
99
+
100
+ expect(adminSelfRegistrationContext.hasSettingsChanges()).toBeFalsy();
101
+ });
102
+ });
103
+
104
+ describe("AdminUserDirectoryContext::clearContext", () => {
105
+ beforeEach(async() => {
106
+ await initContext();
107
+ });
108
+ it("should clear the context and set it by default", () => {
109
+ expect.assertions(3);
110
+
111
+ adminSelfRegistrationContext.setDomains({allowedDomains: {"test": "value"}});
112
+ adminSelfRegistrationContext.clearContext();
113
+
114
+ expect(adminSelfRegistrationContext.isProcessing()).toBeTruthy();
115
+ expect(adminSelfRegistrationContext.getCurrentSettings()).toBe(null);
116
+ expect(adminSelfRegistrationContext.getAllowedDomains()).toEqual(new Map());
117
+ });
118
+ });
119
+
120
+ describe("AdminUserDirectoryContext::save", () => {
121
+ beforeEach(async() => {
122
+ await initContext();
123
+ });
124
+ it("should display ConfirmSaveSelfRegistrationSettings if form is valid", async() => {
125
+ await adminSelfRegistrationContext.save();
126
+
127
+ expect.assertions(2);
128
+
129
+ expect(adminSelfRegistrationContext.isSubmitted).toBeTruthy();
130
+ expect(props.dialogContext.open).toHaveBeenCalledWith(ConfirmSaveSelfRegistrationSettings, expect.objectContaining({"domains": adminSelfRegistrationContext.getAllowedDomains()}));
131
+ });
132
+
133
+ it("should display ConfirmDeletionSelfRegistrationSettings if form is valid and domains are empty", async() => {
134
+ adminSelfRegistrationContext.setDomains({allowedDomains: new Map()});
135
+ await adminSelfRegistrationContext.save();
136
+
137
+ expect.assertions(2);
138
+
139
+ expect(adminSelfRegistrationContext.isSubmitted).toBeTruthy();
140
+ expect(props.dialogContext.open).toHaveBeenCalledWith(ConfirmDeletionSelfRegistrationSettings, expect.objectContaining({onClose: expect.any(Function), onSubmit: expect.any(Function)}));
141
+ });
142
+ });
143
+
144
+ describe("AdminUserDirectoryContext::saveSettings", () => {
145
+ beforeEach(async() => {
146
+ await initContext();
147
+ });
148
+ it("should save settings and display feedback", async() => {
149
+ fetch.doMockOnceIf(/self-registration\/settings*/, () => mockApiResponse({}));
150
+ jest.spyOn(adminSelfRegistrationContext, "findSettings").mockImplementation();
151
+
152
+ await adminSelfRegistrationContext.saveSettings();
153
+
154
+ expect.assertions(4);
155
+
156
+ //Save should set processing to false in any case
157
+ expect(adminSelfRegistrationContext.isProcessing()).toBeFalsy();
158
+ expect(adminSelfRegistrationContext.findSettings).toHaveBeenCalled();
159
+ expect(props.actionFeedbackContext.displaySuccess).toHaveBeenCalledWith("The self registration settings for the organization were updated.");
160
+ expect(JSON.parse(fetch.mock.calls[1][1].body)).toEqual(expect.objectContaining(new SelfRegistrationDto({allowedDomains: adminSelfRegistrationContext.getAllowedDomains()}, adminSelfRegistrationContext.getCurrentSettings())));
161
+ });
162
+
163
+ it("should not save settings and display feedback when we have an error", async() => {
164
+ const error = {message: "The service is unavailable"};
165
+
166
+ fetch.doMockOnceIf(/self-registration\/settings*/, () => Promise.reject(error));
167
+
168
+ jest.spyOn(adminSelfRegistrationContext, "findSettings").mockImplementation();
169
+
170
+ await adminSelfRegistrationContext.saveSettings();
171
+
172
+ expect.assertions(4);
173
+
174
+ //Save should set processing to false in any case
175
+ expect(adminSelfRegistrationContext.isProcessing()).toBeFalsy();
176
+ expect(adminSelfRegistrationContext.findSettings).not.toHaveBeenCalled();
177
+ expect(props.dialogContext.open).toHaveBeenCalledWith(NotifyError, {"error": new PassboltServiceUnavailableError(error.message)});
178
+ expect(JSON.parse(fetch.mock.calls[1][1].body)).toEqual(expect.objectContaining(new SelfRegistrationDto({allowedDomains: adminSelfRegistrationContext.getAllowedDomains()}, adminSelfRegistrationContext.getCurrentSettings())));
179
+ });
180
+ });
181
+ describe("AdminMfaContext::errors", () => {
182
+ it("should update error object with targeted property", async() => {
183
+ expect.assertions(1);
184
+ await adminSelfRegistrationContext.setError("uuid1", "error");
185
+
186
+ expect(adminSelfRegistrationContext.getErrors().get("uuid1")).toBe("error");
187
+ });
188
+
189
+ it("should init errors with default property", async() => {
190
+ expect.assertions(1);
191
+ expect(adminSelfRegistrationContext.getErrors()).toEqual(new Map());
192
+ });
193
+ });
194
+
195
+ describe("AdminMfaContext::setSubmitted", () => {
196
+ it("should set submit and focus", async() => {
197
+ expect.assertions(2);
198
+ await adminSelfRegistrationContext.setSubmitted(true);
199
+
200
+ expect(adminSelfRegistrationContext.isSubmitted()).toBeTruthy();
201
+ expect(adminSelfRegistrationContext.shouldFocus()).toBeTruthy();
202
+ });
203
+ });
204
+ });
205
+
206
+
207
+ function mockState(adminSelfRegistrationContext) {
208
+ const setStateMock = state => {
209
+ let newState;
210
+ if (typeof state === 'function') {
211
+ newState = state(adminSelfRegistrationContext.state);
212
+ } else {
213
+ newState = state;
214
+ }
215
+ adminSelfRegistrationContext.state = Object.assign(adminSelfRegistrationContext.state, newState);
216
+ };
217
+ jest.spyOn(adminSelfRegistrationContext, "setState").mockImplementation(setStateMock);
218
+ }
@@ -0,0 +1,168 @@
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.8.0
13
+ */
14
+
15
+ import React from "react";
16
+ import PropTypes from "prop-types";
17
+ import {withAppContext} from "../../AppContext";
18
+ import SubscriptionModel from '../../../../shared/models/subscription/SubscriptionModel';
19
+
20
+ /**
21
+ * The Administration Subscription Context
22
+ * @type {React.Context<Object>}
23
+ */
24
+ export const AdminSubscriptionContext = React.createContext({
25
+ getSubscription: () => {}, // Returns settings for UI changes
26
+ findSubscriptionKey: () => {}, // Find the subscription key
27
+ isProcessing: () => {}, // returns true if a process is running and the UI must be disabled
28
+ setProcessing: () => {}, // Set processing state
29
+ getActiveUsers: () => {}, //get active users numbers
30
+ clearContext: () => {}, // put the data to its default state value
31
+ });
32
+
33
+ /**
34
+ * The Administration Subscription context provider
35
+ */
36
+ export class AdminSubscriptionContextProvider extends React.Component {
37
+ /**
38
+ * Default constructor
39
+ * @param props The component props
40
+ */
41
+ constructor(props) {
42
+ super(props);
43
+ this.state = this.defaultState;
44
+ }
45
+
46
+ /**
47
+ * Returns the default component state
48
+ */
49
+ get defaultState() {
50
+ return {
51
+ subscription: new SubscriptionModel(), // Change done to the subscription object
52
+ processing: true, // Context is processing data
53
+ getSubscription: this.getSubscription.bind(this), // Returns settings for UI changes
54
+ findSubscriptionKey: this.findSubscriptionKey.bind(this), // Find the subscription key
55
+ isProcessing: this.isProcessing.bind(this), // returns true if a process is running and the UI must be disabled
56
+ setProcessing: this.setProcessing.bind(this), // Set processing state
57
+ getActiveUsers: this.getActiveUsers.bind(this), //get active users numbers
58
+ clearContext: this.clearContext.bind(this), // put the data to its default state value
59
+ };
60
+ }
61
+
62
+ /**
63
+ * Find the subscription key
64
+ * @return {Promise<void>}
65
+ */
66
+ async findSubscriptionKey() {
67
+ this.setProcessing(true);
68
+ let subscription = new SubscriptionModel();
69
+ try {
70
+ const result = await this.props.context.onGetSubscriptionKeyRequested();
71
+ subscription = new SubscriptionModel(result);
72
+ } catch (error) {
73
+ if (error.name === "PassboltSubscriptionError") {
74
+ subscription = new SubscriptionModel(error.subscription);
75
+ }
76
+ } finally {
77
+ //Init subscription which will interact with UI
78
+ this.setState({subscription});
79
+ this.setProcessing(false);
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Get active users
85
+ * @returns {*}
86
+ * @constructor
87
+ */
88
+ async getActiveUsers() {
89
+ const users = await this.props.context.port.request("passbolt.users.get-all");
90
+ const filterActiveUsers = user => user.active;
91
+ return users.filter(filterActiveUsers).length;
92
+ }
93
+
94
+ /**
95
+ * Returns the subscription that have been fetch previously.
96
+ * @returns {object}
97
+ */
98
+ getSubscription() {
99
+ return this.state.subscription;
100
+ }
101
+
102
+ /**
103
+ * Returns true when the data is under processing
104
+ * @returns {boolean}
105
+ *
106
+ */
107
+ isProcessing() {
108
+ return this.state.processing;
109
+ }
110
+
111
+ /**
112
+ * Handle processing change.
113
+ * @params {Boolean} processing value
114
+ * @returns {void}
115
+ */
116
+ setProcessing(processing) {
117
+ this.setState({processing});
118
+ }
119
+
120
+ /**
121
+ * Puts the state to its default in order to avoid keeping the data users didn't want to save.
122
+ */
123
+ clearContext() {
124
+ const {subscription, processing} = this.defaultState;
125
+ this.setState({
126
+ subscription, processing
127
+ });
128
+ }
129
+
130
+ /**
131
+ * Render the component
132
+ * @returns {JSX}
133
+ */
134
+ render() {
135
+ return (
136
+ <AdminSubscriptionContext.Provider value={this.state}>
137
+ {this.props.children}
138
+ </AdminSubscriptionContext.Provider>
139
+ );
140
+ }
141
+ }
142
+
143
+ AdminSubscriptionContextProvider.propTypes = {
144
+ context: PropTypes.any, // The application context
145
+ children: PropTypes.any, // The children components
146
+ };
147
+
148
+ export default withAppContext(AdminSubscriptionContextProvider);
149
+
150
+
151
+ /**
152
+ * Resource Workspace Context Consumer HOC
153
+ * @param WrappedComponent
154
+ */
155
+ export function withAdminSubscription(WrappedComponent) {
156
+ return class WithAdminSubscription extends React.Component {
157
+ render() {
158
+ return (
159
+ <AdminSubscriptionContext.Consumer>
160
+ {
161
+ adminSubcriptionContext => <WrappedComponent adminSubcriptionContext={adminSubcriptionContext} {...this.props} />
162
+ }
163
+ </AdminSubscriptionContext.Consumer>
164
+ );
165
+ }
166
+ };
167
+ }
168
+
@@ -0,0 +1,73 @@
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.8.0
13
+ */
14
+
15
+ import {defaultProps, mockSubscriptionModel} from "../../../../react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data";
16
+ import {AdminSubscriptionContextProvider} from "./AdministrationSubscription";
17
+ import PassboltSubscriptionError from '../../../lib/Error/PassboltSubscriptionError';
18
+
19
+ describe("AdminSubscriptionContext", () => {
20
+ let adminSubscribeContext; // The adminSubscribeContext to test
21
+ const props = defaultProps(); // The props to pass
22
+
23
+ beforeEach(() => {
24
+ jest.resetAllMocks();
25
+ adminSubscribeContext = new AdminSubscriptionContextProvider(Object.assign({}, props));
26
+ const setStateMock = state => adminSubscribeContext.state = Object.assign(adminSubscribeContext.state, state);
27
+ jest.spyOn(adminSubscribeContext, "setState").mockImplementation(setStateMock);
28
+ });
29
+ describe("AdminSubscriptionContext::findSubscriptionKey", () => {
30
+ it("should get the current subscription and store it in its state", async() => {
31
+ await adminSubscribeContext.findSubscriptionKey();
32
+
33
+ expect.assertions(2);
34
+
35
+ expect(adminSubscribeContext.getSubscription()).toEqual(mockSubscriptionModel);
36
+ expect(adminSubscribeContext.isProcessing()).toBeFalsy();
37
+ });
38
+
39
+ it("should init subscription with error in case of PassboltSubscriptionError", async() => {
40
+ jest.spyOn(props.context, "onGetSubscriptionKeyRequested").mockImplementation(() => { throw new PassboltSubscriptionError("error", {}); });
41
+ await adminSubscribeContext.findSubscriptionKey();
42
+
43
+ expect.assertions(3);
44
+ const subscription = adminSubscribeContext.getSubscription();
45
+ expect(subscription.email).toEqual('N/A');
46
+ expect(subscription.subscriptionId).toEqual('N/A');
47
+ expect(adminSubscribeContext.isProcessing()).toBeFalsy();
48
+ });
49
+ });
50
+ describe("AdminSubscriptionContext::hasSettingsChanges", () => {
51
+ it("should return the number of active user", async() => {
52
+ const activeUsers = await adminSubscribeContext.getActiveUsers();
53
+
54
+ expect.assertions(1);
55
+
56
+ expect(activeUsers).toEqual(5);
57
+ });
58
+ });
59
+
60
+ describe("AdminSubscriptionContext::clearContext", () => {
61
+ it("should clear the context and set it by default", async() => {
62
+ await adminSubscribeContext.findSubscriptionKey();
63
+ adminSubscribeContext.clearContext();
64
+
65
+ expect.assertions(2);
66
+
67
+ expect(adminSubscribeContext.isProcessing()).toBeTruthy();
68
+ expect(adminSubscribeContext.getSubscription().subscriptionId).toEqual("");
69
+ });
70
+ });
71
+ });
72
+
73
+