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,178 @@
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} from "../../../../react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data";
16
+ import {AdminMfaContextProvider} from "./AdministrationMfaContext";
17
+ import {enableFetchMocks} from 'jest-fetch-mock';
18
+ import {mockMfaSettings, mockDuoError} from "../../../../react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data";
19
+ import {mockApiResponse} from "../../../../../test/mocks/mockApiResponse";
20
+ import MfaModel from '../../../../shared/models/Mfa/MfaModel';
21
+ import {mockDefaultMfaModel} from '../../../components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data';
22
+ import MfaDTO from '../../../../shared/models/Mfa/MfaDTO';
23
+
24
+ describe("AdminMfaContext", () => {
25
+ let adminMfaContext; // The adminMfaContext to test
26
+ const props = defaultProps(); // The props to pass
27
+
28
+ //Initialize context by default
29
+ const initContext = async() => {
30
+ fetch.doMock(() => mockApiResponse(mockMfaSettings));
31
+ await adminMfaContext.findMfaSettings();
32
+ };
33
+
34
+ beforeEach(() => {
35
+ jest.resetAllMocks();
36
+ adminMfaContext = new AdminMfaContextProvider(props);
37
+ const setStateMock = state => adminMfaContext.state = Object.assign(adminMfaContext.state, state);
38
+ jest.spyOn(adminMfaContext, "setState").mockImplementation(setStateMock);
39
+ enableFetchMocks();
40
+ });
41
+ describe("AdminMfaContext::findMfaSettings", () => {
42
+ it("should get the current settings and store it in its state", async() => {
43
+ // Mock the call to API
44
+ const mockApiSettingsFetch = fetch.doMockOnceIf(/mfa\/settings.json/, () => mockApiResponse(mockMfaSettings));
45
+ const expectedResult = new MfaModel(mockMfaSettings);
46
+ await adminMfaContext.findMfaSettings();
47
+
48
+ expect.assertions(4);
49
+
50
+ expect(mockApiSettingsFetch).toHaveBeenCalledTimes(1);
51
+ expect(adminMfaContext.getSettings()).toEqual(expectedResult);
52
+ expect(adminMfaContext.getCurrentSettings()).toEqual(expectedResult);
53
+ expect(adminMfaContext.isProcessing()).toBeFalsy();
54
+ });
55
+
56
+ it("should initialize with default value if object is empty", async() => {
57
+ // Mock the call to API
58
+ const mockApiSettingsFetch = fetch.doMockOnceIf(/mfa\/settings.json/, () => mockApiResponse({}));
59
+ await adminMfaContext.findMfaSettings();
60
+
61
+ expect.assertions(4);
62
+
63
+ expect(mockApiSettingsFetch).toHaveBeenCalledTimes(1);
64
+ expect(adminMfaContext.getSettings()).toEqual(mockDefaultMfaModel);
65
+ expect(adminMfaContext.getCurrentSettings()).toEqual(mockDefaultMfaModel);
66
+ expect(adminMfaContext.isProcessing()).toBeFalsy();
67
+ });
68
+
69
+ it("should set processing to true when loading settings", async() => {
70
+ adminMfaContext.setProcessing(false);
71
+ try {
72
+ await adminMfaContext.findMfaSettings();
73
+ } catch {
74
+ expect.assertions(1);
75
+ expect(adminMfaContext.isProcessing()).toBeTruthy();
76
+ }
77
+ });
78
+ });
79
+
80
+ describe("AdminMfaContext::hasSettingsChanges", () => {
81
+ beforeEach(async() => {
82
+ await initContext();
83
+ });
84
+ it("should return true if settings is different then current setting", () => {
85
+ adminMfaContext.setSettings("duoToggle", false);
86
+
87
+ expect.assertions(1);
88
+
89
+ expect(adminMfaContext.hasSettingsChanges()).toBeTruthy();
90
+ });
91
+
92
+ it("should return false if settings is different then current setting", () => {
93
+ adminMfaContext.setSettings("duoToggle", false);
94
+ adminMfaContext.setSettings("duoToggle", true);
95
+
96
+ expect.assertions(1);
97
+
98
+ expect(adminMfaContext.hasSettingsChanges()).toBeFalsy();
99
+ });
100
+ });
101
+
102
+ describe("AdminMfaContext::clearContext", () => {
103
+ beforeEach(async() => {
104
+ await initContext();
105
+ });
106
+ it("should clear the context and set it by default", () => {
107
+ adminMfaContext.setSettings("duoToggle", true);
108
+ adminMfaContext.setSettings("yubikeyToggle", true);
109
+ adminMfaContext.setSettings("toptToggle", true);
110
+ adminMfaContext.clearContext();
111
+
112
+ expect.assertions(5);
113
+
114
+ expect(adminMfaContext.isProcessing()).toBeTruthy();
115
+ expect(adminMfaContext.getCurrentSettings()).toBe(null);
116
+ expect(adminMfaContext.getSettings().duoToggle).toBeFalsy();
117
+ expect(adminMfaContext.getSettings().toptToggle).toBeFalsy();
118
+ expect(adminMfaContext.getSettings().yubikeyToggle).toBeFalsy();
119
+ });
120
+ });
121
+
122
+ describe("AdminMfaContext::save", () => {
123
+ it("should save settings and call findMfaSettings", async() => {
124
+ fetch.doMockOnceIf(/mfa\/settings.json/, () => mockApiResponse({}));
125
+ const findSettings = jest.spyOn(adminMfaContext, "findMfaSettings").mockImplementation();
126
+
127
+ await adminMfaContext.save();
128
+
129
+ expect.assertions(3);
130
+
131
+ expect(adminMfaContext.isProcessing()).toBeTruthy();
132
+ expect(findSettings).toHaveBeenCalled();
133
+ expect(JSON.parse(fetch.mock.calls[0][1].body)).toEqual(expect.objectContaining(new MfaDTO()));
134
+ });
135
+ });
136
+
137
+ describe("AdminMfaContext::setSettings", () => {
138
+ it("should update settings object and not the current object", async() => {
139
+ await initContext();
140
+ adminMfaContext.setSettings("duoToggle", false);
141
+
142
+ expect.assertions(2);
143
+
144
+ expect(adminMfaContext.getCurrentSettings().duoToggle).toBeTruthy();
145
+ expect(adminMfaContext.getSettings().duoToggle).toBeFalsy();
146
+ });
147
+ });
148
+
149
+ describe("AdminMfaContext::errors", () => {
150
+ it("should update error object with targeted property", async() => {
151
+ await initContext();
152
+ adminMfaContext.setError("duoSaltError", "error");
153
+
154
+ expect.assertions(1);
155
+
156
+ expect(adminMfaContext.getErrors().duoSaltError).toBe("error");
157
+ });
158
+
159
+ it("should init errors with default property", async() => {
160
+ expect.assertions(1);
161
+ expect(adminMfaContext.getErrors()).toEqual(adminMfaContext.initErrors());
162
+ });
163
+
164
+ it("should update error object with all properties ", async() => {
165
+ const mockError = mockDuoError();
166
+ adminMfaContext.setErrors(mockError);
167
+
168
+ expect.assertions(4);
169
+
170
+ expect(adminMfaContext.getErrors().duoSaltError).toEqual(mockError.duoSaltError);
171
+ expect(adminMfaContext.getErrors().duoIntegrationKeyError).toEqual(mockError.duoIntegrationKeyError);
172
+ expect(adminMfaContext.getErrors().duoHostnameError).toEqual(mockError.duoHostnameError);
173
+ expect(adminMfaContext.getErrors().duoSecretKeyError).toEqual(mockError.duoSecretKeyError);
174
+ });
175
+ });
176
+ });
177
+
178
+
@@ -0,0 +1,453 @@
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 React from "react";
16
+ import PropTypes from "prop-types";
17
+ import {withAppContext} from "../../AppContext";
18
+ import SelfRegistrationService from "../../../../shared/services/api/selfRegistration/selfRegistrationService";
19
+ import SelfRegistrationDomainsViewModel from "../../../../shared/models/selfRegistration/SelfRegistrationDomainsViewModel";
20
+ import MapObject from "../../../lib/Map/MapObject";
21
+ import SelfRegistrationDto from "../../../../shared/models/selfRegistration/SelfRegistrationDto";
22
+ import SelfRegistrationFormService from "../../../../shared/services/forms/selfRegistration/SelfRegistrationFormService";
23
+ import ConfirmSaveSelfRegistrationSettings from "../../../components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings";
24
+ import NotifyError from "../../../components/Common/Error/NotifyError/NotifyError";
25
+ import {withActionFeedback} from "../../ActionFeedbackContext";
26
+ import {withDialog} from "../../DialogContext";
27
+ import {withTranslation} from "react-i18next";
28
+ import ConfirmDeletionSelfRegistrationSettings from "../../../components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings";
29
+
30
+ /**
31
+ * The Administration Self registration Context
32
+ * @type {React.Context<Object>}
33
+ */
34
+ export const AdminSelfRegistrationContext = React.createContext({
35
+ getCurrentSettings: () => {}, // Returns settings saved
36
+ getAllowedDomains: () => {}, // Returns allowed domains for UI changes
37
+ setAllowedDomains: () => {}, // Returns allowed domains for UI changes
38
+ hasSettingsChanges: () => {}, // Check if the policy has changes
39
+ setDomains: () => {}, // change domains
40
+ findSettings: () => {}, // Find the current self registraiton settings and store it in the state
41
+ setProcessing: () => {}, //Update processing object
42
+ isProcessing: () => {}, // returns true if a process is running and the UI must be disabled
43
+ clearContext: () => {}, // put the data to its default state value
44
+ isSubmitted: () => {}, // returns the value submitted
45
+ setSubmitted: () => {}, // Set the submitted variable
46
+ setErrors: () => {}, // Set errors to object object
47
+ getErrors: () => {}, // Return current errors
48
+ setError: () => {}, // Init errors object message
49
+ save: () => {}, // Save settings,
50
+ delete: () => {}, // Delete settings,
51
+ shouldFocus: () => {}, // Return the focus object,
52
+ setFocus: () => {}, // Set the focus object,
53
+ isSaved: () => {}, // return saved value
54
+ setSaved: () => {}, // init saved value
55
+ validateForm: () => {} // Validate the form
56
+ });
57
+
58
+ /**
59
+ * The Administration self registration context provider
60
+ */
61
+ export class AdminSelfRegistrationContextProvider extends React.Component {
62
+ /**
63
+ * Default constructor
64
+ * @param props The component props
65
+ */
66
+ constructor(props) {
67
+ super(props);
68
+ this.state = this.defaultState;
69
+ const apiClientOptions = props.context.getApiClientOptions();
70
+ this.selfRegistrationService = new SelfRegistrationService(
71
+ apiClientOptions
72
+ );
73
+ this.selfRegistrationFormService = new SelfRegistrationFormService(
74
+ this.props.t
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Returns the default component state
80
+ */
81
+ get defaultState() {
82
+ return {
83
+ errors: new Map(), // The error map object
84
+ submitted: false, // The informations about the form state
85
+ currentSettings: null, // The current settings
86
+ focus: false, // return request to focus to input
87
+ saved: false, // return request to inform about a saved
88
+ domains: new SelfRegistrationDomainsViewModel(), // Change done to the allowed domains object
89
+ processing: true, // Context is processing data
90
+ getCurrentSettings: this.getCurrentSettings.bind(this), // Returns settings saved
91
+ getAllowedDomains: this.getAllowedDomains.bind(this), // Returns allowed domains for UI changes
92
+ setAllowedDomains: this.setAllowedDomains.bind(this), // Returns allowed domains for UI changes
93
+ setDomains: this.setDomains.bind(this), // change domains
94
+ findSettings: this.findSettings.bind(this), // Find the current self registraiton settings and store it in the state
95
+ hasSettingsChanges: this.hasSettingsChanges.bind(this), // Check if setting has changes
96
+ isProcessing: this.isProcessing.bind(this), // returns true if a process is running and the UI must be disabled
97
+ setProcessing: this.setProcessing.bind(this),
98
+ clearContext: this.clearContext.bind(this), // put the data to its default state value
99
+ isSubmitted: this.isSubmitted.bind(this), // returns the value submitted
100
+ setSubmitted: this.setSubmitted.bind(this), // Set the submitted variable
101
+ getErrors: this.getErrors.bind(this), // Return current errors
102
+ setError: this.setError.bind(this), // Set an error to object object
103
+ setErrors: this.setErrors.bind(this), // Set errors to object object
104
+ save: this.save.bind(this), // Save the policy changes
105
+ shouldFocus: this.shouldFocus.bind(this), // Return the focus object,
106
+ setFocus: this.setFocus.bind(this), // Set the focus object
107
+ isSaved: this.isSaved.bind(this), // return saved value
108
+ setSaved: this.setSaved.bind(this), // init saved value
109
+ deleteSettings: this.deleteSettings.bind(this), // Delete settings,
110
+ validateForm: this.validateForm.bind(this), // Validate the form
111
+ };
112
+ }
113
+
114
+ /**
115
+ * Find the self registration settings
116
+ * @return {Promise<void>}
117
+ */
118
+ async findSettings(callback = () => {}) {
119
+ this.setProcessing(true);
120
+ const result = await this.selfRegistrationService.find();
121
+ //Init saved setting
122
+ this.setState({currentSettings: result});
123
+ const domains = new SelfRegistrationDomainsViewModel(result);
124
+ //Init allowed domains which will interact with UI
125
+ this.setDomains(domains, callback);
126
+ this.setProcessing(false);
127
+ }
128
+
129
+ /**
130
+ * Returns the setting actually saved inside DB
131
+ * @returns {object}
132
+ */
133
+ getCurrentSettings() {
134
+ return this.state.currentSettings;
135
+ }
136
+
137
+ /**
138
+ * Returns the allowed domains settings that have been fetch previously.
139
+ * @returns {object}
140
+ */
141
+ getAllowedDomains() {
142
+ return this.state.domains.allowedDomains;
143
+ }
144
+
145
+
146
+ /**
147
+ * Handle settings changes.
148
+ * @params {ReactEvent} The react event
149
+ * @returns {void}
150
+ */
151
+ setAllowedDomains(key, value, callback = () => {}) {
152
+ this.setState(prevState => {
153
+ const allowedDomains = MapObject.clone(prevState.domains.allowedDomains);
154
+ allowedDomains.set(key, value);
155
+ return {domains: {allowedDomains}};
156
+ }, callback);
157
+ }
158
+
159
+ /**
160
+ * Handle domains changes.
161
+ * @params {ReactEvent} The react event
162
+ * @returns {void}
163
+ */
164
+ setDomains(domains, callback = () => {}) {
165
+ this.setState({domains}, callback);
166
+ }
167
+
168
+ /**
169
+ * Returns true when the data is under processing
170
+ * @returns {boolean}
171
+ *
172
+ */
173
+ isProcessing() {
174
+ return this.state.processing;
175
+ }
176
+
177
+ /**
178
+ * Handle processing change.
179
+ * @params {Boolean} processing value
180
+ * @returns {void}
181
+ */
182
+ setProcessing(processing) {
183
+ this.setState({processing});
184
+ }
185
+
186
+ /**
187
+ * return true if the form has been submitted
188
+ * @returns {Boolean}
189
+ */
190
+ isSubmitted() {
191
+ return this.state.submitted;
192
+ }
193
+
194
+ /**
195
+ * change value for isSubmitted
196
+ * @params {Boolean}
197
+ * @returns {Boolean}
198
+ */
199
+ setSubmitted(submitted) {
200
+ this.setState({submitted});
201
+ this.setFocus(submitted);
202
+ }
203
+
204
+ /**
205
+ * return the errors object
206
+ */
207
+ getErrors() {
208
+ return this.state.errors;
209
+ }
210
+
211
+ /**
212
+ * return the focus object
213
+ */
214
+ shouldFocus() {
215
+ return this.state.focus;
216
+ }
217
+
218
+ /**
219
+ * change value for isSubmitted
220
+ * @params {Boolean}
221
+ * @returns {Boolean}
222
+ */
223
+ setFocus(focus) {
224
+ this.setState({focus});
225
+ }
226
+
227
+ /**
228
+ * set an error to object
229
+ */
230
+ setError(key, value) {
231
+ this.setState(prevState => {
232
+ const errors = MapObject.clone(prevState.errors);
233
+ errors.set(key, value);
234
+ return {errors};
235
+ });
236
+ }
237
+
238
+ /**
239
+ * set errors to object
240
+ */
241
+ setErrors(errors) {
242
+ this.setState({errors});
243
+ }
244
+
245
+ /**
246
+ * Check if there are changes to apply
247
+ * @returns {Boolean}
248
+ */
249
+ hasSettingsChanges() {
250
+ // we compare the domains from the server vs the UI
251
+ const savedDomains = this.state.currentSettings?.data?.allowed_domains || [];
252
+ const uiDomains = MapObject.listValues(this.state.domains.allowedDomains);
253
+
254
+ return (
255
+ (JSON.stringify(savedDomains) !== JSON.stringify(uiDomains))
256
+ );
257
+ }
258
+
259
+ /**
260
+ * Puts the state to its default in order to avoid keeping the data users didn't want to save.
261
+ */
262
+ clearContext() {
263
+ const {currentSettings, domains, processing} = this.defaultState;
264
+ this.setState({
265
+ currentSettings,
266
+ domains,
267
+ processing,
268
+ });
269
+ }
270
+
271
+ /**
272
+ * Whenever the save has been requested
273
+ */
274
+ async save() {
275
+ this.setSubmitted(true);
276
+ const isValid = await this.validateForm();
277
+ if (isValid) {
278
+ if (this.hasSettingsChanges() && this.getAllowedDomains().size === 0) {
279
+ this.displayConfirmDeletionDialog();
280
+ } else {
281
+ this.displayConfirmSummaryDialog();
282
+ }
283
+ }
284
+ }
285
+
286
+ /**
287
+ * validate the form
288
+ * @returns {void}
289
+ */
290
+ async validateForm() {
291
+ const errors = await this.selfRegistrationFormService.validate(this.state.getAllowedDomains());
292
+ this.state.setErrors(errors);
293
+ return errors.size === 0;
294
+ }
295
+
296
+ /**
297
+ * Handle save operation error.
298
+ * @param {object} error The returned error
299
+ */
300
+ async handleSubmitError(error) {
301
+ if (error.name !== "UserAbortsOperationError") {
302
+ // Unexpected error occurred.
303
+ console.error(error);
304
+ await this.handleError(error);
305
+ }
306
+ }
307
+
308
+ /**
309
+ * Whenever the submit request is done
310
+ */
311
+ async saveSettings() {
312
+ try {
313
+ this.setProcessing(true);
314
+ const newSettings = new SelfRegistrationDto(
315
+ this.state.domains,
316
+ this.state.currentSettings
317
+ );
318
+ await this.selfRegistrationService.save(newSettings);
319
+ await this.findSettings(() => this.setSaved(true));
320
+ await this.props.actionFeedbackContext.displaySuccess(
321
+ this.props.t(
322
+ "The self registration settings for the organization were updated."
323
+ )
324
+ );
325
+ } catch (error) {
326
+ this.handleSubmitError(error);
327
+ } finally {
328
+ this.setProcessing(false);
329
+ this.setSubmitted(false);
330
+ }
331
+ }
332
+
333
+ /**
334
+ * handle error to display the error dialog
335
+ * @param error
336
+ */
337
+ async handleError(error) {
338
+ this.handleCloseDialog();
339
+ const errorDialogProps = {
340
+ error: error,
341
+ };
342
+ this.props.dialogContext.open(NotifyError, errorDialogProps);
343
+ }
344
+
345
+ /**
346
+ * Handle close dialog
347
+ */
348
+ handleCloseDialog() {
349
+ this.props.dialogContext.close();
350
+ }
351
+
352
+ /**
353
+ * Display the confirmation summary dialog
354
+ * @returns {Promise<void>}
355
+ */
356
+ displayConfirmSummaryDialog() {
357
+ this.props.dialogContext.open(ConfirmSaveSelfRegistrationSettings, {
358
+ domains: this.getAllowedDomains(),
359
+ onSubmit: () => this.saveSettings(),
360
+ onClose: () => this.handleCloseDialog(),
361
+ });
362
+ }
363
+
364
+ /**
365
+ * Display the confirmation dialog for deletion seytings
366
+ * @returns {Promise<void>}
367
+ */
368
+ displayConfirmDeletionDialog() {
369
+ this.props.dialogContext.open(ConfirmDeletionSelfRegistrationSettings, {
370
+ onSubmit: () => this.deleteSettings(),
371
+ onClose: () => this.handleCloseDialog(),
372
+ });
373
+ }
374
+
375
+ /**
376
+ * Whenever the delete has been requested
377
+ */
378
+ async deleteSettings() {
379
+ try {
380
+ this.setProcessing(true);
381
+ await this.selfRegistrationService.delete(this.state.currentSettings.id);
382
+ await this.findSettings();
383
+ await this.props.actionFeedbackContext.displaySuccess(
384
+ this.props.t(
385
+ "The self registration settings for the organization were updated."
386
+ )
387
+ );
388
+ } catch (error) {
389
+ this.handleSubmitError(error);
390
+ } finally {
391
+ this.setProcessing(false);
392
+ this.setSubmitted(false);
393
+ }
394
+ }
395
+
396
+ /**
397
+ * return the saved state
398
+ */
399
+ isSaved() {
400
+ return this.state.saved;
401
+ }
402
+
403
+ /**
404
+ * Set saved state
405
+ * @Param {Boolean}
406
+ */
407
+ setSaved(saved) {
408
+ return this.setState({saved});
409
+ }
410
+
411
+ /**
412
+ * Render the component
413
+ * @returns {JSX}
414
+ */
415
+ render() {
416
+ return (
417
+ <AdminSelfRegistrationContext.Provider value={this.state}>
418
+ {this.props.children}
419
+ </AdminSelfRegistrationContext.Provider>
420
+ );
421
+ }
422
+ }
423
+
424
+ AdminSelfRegistrationContextProvider.propTypes = {
425
+ context: PropTypes.any, // The application context
426
+ children: PropTypes.any, // The children components
427
+ t: PropTypes.any, // The translate context
428
+ dialogContext: PropTypes.any, // The dialog context
429
+ actionFeedbackContext: PropTypes.object, // The action feedback context
430
+ };
431
+
432
+ export default withAppContext(withDialog(withActionFeedback(withTranslation("common")(AdminSelfRegistrationContextProvider))));
433
+
434
+ /**
435
+ * Resource Workspace Context Consumer HOC
436
+ * @param WrappedComponent
437
+ */
438
+ export function withAdminSelfRegistration(WrappedComponent) {
439
+ return class WithAdminSelfRegistration extends React.Component {
440
+ render() {
441
+ return (
442
+ <AdminSelfRegistrationContext.Consumer>
443
+ {adminSelfRegistrationContext => (
444
+ <WrappedComponent
445
+ adminSelfRegistrationContext={adminSelfRegistrationContext}
446
+ {...this.props}
447
+ />
448
+ )}
449
+ </AdminSelfRegistrationContext.Consumer>
450
+ );
451
+ }
452
+ };
453
+ }