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
@@ -18,10 +18,12 @@ import {DateTime} from "luxon";
18
18
  import {withAdministrationWorkspace} from "../../../contexts/AdministrationWorkspaceContext";
19
19
  import {Trans, withTranslation} from "react-i18next";
20
20
  import {withDialog} from "../../../../react-extension/contexts/DialogContext";
21
- import EditSubscriptionKey from "../EditSubscriptionKey/EditSubscriptionKey";
22
21
  import {withNavigationContext} from "../../../contexts/NavigationContext";
23
22
  import Icon from "../../../../shared/components/Icons/Icon";
24
23
  import AnimatedFeedback from "../../../../shared/components/Icons/AnimatedFeedback";
24
+ import SubscriptionActionService from '../../../../shared/services/actions/subscription/SubscriptionActionService';
25
+ import DisplayAdministrationSubscriptionActions from "../DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions";
26
+ import {withAdminSubscription} from "../../../contexts/Administration/AdministrationSubscription/AdministrationSubscription";
25
27
 
26
28
  /**
27
29
  * This component allows to display the subscription key for the administration
@@ -35,6 +37,7 @@ class DisplaySubscriptionKey extends React.Component {
35
37
  super(props);
36
38
  this.state = this.defaultState;
37
39
  this.bindCallbacks();
40
+ this.subscriptionActionService = SubscriptionActionService.getInstance(this.props);
38
41
  }
39
42
 
40
43
  /**
@@ -43,34 +46,31 @@ class DisplaySubscriptionKey extends React.Component {
43
46
  */
44
47
  get defaultState() {
45
48
  return {
46
- loading: true, // component is loading or not
47
-
48
- // Subscription Key
49
- customerId: "", // Chargebee customer id
50
- subscriptionId: "", // Chargebee subscription id
51
- users: null, // The number of users the subscription is valid for
52
- email: "", // The email used to manage the subscription
53
- expiry: null, // The date when the license key expires
54
- created: null, // The date when the license key was created
55
- data: null, // Base64 encoded subscription, the original subscription key
56
-
57
49
  // active users
58
50
  activeUsers: null // The number of active users
59
51
  };
60
52
  }
61
53
 
54
+ /**
55
+ * ComponentDidMount
56
+ * Invoked immediately after component is inserted into the tree
57
+ * @return {void}
58
+ */
62
59
  async componentDidMount() {
60
+ this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(DisplayAdministrationSubscriptionActions);
63
61
  this.findActiveUsers();
64
- this.findSubscriptionKey();
62
+ await this.findSubscriptionKey();
65
63
  }
66
64
 
67
65
  /**
68
- * Whenever the component has updated in terms of props or state
69
- * @param prevProps
66
+ * componentWillUnmount
67
+ * Use to clear the data from the form in case the user put something that needs to be cleared.
70
68
  */
71
- async componentDidUpdate(prevProps) {
72
- await this.handleMustRefreshSubscriptionKey(prevProps.administrationWorkspaceContext.must.refreshSubscriptionKey);
73
- await this.handleMustEditSubscriptionKey(prevProps.administrationWorkspaceContext.must.editSubscriptionKey);
69
+ componentWillUnmount() {
70
+ this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction();
71
+ this.props.adminSubcriptionContext.clearContext();
72
+ SubscriptionActionService.killInstance();
73
+ this.mfaFormService = null;
74
74
  }
75
75
 
76
76
  /**
@@ -81,44 +81,11 @@ class DisplaySubscriptionKey extends React.Component {
81
81
  this.handleUpdateKey = this.handleUpdateKey.bind(this);
82
82
  }
83
83
 
84
- /**
85
- * Handle the must refresh subscription key
86
- * @param previousRefreshSubscriptionKey Previous refresh subscription key
87
- */
88
- async handleMustRefreshSubscriptionKey(previousRefreshSubscriptionKey) {
89
- const hasRefreshSubscriptionKeyChanged = this.props.administrationWorkspaceContext.must.refreshSubscriptionKey !== previousRefreshSubscriptionKey;
90
- if (hasRefreshSubscriptionKeyChanged && this.props.administrationWorkspaceContext.must.refreshSubscriptionKey) {
91
- await this.findActiveUsers();
92
- await this.findSubscriptionKey();
93
- this.props.administrationWorkspaceContext.onResetActionsSettings();
94
- }
95
- }
96
-
97
- /**
98
- * Handle the must edit subscription key
99
- * @param previousEditSubscriptionKey Previous edit subscription key
100
- */
101
- async handleMustEditSubscriptionKey(previousEditSubscriptionKey) {
102
- const hasEditSubscriptionKeyChanged = this.props.administrationWorkspaceContext.must.editSubscriptionKey !== previousEditSubscriptionKey;
103
- if (hasEditSubscriptionKeyChanged && this.props.administrationWorkspaceContext.must.editSubscriptionKey) {
104
- this.openEditSubscriptionKey();
105
- this.props.administrationWorkspaceContext.onResetActionsSettings();
106
- }
107
- }
108
-
109
- openEditSubscriptionKey() {
110
- const editSubscriptionKey = {
111
- key: this.state.data
112
- };
113
- this.props.context.setContext({editSubscriptionKey});
114
- this.props.dialogContext.open(EditSubscriptionKey);
115
- }
116
-
117
84
  /**
118
85
  * fetch the active users
119
86
  */
120
87
  async findActiveUsers() {
121
- const activeUsers = await this.getActiveUsers();
88
+ const activeUsers = await this.props.adminSubcriptionContext.getActiveUsers();
122
89
  this.setState({activeUsers});
123
90
  }
124
91
 
@@ -126,69 +93,18 @@ class DisplaySubscriptionKey extends React.Component {
126
93
  * fetch the subscription key
127
94
  */
128
95
  async findSubscriptionKey() {
129
- try {
130
- const subscription = await this.props.context.onGetSubscriptionKeyRequested();
131
- const customerId = subscription.customer_id;
132
- const subscriptionId = subscription.subscription_id;
133
- const users = subscription.users;
134
- const email = subscription.email;
135
- const expiry = subscription.expiry;
136
- const created = subscription.created;
137
- const data = subscription.data;
138
-
139
- this.setState({
140
- loading: false,
141
- customerId,
142
- subscriptionId,
143
- users,
144
- email,
145
- expiry,
146
- created,
147
- data
148
- });
149
- } catch (error) {
150
- this.handleSubscriptionError(error);
151
- }
152
- }
153
-
154
- /**
155
- * Handle subscription error
156
- * @param error
157
- */
158
- handleSubscriptionError(error) {
159
- if (error.name === "PassboltSubscriptionError") {
160
- const subscription = error.subscription;
161
- const customerId = subscription.customer_id || "N/A";
162
- const subscriptionId = subscription.subscription_id;
163
- const users = subscription.users;
164
- const email = subscription.email || "N/A";
165
- const expiry = subscription.expiry;
166
- const created = subscription.created;
167
- const data = subscription.data;
168
-
169
- this.setState({
170
- loading: false,
171
- customerId,
172
- subscriptionId,
173
- users,
174
- email,
175
- expiry,
176
- created,
177
- data,
178
- });
179
- } else {
180
- this.setState({loading: false});
181
- }
96
+ this.props.adminSubcriptionContext.findSubscriptionKey();
182
97
  }
183
98
 
184
99
  /**
185
100
  * Handle renew key click event
186
101
  */
187
102
  handleRenewKey() {
103
+ const subscription = this.props.adminSubcriptionContext.getSubscription();
188
104
  if (this.hasLimitUsersExceeded()) {
189
- this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/qty?subscription_id=${this.state.subscriptionId}&customer_id=${this.state.customerId}`);
105
+ this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/qty?subscription_id=${subscription.subscriptionId}&customer_id=${subscription.customerId}`);
190
106
  } else if (this.hasSubscriptionKeyExpired() || this.hasSubscriptionKeyGoingToExpire()) {
191
- this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/renew?subscription_id=${this.state.subscriptionId}&customer_id=${this.state.customerId}`);
107
+ this.props.navigationContext.onGoToNewTab(`https://www.passbolt.com/subscription/ee/update/renew?subscription_id=${subscription.subscriptionId}&customer_id=${subscription.customerId}`);
192
108
  }
193
109
  }
194
110
 
@@ -196,15 +112,7 @@ class DisplaySubscriptionKey extends React.Component {
196
112
  * Handle update key click event
197
113
  */
198
114
  handleUpdateKey() {
199
- this.openEditSubscriptionKey();
200
- }
201
-
202
- /**
203
- * True if state is loading
204
- * @returns {boolean}
205
- */
206
- isLoading() {
207
- return this.state.loading;
115
+ this.subscriptionActionService.editSubscription();
208
116
  }
209
117
 
210
118
  /**
@@ -212,7 +120,7 @@ class DisplaySubscriptionKey extends React.Component {
212
120
  * @returns {boolean}
213
121
  */
214
122
  hasSubscriptionKeyExpired() {
215
- return DateTime.fromISO(this.state.expiry) < DateTime.now();
123
+ return DateTime.fromISO(this.props.adminSubcriptionContext.getSubscription().expiry) < DateTime.now();
216
124
  }
217
125
 
218
126
  /**
@@ -220,7 +128,7 @@ class DisplaySubscriptionKey extends React.Component {
220
128
  * @returns {boolean}
221
129
  */
222
130
  hasSubscriptionKeyGoingToExpire() {
223
- return DateTime.fromISO(this.state.expiry) < DateTime.now().plus({days: 30}) && !this.hasSubscriptionKeyExpired();
131
+ return DateTime.fromISO(this.props.adminSubcriptionContext.getSubscription().expiry) < DateTime.now().plus({days: 30}) && !this.hasSubscriptionKeyExpired();
224
132
  }
225
133
 
226
134
  /**
@@ -228,7 +136,7 @@ class DisplaySubscriptionKey extends React.Component {
228
136
  * @returns {boolean}
229
137
  */
230
138
  hasSubscriptionKey() {
231
- return Boolean(this.state.data);
139
+ return Boolean(this.props.adminSubcriptionContext.getSubscription().data);
232
140
  }
233
141
 
234
142
  /**
@@ -236,7 +144,8 @@ class DisplaySubscriptionKey extends React.Component {
236
144
  * @returns {boolean}
237
145
  */
238
146
  hasLimitUsersExceeded() {
239
- return this.state.users < this.state.activeUsers;
147
+ const subscription = this.props.adminSubcriptionContext.getSubscription();
148
+ return subscription.users < this.state.activeUsers;
240
149
  }
241
150
 
242
151
  /**
@@ -288,17 +197,6 @@ class DisplaySubscriptionKey extends React.Component {
288
197
  return duration > -1000 && duration < 0 ? this.translate('Just now') : dateTime.toRelative({locale: this.props.context.locale});
289
198
  }
290
199
 
291
- /**
292
- * Get active users
293
- * @returns {*}
294
- * @constructor
295
- */
296
- async getActiveUsers() {
297
- const users = await this.props.context.port.request("passbolt.users.get-all");
298
- const filterActiveUsers = user => user.active;
299
- return users.filter(filterActiveUsers).length;
300
- }
301
-
302
200
  /**
303
201
  * Get the translate function
304
202
  * @returns {function(...[*]=)}
@@ -312,9 +210,11 @@ class DisplaySubscriptionKey extends React.Component {
312
210
  * @returns {JSX}
313
211
  */
314
212
  render() {
213
+ const subscription = this.props.adminSubcriptionContext.getSubscription();
214
+ const isProcessing = this.props.adminSubcriptionContext.isProcessing();
315
215
  return (
316
216
  <div className="row">
317
- {!this.isLoading() &&
217
+ {!isProcessing &&
318
218
  <div className="subscription-key col8 main-column">
319
219
  <h3><Trans>Subscription key details</Trans></h3>
320
220
  <div className="feedback-card">
@@ -349,31 +249,31 @@ class DisplaySubscriptionKey extends React.Component {
349
249
  <ul>
350
250
  <li className="customer-id">
351
251
  <span className="label"><Trans>Customer id:</Trans></span>
352
- <span className="value">{this.state.customerId}</span>
252
+ <span className="value">{subscription.customerId}</span>
353
253
  </li>
354
254
  <li className="subscription-id">
355
255
  <span className="label"><Trans>Subscription id:</Trans></span>
356
- <span className="value">{this.state.subscriptionId}</span>
256
+ <span className="value">{subscription.subscriptionId}</span>
357
257
  </li>
358
258
  <li className="email">
359
259
  <span className="label"><Trans>Email:</Trans></span>
360
- <span className="value">{this.state.email}</span>
260
+ <span className="value">{subscription.email}</span>
361
261
  </li>
362
262
  <li className="users">
363
263
  <span
364
264
  className={`label ${this.hasLimitUsersExceeded() ? "error" : ""}`}><Trans>Users limit:</Trans></span>
365
265
  <span
366
- className={`value ${this.hasLimitUsersExceeded() ? "error" : ""}`}>{this.state.users} (<Trans>currently:</Trans> {this.state.activeUsers})</span>
266
+ className={`value ${this.hasLimitUsersExceeded() ? "error" : ""}`}>{subscription.users} (<Trans>currently:</Trans> {this.state.activeUsers})</span>
367
267
  </li>
368
268
  <li className="created">
369
269
  <span className="label"><Trans>Valid from:</Trans></span>
370
- <span className="value">{this.formatDate(this.state.created)}</span>
270
+ <span className="value">{this.formatDate(subscription.created)}</span>
371
271
  </li>
372
272
  <li className="expiry">
373
273
  <span
374
274
  className={`label ${this.hasSubscriptionKeyExpired() ? "error" : ""} ${this.hasSubscriptionKeyGoingToExpire() ? "warning" : ""}`}><Trans>Expires on:</Trans></span>
375
275
  <span
376
- className={`value ${this.hasSubscriptionKeyExpired() ? "error" : ""} ${this.hasSubscriptionKeyGoingToExpire() ? "warning" : ""}`}>{this.formatDate(this.state.expiry)} ({`${this.hasSubscriptionKeyExpired() ? this.translate("expired ") : ""}${this.formatDateTimeAgo(this.state.expiry)}`})</span>
276
+ className={`value ${this.hasSubscriptionKeyExpired() ? "error" : ""} ${this.hasSubscriptionKeyGoingToExpire() ? "warning" : ""}`}>{this.formatDate(subscription.expiry)} ({`${this.hasSubscriptionKeyExpired() ? this.translate("expired ") : ""}${this.formatDateTimeAgo(subscription.expiry)}`})</span>
377
277
  </li>
378
278
  </ul>
379
279
  }
@@ -396,7 +296,7 @@ class DisplaySubscriptionKey extends React.Component {
396
296
  </div>
397
297
  </div>
398
298
  }
399
- {!this.isLoading() &&
299
+ {!isProcessing &&
400
300
  <div className="col4 last">
401
301
  <div className="sidebar-help">
402
302
  <h3><Trans>Need help?</Trans></h3>
@@ -417,8 +317,9 @@ DisplaySubscriptionKey.propTypes = {
417
317
  context: PropTypes.any, // The application context
418
318
  navigationContext: PropTypes.any, // The application navigation context
419
319
  administrationWorkspaceContext: PropTypes.object, // The administration workspace context
320
+ adminSubcriptionContext: PropTypes.object, // The administration subscription context
420
321
  dialogContext: PropTypes.any, // The dialog congtext
421
322
  t: PropTypes.func,
422
323
  };
423
324
 
424
- export default withAppContext(withNavigationContext(withAdministrationWorkspace(withDialog(withTranslation('common')(DisplaySubscriptionKey)))));
325
+ export default withAppContext(withNavigationContext(withAdminSubscription(withAdministrationWorkspace(withDialog(withTranslation('common')(DisplaySubscriptionKey))))));
@@ -20,7 +20,6 @@ import {DateTime} from "luxon";
20
20
  import {defaultAppContext} from "../../../contexts/ExtAppContext.test.data";
21
21
  import {defaultDialogContext} from "../../../contexts/DialogContext.test.data";
22
22
  import {defaultNavigationContext} from "../../../contexts/NavigationContext.test.data";
23
- import {defaultAdministrationWorkspaceContext} from "../../../contexts/AdministrationWorkspaceContext.test.data";
24
23
  import MockPort from "../../../test/mock/MockPort";
25
24
 
26
25
  /**
@@ -33,12 +32,15 @@ export function defaultProps(props = {}) {
33
32
  port.addRequestListener('passbolt.users.get-all', () => mockUsers);
34
33
  const defaultContext = {
35
34
  onGetSubscriptionKeyRequested: () => mockSubscription,
36
- port: port
35
+ port: port,
37
36
  };
38
37
 
39
38
  const defaultProps = {
40
39
  context: defaultAppContext(Object.assign(defaultContext, props?.context)),
41
- administrationWorkspaceContext: defaultAdministrationWorkspaceContext(),
40
+ administrationWorkspaceContext: {
41
+ setDisplayAdministrationWorkspaceAction: jest.fn(),
42
+ resetDisplayAdministrationWorkspaceAction: jest.fn()
43
+ },
42
44
  dialogContext: defaultDialogContext(),
43
45
  navigationContext: defaultNavigationContext()
44
46
  };
@@ -120,6 +122,16 @@ export const mockSubscription = {
120
122
  "data": "data"
121
123
  };
122
124
 
125
+ export const mockSubscriptionModel = {
126
+ "created": "2020-12-01T00:00:00.661Z",
127
+ "customerId": "1n6BPvHRWfizhmARz",
128
+ "data": "data",
129
+ "email": "ada@passbolt.com",
130
+ "expiry": expiredDate.toISOString(),
131
+ "subscriptionId": "1n6BPvHRWfizhmARz",
132
+ "users": 5,
133
+ };
134
+
123
135
  export const mockSubscriptionUsersExceeded = {
124
136
  "customer_id": "1n6BPvHRWfizhmARz",
125
137
  "subscription_id": "1n6BPvHRWfizhmARz",
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import {
19
19
  defaultProps, formatDate,
20
- mockSubscription, mockSubscriptionExpired, mockSubscriptionUpdated,
20
+ mockSubscription, mockSubscriptionExpired,
21
21
  mockSubscriptionUsersExceeded,
22
22
  mockUsers
23
23
  } from "./DisplaySubscriptionKey.test.data";
@@ -27,16 +27,14 @@ import {waitFor} from "@testing-library/react";
27
27
  import {DateTime} from "luxon";
28
28
  import EditSubscriptionKey from "../EditSubscriptionKey/EditSubscriptionKey";
29
29
  import PassboltSubscriptionError from "../../../lib/Error/PassboltSubscriptionError";
30
- import {defaultAdministrationWorkspaceContext} from "../../../contexts/AdministrationWorkspaceContext.test.data";
31
30
 
32
31
  beforeEach(() => {
33
32
  jest.resetModules();
34
33
  });
35
34
 
36
- describe("As AD I should see the subscription", () => {
35
+ describe("DisplaySubscriptionKeyPage", () => {
37
36
  let page; // The page to test against
38
37
  const props = defaultProps(); // The props to pass
39
-
40
38
  describe(' As AD I can see the subscription', () => {
41
39
  /**
42
40
  * Given a valid subscription
@@ -47,7 +45,7 @@ describe("As AD I should see the subscription", () => {
47
45
  * And I should be able to identify when the subscription expire
48
46
  */
49
47
  it('As AD I should see all details about the subscription', async() => {
50
- page = new DisplaySubscriptionKeyPage(props);
48
+ page = new DisplaySubscriptionKeyPage(props.context, props);
51
49
  await waitFor(() => {});
52
50
  expect(page.exists()).toBeTruthy();
53
51
  expect(page.title).toBe("Subscription key details");
@@ -68,7 +66,7 @@ describe("As AD I should see the subscription", () => {
68
66
  jest.spyOn(props.context, 'onGetSubscriptionKeyRequested').mockImplementationOnce(() => {
69
67
  throw new PassboltSubscriptionError("users exceeded", mockSubscriptionUsersExceeded);
70
68
  });
71
- page = new DisplaySubscriptionKeyPage(props);
69
+ page = new DisplaySubscriptionKeyPage(props.context, props);
72
70
  await waitFor(() => {});
73
71
 
74
72
  expect(page.subscriptionDetailsTitle).toBe("Your subscription key is not valid.");
@@ -90,7 +88,7 @@ describe("As AD I should see the subscription", () => {
90
88
  jest.spyOn(props.context, 'onGetSubscriptionKeyRequested').mockImplementationOnce(() => {
91
89
  throw new PassboltSubscriptionError("key expired", mockSubscriptionExpired);
92
90
  });
93
- page = new DisplaySubscriptionKeyPage(props);
91
+ page = new DisplaySubscriptionKeyPage(props.context, props);
94
92
  await waitFor(() => {});
95
93
 
96
94
  expect(page.subscriptionDetailsTitle).toBe("Your subscription key is not valid.");
@@ -108,11 +106,13 @@ describe("As AD I should see the subscription", () => {
108
106
  expect(props.navigationContext.onGoToNewTab).toHaveBeenCalledWith(`https://www.passbolt.com/subscription/ee/update/renew?subscription_id=${mockSubscriptionExpired.subscription_id}&customer_id=${mockSubscriptionExpired.customer_id}`);
109
107
  });
110
108
 
109
+
111
110
  it('As AD I should be able to identify if the key is missing', async() => {
111
+ expect.assertions(4);
112
112
  jest.spyOn(props.context, 'onGetSubscriptionKeyRequested').mockImplementationOnce(() => {
113
113
  throw new PassboltApiFetchError("missing key", {});
114
114
  });
115
- page = new DisplaySubscriptionKeyPage(props);
115
+ page = new DisplaySubscriptionKeyPage(props.context, props);
116
116
  await waitFor(() => {});
117
117
 
118
118
  expect(page.subscriptionDetailsTitle).toBe("Your subscription key is either missing or not valid.");
@@ -126,67 +126,40 @@ describe("As AD I should see the subscription", () => {
126
126
  expect(props.context.setContext).toHaveBeenCalledWith({editSubscriptionKey});
127
127
  });
128
128
 
129
+
129
130
  it('As AD I should open edit subscription key', async() => {
130
- page = new DisplaySubscriptionKeyPage(props);
131
+ expect.assertions(2);
132
+ page = new DisplaySubscriptionKeyPage(props.context, props);
133
+
131
134
  await waitFor(() => {});
132
135
 
133
- props.administrationWorkspaceContext = defaultAdministrationWorkspaceContext({
134
- must: {
135
- editSubscriptionKey: true,
136
- refreshSubscriptionKey: false
137
- },
138
- });
139
136
  const editSubscriptionKey = {
140
137
  key: mockSubscription.data
141
138
  };
142
139
 
143
- page.rerender(props);
144
- await waitFor(() => {});
140
+ await page.updateKey();
141
+
145
142
  expect(props.dialogContext.open).toHaveBeenCalledWith(EditSubscriptionKey);
146
143
  expect(props.context.setContext).toHaveBeenCalledWith({editSubscriptionKey});
147
- expect(props.administrationWorkspaceContext.onResetActionsSettings).toHaveBeenCalled();
148
- });
149
-
150
- it('As AD I should refresh the subscription key', async() => {
151
- page = new DisplaySubscriptionKeyPage(props);
152
- await waitFor(() => {});
153
-
154
- props.context.onGetSubscriptionKeyRequested = () => mockSubscriptionUpdated;
155
- props.administrationWorkspaceContext = defaultAdministrationWorkspaceContext({
156
- must: {
157
- editSubscriptionKey: false,
158
- refreshSubscriptionKey: true
159
- },
160
- });
161
-
162
- page.rerender(props);
163
- await waitFor(() => {
164
- expect(page.customerId).toBe(mockSubscriptionUpdated.customer_id);
165
- expect(page.subscriptionId).toBe(mockSubscriptionUpdated.subscription_id);
166
- expect(page.email).toBe(mockSubscriptionUpdated.email);
167
- expect(page.users).toBe(`${mockSubscriptionUpdated.users} (currently: ${mockUsers.length})`);
168
- expect(page.created).toBe(`${formatDate(mockSubscriptionUpdated.created)}`);
169
- expect(page.expiry).toBe(`${formatDate(mockSubscriptionUpdated.expiry)} (expired ${DateTime.fromISO(mockSubscriptionUpdated.expiry).toRelative()})`);
170
- expect(props.administrationWorkspaceContext.onResetActionsSettings).toHaveBeenCalled();
171
- });
172
144
  });
173
145
  });
174
146
 
175
147
  describe(' As AD I see an error if no subscription was found', () => {
176
- /**
177
- * Given no subscription was found
178
- * When I go to the subscription
179
- * Then I should see an error
180
- */
148
+ /**
149
+ * Given no subscription was found
150
+ * When I go to the subscription
151
+ * Then I should see an error
152
+ */
153
+
181
154
 
182
155
  it('As AD I should see an error if no subscription key was found', async() => {
156
+ expect.assertions(4);
183
157
  jest.spyOn(props.context, 'onGetSubscriptionKeyRequested').mockImplementationOnce(() => {
184
158
  throw new PassboltApiFetchError("no subscription key", "");
185
159
  });
186
160
 
187
- page = new DisplaySubscriptionKeyPage(props);
161
+ page = new DisplaySubscriptionKeyPage(props.context, props);
188
162
  await waitFor(() => {});
189
-
190
163
  expect(page.subscriptionDetailsTitle).toBe("Your subscription key is either missing or not valid.");
191
164
  expect(page.contactUs.getAttribute("href")).toBe("https://www.passbolt.com/contact");
192
165
 
@@ -14,7 +14,10 @@
14
14
  import {fireEvent, render, waitFor} from "@testing-library/react";
15
15
  import React from "react";
16
16
  import DisplaySubscriptionKey from "./DisplaySubscriptionKey";
17
+ import DisplaySubscriptionKeyActions from "../DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions";
17
18
  import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
19
+ import AppContext from "../../../contexts/AppContext";
20
+ import {AdminSubscriptionContextProvider} from '../../../contexts/Administration/AdministrationSubscription/AdministrationSubscription';
18
21
 
19
22
  /**
20
23
  * The DisplaySubscriptionKey component represented as a page
@@ -25,18 +28,15 @@ export default class DisplaySubscriptionKeyPage {
25
28
  * @param appContext An app context
26
29
  * @param props Props to attach
27
30
  */
28
- constructor(props) {
31
+ constructor(appContext, props) {
29
32
  this._page = render(
30
33
  <MockTranslationProvider>
31
- <DisplaySubscriptionKey {...props}/>
32
- </MockTranslationProvider>
33
- );
34
- }
35
-
36
- rerender(props) {
37
- this._page.rerender(
38
- <MockTranslationProvider>
39
- <DisplaySubscriptionKey {...props}/>
34
+ <AppContext.Provider value={appContext}>
35
+ <AdminSubscriptionContextProvider {...props}>
36
+ <DisplaySubscriptionKeyActions {...props}/>
37
+ <DisplaySubscriptionKey {...props}/>
38
+ </AdminSubscriptionContextProvider>
39
+ </AppContext.Provider>
40
40
  </MockTranslationProvider>
41
41
  );
42
42
  }
@@ -132,6 +132,14 @@ export default class DisplaySubscriptionKeyPage {
132
132
  return this._page.container.querySelector('.col4.last a');
133
133
  }
134
134
 
135
+ /**
136
+ * Returns the HTMLElement button of the toolbar that is the "Update key"
137
+ * @returns {HTMLElement}
138
+ */
139
+ get toolbarActionsUpdateButton() {
140
+ return this._page.container.querySelectorAll(".actions-wrapper .actions a")[0];
141
+ }
142
+
135
143
  /**
136
144
  * Returns true if the page object exists in the container
137
145
  */
@@ -153,7 +161,7 @@ export default class DisplaySubscriptionKeyPage {
153
161
  */
154
162
  async updateKey() {
155
163
  const leftClick = {button: 0};
156
- fireEvent.click(this.renewKeyButton, leftClick);
164
+ fireEvent.click(this.toolbarActionsUpdateButton, leftClick);
157
165
  await waitFor(() => {});
158
166
  }
159
167
  }
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  import DisplaySubscriptionKey from "./DisplaySubscriptionKey";
3
+ import {AdminSubscriptionContextProvider} from '../../../contexts/Administration/AdministrationSubscription/AdministrationSubscription';
3
4
  import {
4
5
  defaultProps, expiredProps, goingToExpireProps, notFoundProps, usersExceededProps
5
6
  } from "./DisplaySubscriptionKey.test.data";
@@ -11,9 +12,14 @@ export default {
11
12
  };
12
13
 
13
14
  const Template = args =>
14
- <div className="grid grid-responsive-12">
15
- <DisplaySubscriptionKey {...args}/>
16
- </div>;
15
+ <AdminSubscriptionContextProvider{...args}>
16
+ <div className="panel middle">
17
+ <div className="grid grid-responsive-12">
18
+ <DisplaySubscriptionKey {...args}/>
19
+ </div>
20
+ </div>
21
+ </AdminSubscriptionContextProvider>
22
+ ;
17
23
 
18
24
 
19
25
  export const Initial = Template.bind({});
@@ -17,8 +17,8 @@ import DialogWrapper from "../../Common/Dialog/DialogWrapper/DialogWrapper";
17
17
  import Icon from "../../../../shared/components/Icons/Icon";
18
18
  import DisplayLoadingDialog from "../DisplayLoadingDialog/DisplayLoadingDialog";
19
19
  import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
20
- import {withAdministrationWorkspace} from "../../../contexts/AdministrationWorkspaceContext";
21
20
  import {Trans, withTranslation} from "react-i18next";
21
+ import {withAdminUserDirectory} from "../../../contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext";
22
22
 
23
23
  class DisplaySynchronizeUserDirectoryAdministration extends Component {
24
24
  /**
@@ -62,9 +62,8 @@ class DisplaySynchronizeUserDirectoryAdministration extends Component {
62
62
  */
63
63
  async componentDidMount() {
64
64
  try {
65
- const result = await this.props.administrationWorkspaceContext.onGetSynchronizeUsersDirectoryRequested();
66
- const userDirectorySynchronizeResult = result.body;
67
- this.setState({loading: false, userDirectorySynchronizeResult});
65
+ const result = await this.props.adminUserDirectoryContext.synchronizeUsers();
66
+ this.setState({loading: false, userDirectorySynchronizeResult: result});
68
67
  } catch (error) {
69
68
  await this.handleError(error);
70
69
  }
@@ -350,8 +349,8 @@ class DisplaySynchronizeUserDirectoryAdministration extends Component {
350
349
  DisplaySynchronizeUserDirectoryAdministration.propTypes = {
351
350
  onClose: PropTypes.func,
352
351
  actionFeedbackContext: PropTypes.any, // The action feedback context
353
- administrationWorkspaceContext: PropTypes.object, // The administration workspace context
352
+ adminUserDirectoryContext: PropTypes.object, // The administration user directory context
354
353
  t: PropTypes.func, // The translation function
355
354
  };
356
355
 
357
- export default withActionFeedback(withAdministrationWorkspace(withTranslation('common')(DisplaySynchronizeUserDirectoryAdministration)));
356
+ export default withActionFeedback(withAdminUserDirectory(withTranslation('common')(DisplaySynchronizeUserDirectoryAdministration)));