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
@@ -22,6 +22,7 @@ import UserSettings from "../shared/lib/Settings/UserSettings";
22
22
  import OrchestrateLoginBoxMain from "./components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain";
23
23
  import Footer from "./components/Common/Footer/Footer";
24
24
  import OrchestrateLoginBoxFooter from "./components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxFooter";
25
+ import SsoContextProvider from "./contexts/SsoContext";
25
26
 
26
27
  /**
27
28
  * The login application served by the browser extension.
@@ -127,22 +128,24 @@ class ExtAuthenticationLogin extends Component {
127
128
  {this.isReady() &&
128
129
  <TranslationProvider loadingPath="/webAccessibleResources/locales/{{lng}}/{{ns}}.json">
129
130
  <Router>
130
- <AuthenticationLoginContextProvider>
131
- <div id="container" className="container page login">
132
- <div className="content">
133
- <div className="header">
134
- <div className="logo"><span className="visually-hidden">Passbolt</span></div>
135
- </div>
136
- <div className="login-form">
137
- <OrchestrateLoginBoxMain/>
138
- </div>
139
- <div className="login-box-footer">
140
- <OrchestrateLoginBoxFooter/>
131
+ <SsoContextProvider>
132
+ <AuthenticationLoginContextProvider>
133
+ <div id="container" className="container page login">
134
+ <div className="content">
135
+ <div className="header">
136
+ <div className="logo"><span className="visually-hidden">Passbolt</span></div>
137
+ </div>
138
+ <div className="login-form">
139
+ <OrchestrateLoginBoxMain/>
140
+ </div>
141
+ <div className="login-box-footer">
142
+ <OrchestrateLoginBoxFooter/>
143
+ </div>
141
144
  </div>
142
145
  </div>
143
- </div>
144
- <Footer/>
145
- </AuthenticationLoginContextProvider>
146
+ <Footer/>
147
+ </AuthenticationLoginContextProvider>
148
+ </SsoContextProvider>
146
149
  </Router>
147
150
  </TranslationProvider>
148
151
  }
@@ -157,4 +160,3 @@ ExtAuthenticationLogin.propTypes = {
157
160
  };
158
161
 
159
162
  export default ExtAuthenticationLogin;
160
-
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.9.0
13
+ */
14
+ import React from "react";
15
+ import ExtAuthenticationLogin from "./ExtAuthenticationLogin";
16
+ import MockPort from "./test/mock/MockPort";
17
+ import siteSettingsFixture from "./test/fixture/Settings/siteSettings";
18
+ import mockStorage from "../../demo/ext-app/mock/mockStorage";
19
+
20
+ export default {
21
+ title: 'Components/ExtAuthenticationLogin/ExtAuthenticationLogin',
22
+ component: ExtAuthenticationLogin
23
+ };
24
+
25
+ function getMockedPort() {
26
+ const mockedPort = new MockPort();
27
+ mockedPort.addRequestListener("passbolt.organization-settings.get", () => siteSettingsFixture);
28
+ mockedPort.addRequestListener("passbolt.locale.get", () => ({
29
+ locale: 'en-UK',
30
+ label: 'English'
31
+ }));
32
+ return mockedPort;
33
+ }
34
+
35
+ const mockedStorage = new mockStorage();
36
+
37
+ const Template = args => <ExtAuthenticationLogin {...args}/>;
38
+
39
+ const defaultParameters = {
40
+ css: "ext_authentication"
41
+ };
42
+
43
+ export const Initial = Template.bind({});
44
+ Initial.args = {
45
+ port: getMockedPort(),
46
+ storage: mockedStorage
47
+ };
48
+ Initial.parameters = defaultParameters;
49
+
50
+ const mockedPortWithSso = getMockedPort();
51
+ const ssoLocalConfiguredProvider = "azure";
52
+ mockedPortWithSso.addRequestListener("passbolt.sso.get-local-configured-provider", () => ssoLocalConfiguredProvider);
53
+
54
+ export const WithSsoKitAvailable = Template.bind({});
55
+ WithSsoKitAvailable.args = {
56
+ port: mockedPortWithSso,
57
+ storage: mockedStorage
58
+ };
59
+ WithSsoKitAvailable.parameters = defaultParameters;
@@ -140,6 +140,7 @@ class ExtBootstrapApp extends Component {
140
140
  "/app/account-recovery/requests/review/:accountRecoveryRequestId",
141
141
  "/app/administration/subscription",
142
142
  "/app/administration/account-recovery",
143
+ "/app/administration/sso",
143
144
  "/app/folders/view/:filterByFolderId",
144
145
  "/app/groups/view/:selectedGroupId",
145
146
  "/app/groups/edit/:selectedGroupId",
@@ -36,6 +36,8 @@ import ManageAccountRecoveryAdministrationSettings
36
36
  from "./ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings";
37
37
  import ManageSmtpAdministrationSettings
38
38
  from "./ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.js";
39
+ import DisplaySelfRegistrationAdministration from "./DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration";
40
+ import ManageSsoSettings from "./ManageSsoSettings/ManageSsoSettings";
39
41
 
40
42
  class AdministrationWorkspace extends Component {
41
43
  /**
@@ -94,6 +96,22 @@ class AdministrationWorkspace extends Component {
94
96
  return AdministrationWorkspaceMenuTypes.SMTP_SETTINGS === this.props.administrationWorkspaceContext.selectedAdministration;
95
97
  }
96
98
 
99
+ /**
100
+ * If Self registration settings menu is selected
101
+ * @returns {boolean}
102
+ */
103
+ isSelfRegistrationSelected() {
104
+ return AdministrationWorkspaceMenuTypes.SELF_REGISTRATION === this.props.administrationWorkspaceContext.selectedAdministration;
105
+ }
106
+
107
+ /**
108
+ * If SSO menu is selected
109
+ * @returns {boolean}
110
+ */
111
+ isSsoSelected() {
112
+ return AdministrationWorkspaceMenuTypes.SSO === this.props.administrationWorkspaceContext.selectedAdministration;
113
+ }
114
+
97
115
  render() {
98
116
  const AdministrationWorkspaceAction = this.props.administrationWorkspaceContext.administrationWorkspaceAction;
99
117
  return (
@@ -141,6 +159,12 @@ class AdministrationWorkspace extends Component {
141
159
  {this.isSmtpSettingsSelected() &&
142
160
  <ManageSmtpAdministrationSettings/>
143
161
  }
162
+ {this.isSelfRegistrationSelected() &&
163
+ <DisplaySelfRegistrationAdministration/>
164
+ }
165
+ {this.isSsoSelected() &&
166
+ <ManageSsoSettings/>
167
+ }
144
168
  </div>
145
169
  </div>
146
170
  </div>
@@ -3,8 +3,8 @@
3
3
  * @param appContext An existing app context
4
4
  * @returns {any | ({userSettings: UserSettings, siteSettings: SiteSettings, port: MockPort} & {})}
5
5
  */
6
- import DisplayAdministrationWorkspaceActions
7
- from "./DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions";
6
+
7
+ import DisplayAdministrationEmailNotificationActions from "./DisplayAdministrationWorkspaceActions/DisplayAdministrationEmailNotificationActions/DisplayAdministrationEmailNotificationActions";
8
8
 
9
9
  export function defaultAppContext(appContext) {
10
10
  const defaultAppContext = {
@@ -25,7 +25,7 @@ export function defaultProps(selectedAdministration) {
25
25
  },
26
26
  administrationWorkspaceContext: {
27
27
  selectedAdministration,
28
- administrationWorkspaceAction: DisplayAdministrationWorkspaceActions
28
+ administrationWorkspaceAction: DisplayAdministrationEmailNotificationActions
29
29
  }
30
30
  };
31
31
  }
@@ -23,7 +23,6 @@ import AdministrationWorkspacePage from "./AdministrationWorkspace.test.page";
23
23
  import {waitFor} from "@testing-library/dom";
24
24
  import {AdministrationWorkspaceMenuTypes} from "../../contexts/AdministrationWorkspaceContext";
25
25
 
26
- jest.mock("./DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions", () => () => <></>); // eslint-disable-line no-use-before-define
27
26
  jest.mock("./DisplayAdministrationMenu/DisplayAdministrationMenu", () => () => <></>);
28
27
  jest.mock("./DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb", () => () => <></>);
29
28
  jest.mock("./DisplayMfaAdministration/DisplayMfaAdministration", () => () => <span className="mfa-details"></span>);
@@ -32,6 +31,7 @@ jest.mock("./DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAd
32
31
  jest.mock("./DisplaySubscriptionKey/DisplaySubscriptionKey", () => () => <span className="subscription-key-details"></span>);
33
32
  jest.mock("./DisplayInternationalizationAdministration/DisplayInternationalizationAdministration", () => () => <span className="internationalization-details"></span>);
34
33
  jest.mock("./ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings", () => () => <span className="account-recovery-details"></span>);
34
+ jest.mock("./DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration", () => () => <span className="self-registration-details"></span>);
35
35
 
36
36
  beforeEach(() => {
37
37
  jest.resetModules();
@@ -106,5 +106,17 @@ describe("Display Administration Workspace", () => {
106
106
  expect(page.isInternationalizationSelected).toBeFalsy();
107
107
  expect(page.isAccountRecoverySelected).toBeTruthy();
108
108
  });
109
+
110
+ it('As AD, I should see the self registration details area', async() => {
111
+ page = new AdministrationWorkspacePage(context, defaultProps(AdministrationWorkspaceMenuTypes.SELF_REGISTRATION));
112
+ await waitFor(() => {});
113
+ expect(page.isMfaSelected).toBeFalsy();
114
+ expect(page.isUserDirectorySelected).toBeFalsy();
115
+ expect(page.isEmailNotificationsSelected).toBeFalsy();
116
+ expect(page.isSubscriptionKeySelected).toBeFalsy();
117
+ expect(page.isInternationalizationSelected).toBeFalsy();
118
+ expect(page.isAccountRecoverySelected).toBeFalsy();
119
+ expect(page.isSelfRegistrationSelected).toBeTruthy();
120
+ });
109
121
  });
110
122
 
@@ -82,5 +82,12 @@ export default class AdministrationWorkspacePage {
82
82
  get isAccountRecoverySelected() {
83
83
  return Boolean(this._page.container.querySelector('.account-recovery-details'));
84
84
  }
85
+
86
+ /**
87
+ * Returns true if the account recovery area is visible
88
+ */
89
+ get isSelfRegistrationSelected() {
90
+ return Boolean(this._page.container.querySelector('.self-registration-details'));
91
+ }
85
92
  }
86
93
 
@@ -0,0 +1,101 @@
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.9.0
13
+ */
14
+ import React from "react";
15
+ import PropTypes from "prop-types";
16
+ import {Trans, withTranslation} from "react-i18next";
17
+ import DialogWrapper from "../../Common/Dialog/DialogWrapper/DialogWrapper";
18
+ import {withAdminSso} from "../../../contexts/AdminSsoContext";
19
+ import FormCancelButton from "../../Common/Inputs/FormSubmitButton/FormCancelButton";
20
+ import FormSubmitButton from "../../Common/Inputs/FormSubmitButton/FormSubmitButton";
21
+
22
+
23
+ class ConfirmDeleteSsoSettingsDialog extends React.Component {
24
+ /**
25
+ * Constructor
26
+ * @param {Object} props
27
+ */
28
+ constructor(props) {
29
+ super(props);
30
+ this.state = this.defaultState;
31
+ this.bindCallbacks();
32
+ }
33
+
34
+ /**
35
+ * Get default state
36
+ * @returns {Object}
37
+ */
38
+ get defaultState() {
39
+ return {
40
+ processing: false
41
+ };
42
+ }
43
+
44
+ /**
45
+ * Bind callbacks
46
+ */
47
+ bindCallbacks() {
48
+ this.handleConfirmDelete = this.handleConfirmDelete.bind(this);
49
+ }
50
+
51
+ /**
52
+ * Handles the form submission
53
+ * @param {Event} event
54
+ * @returns {Promise<void>}
55
+ */
56
+ async handleConfirmDelete(event) {
57
+ event.preventDefault();
58
+ this.setState({processing: true});
59
+ await this.props.adminSsoContext.deleteSettings();
60
+ this.props.onClose();
61
+ this.setState({processing: false});
62
+ }
63
+
64
+ /**
65
+ * Returns true if the input must be disabled.
66
+ * @returns {boolean}
67
+ */
68
+ hasAllInputDisabled() {
69
+ return this.state.processing;
70
+ }
71
+
72
+ /**
73
+ * Render the component
74
+ * @returns {JSX}
75
+ */
76
+ render() {
77
+ const isDisabled = this.hasAllInputDisabled();
78
+ return (
79
+ <DialogWrapper className='delete-sso-settings-dialog' title={this.props.t("Disable Single Sign-On settings?")} onClose={this.props.onClose} disabled={isDisabled}>
80
+ <form onSubmit={this.handleConfirmDelete} noValidate>
81
+ <div className="form-content">
82
+ <p><Trans>Are you sure you want to disable the current Single Sign-On settings?</Trans></p>
83
+ <p><Trans>This action cannot be undone. All the data associated with SSO will be permanently deleted.</Trans></p>
84
+ </div>
85
+ <div className="submit-wrapper clearfix">
86
+ <FormCancelButton disabled={isDisabled} onClick={this.props.onClose}/>
87
+ <FormSubmitButton warning={true} disabled={isDisabled} processing={this.state.processing} value={this.props.t("Disable")}/>
88
+ </div>
89
+ </form>
90
+ </DialogWrapper>
91
+ );
92
+ }
93
+ }
94
+
95
+ ConfirmDeleteSsoSettingsDialog.propTypes = {
96
+ adminSsoContext: PropTypes.object, // The administration SSO settings context
97
+ onClose: PropTypes.func, // The close dialog callback
98
+ t: PropTypes.func, // The translation function
99
+ };
100
+
101
+ export default withAdminSso(withTranslation('common')(ConfirmDeleteSsoSettingsDialog));
@@ -0,0 +1,23 @@
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.9.0
13
+ */
14
+
15
+ export function defaultProps(props = {}) {
16
+ const _props = {
17
+ adminSsoContext: {
18
+ deleteSettings: () => { console.log("Delete settings confirmed!"); }
19
+ },
20
+ onClose: () => { console.log("Close dialog called"); }
21
+ };
22
+ return Object.assign(_props, props);
23
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.9.0
13
+ */
14
+ import React from "react";
15
+ import ConfirmDeleteSsoSettingsDialog from "./ConfirmDeleteSsoSettingsDialog";
16
+ import {defaultProps} from "./ConfirmDeleteSsoSettingsDialog.test.data";
17
+
18
+
19
+ export default {
20
+ title: 'Components/Administration/ConfirmDeleteSsoSettingsDialog',
21
+ component: ConfirmDeleteSsoSettingsDialog
22
+ };
23
+
24
+ const Template = args => <ConfirmDeleteSsoSettingsDialog {...args}/>;
25
+
26
+ export const Default = Template.bind({});
27
+ Default.args = defaultProps();
@@ -223,7 +223,7 @@ class ConfirmSaveAccountRecoverySettings extends Component {
223
223
  }
224
224
  </div>
225
225
  <div className="warning message">
226
- <Trans>Warning, Please review carefully this configuration as it will not be trivial to change this later.</Trans>
226
+ <Trans>Please review carefully this configuration as it will not be trivial to change this later.</Trans>
227
227
  </div>
228
228
  <div className="submit-wrapper clearfix">
229
229
  <a
@@ -19,7 +19,7 @@ import {
19
19
  } from "../../../contexts/AdministrationWorkspaceContext";
20
20
  import {withAppContext} from "../../../contexts/AppContext";
21
21
  import {withRouter} from "react-router-dom";
22
- import {Trans} from "react-i18next";
22
+ import {Trans, withTranslation} from "react-i18next";
23
23
  import {withNavigationContext} from "../../../contexts/NavigationContext";
24
24
 
25
25
  /**
@@ -89,6 +89,24 @@ class DisplayAdministrationMenu extends React.Component {
89
89
  return siteSettings && siteSettings.canIUse('smtpSettings');
90
90
  }
91
91
 
92
+ /**
93
+ * Can I use the self registration settings plugin
94
+ * @returns {boolean}
95
+ */
96
+ get canIUseSelfRegistrationSettings() {
97
+ const siteSettings = this.props.context.siteSettings;
98
+ return siteSettings && siteSettings.canIUse('selfRegistration');
99
+ }
100
+
101
+ /**
102
+ * Can I use the sso plugin
103
+ * @returns {boolean}
104
+ */
105
+ get canIUseSso() {
106
+ const siteSettings = this.props.context.siteSettings;
107
+ return siteSettings && siteSettings.canIUse('sso');
108
+ }
109
+
92
110
  /**
93
111
  * Bind callbacks methods
94
112
  */
@@ -100,6 +118,8 @@ class DisplayAdministrationMenu extends React.Component {
100
118
  this.handleInternationalizationClick = this.handleInternationalizationClick.bind(this);
101
119
  this.handleAccountRecoveryClick = this.handleAccountRecoveryClick.bind(this);
102
120
  this.handleSmtpSettingsClick = this.handleSmtpSettingsClick.bind(this);
121
+ this.handleSelfRegistrationClick = this.handleSelfRegistrationClick.bind(this);
122
+ this.handleSsoClick = this.handleSsoClick.bind(this);
103
123
  }
104
124
 
105
125
  /**
@@ -151,6 +171,20 @@ class DisplayAdministrationMenu extends React.Component {
151
171
  this.props.navigationContext.onGoToAdministrationSmtpSettingsRequested();
152
172
  }
153
173
 
174
+ /**
175
+ * Handle when the user click on the self registration settings menu
176
+ */
177
+ handleSelfRegistrationClick() {
178
+ this.props.navigationContext.onGoToAdministrationSelfRegistrationRequested();
179
+ }
180
+
181
+ /**
182
+ * Handle when the user click on the sso menu
183
+ */
184
+ handleSsoClick() {
185
+ this.props.navigationContext.onGoToAdministrationSsoRequested();
186
+ }
187
+
154
188
  /**
155
189
  * If MFA menu is selected
156
190
  * @returns {boolean}
@@ -199,6 +233,14 @@ class DisplayAdministrationMenu extends React.Component {
199
233
  return AdministrationWorkspaceMenuTypes.ACCOUNT_RECOVERY === this.props.administrationWorkspaceContext.selectedAdministration;
200
234
  }
201
235
 
236
+ /**
237
+ * If SSO menu is selected
238
+ * @returns {boolean}
239
+ */
240
+ isSsoSelected() {
241
+ return AdministrationWorkspaceMenuTypes.SSO === this.props.administrationWorkspaceContext.selectedAdministration;
242
+ }
243
+
202
244
  /**
203
245
  * If SMTP settings menu is selected
204
246
  * @returns {boolean}
@@ -207,6 +249,14 @@ class DisplayAdministrationMenu extends React.Component {
207
249
  return AdministrationWorkspaceMenuTypes.SMTP_SETTINGS === this.props.administrationWorkspaceContext.selectedAdministration;
208
250
  }
209
251
 
252
+ /**
253
+ * If Self registration settings menu is selected
254
+ * @returns {boolean}
255
+ */
256
+ isSelfRegistrationSettingsSelected() {
257
+ return AdministrationWorkspaceMenuTypes.SELF_REGISTRATION === this.props.administrationWorkspaceContext.selectedAdministration;
258
+ }
259
+
210
260
  /**
211
261
  * Render the component
212
262
  * @returns {JSX}
@@ -294,6 +344,32 @@ class DisplayAdministrationMenu extends React.Component {
294
344
  </div>
295
345
  </li>
296
346
  }
347
+ {this.canIUseSelfRegistrationSettings &&
348
+ <li id="self_registration_menu">
349
+ <div className={`row ${this.isSelfRegistrationSettingsSelected() ? "selected" : ""}`}>
350
+ <div className="main-cell-wrapper">
351
+ <div className="main-cell">
352
+ <a onClick={this.handleSelfRegistrationClick}>
353
+ <span><Trans>Self Registration</Trans></span>
354
+ </a>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ </li>
359
+ }
360
+ {this.canIUseSso &&
361
+ <li id="sso_menu">
362
+ <div className={`row ${this.isSsoSelected() ? "selected" : ""}`}>
363
+ <div className="main-cell-wrapper">
364
+ <div className="main-cell">
365
+ <a onClick={this.handleSsoClick}>
366
+ <span><Trans>Single Sign-On</Trans></span>&nbsp;<span className="beta chips"><Trans>Beta</Trans></span>
367
+ </a>
368
+ </div>
369
+ </div>
370
+ </div>
371
+ </li>
372
+ }
297
373
  </ul>
298
374
  </div>
299
375
  );
@@ -307,4 +383,4 @@ DisplayAdministrationMenu.propTypes = {
307
383
  navigationContext: PropTypes.any, // The application navigation context
308
384
  };
309
385
 
310
- export default withRouter(withAppContext(withNavigationContext(withAdministrationWorkspace((DisplayAdministrationMenu)))));
386
+ export default withRouter(withAppContext(withNavigationContext(withAdministrationWorkspace(withTranslation("common")(DisplayAdministrationMenu)))));
@@ -29,7 +29,9 @@ export function defaultProps(data = {}) {
29
29
  onGoToAdministrationMfaRequested: jest.fn(),
30
30
  onGoToAdministrationInternationalizationRequested: jest.fn(),
31
31
  onGoToAdministrationAccountRecoveryRequested: jest.fn(),
32
- onGoToAdministrationSmtpSettingsRequested: jest.fn()
32
+ onGoToAdministrationSmtpSettingsRequested: jest.fn(),
33
+ onGoToAdministrationSelfRegistrationRequested: jest.fn(),
34
+ onGoToAdministrationSsoRequested: jest.fn(),
33
35
  }
34
36
  }, data);
35
37
  }
@@ -134,4 +134,64 @@ describe("As AD I can see the administration menu", () => {
134
134
  expect(page.smtpSettings).toBeNull();
135
135
  });
136
136
  });
137
+
138
+ describe("As a logged in administrator in the administrator workspace, I can see the User self registration settings option in the left-side bar", () => {
139
+ it('If the feature flag is true, the menu should be visible', async() => {
140
+ expect.assertions(4);
141
+ const props = defaultProps({
142
+ administrationWorkspaceContext: {selectedAdministration: AdministrationWorkspaceMenuTypes.SELF_REGISTRATION}
143
+ }); // The props to pass
144
+ page = new DisplayAdministrationMenuPage(context, props);
145
+ expect(page.exists()).toBeTruthy();
146
+ await page.goToSelfRegistration();
147
+ expect(page.selfRegistration).toBeTruthy();
148
+ expect(page.menuSelected).toBe('Self Registration');
149
+ expect(props.navigationContext.onGoToAdministrationSelfRegistrationRequested).toHaveBeenCalled();
150
+ });
151
+
152
+ it('If the feature flag is false, the menu should not be visible', async() => {
153
+ expect.assertions(2);
154
+ const props = defaultProps({
155
+ context: {
156
+ siteSettings: {
157
+ canIUse: feature => feature !== "selfRegistration"
158
+ }
159
+ },
160
+ administrationWorkspaceContext: {selectedAdministration: AdministrationWorkspaceMenuTypes.MFA}
161
+ }); // The props to pass
162
+ page = new DisplayAdministrationMenuPage(context, props);
163
+ expect(page.exists()).toBeTruthy();
164
+ expect(page.selfRegistration).toBeNull();
165
+ });
166
+ });
167
+
168
+ describe("As a signed-in administrator on the administration workspace, I can see the SSO setting option in the left-side bar", () => {
169
+ it('If the feature flag is true, the menu should be visible', async() => {
170
+ expect.assertions(4);
171
+ const props = defaultProps({
172
+ administrationWorkspaceContext: {selectedAdministration: AdministrationWorkspaceMenuTypes.SSO}
173
+ }); // The props to pass
174
+ page = new DisplayAdministrationMenuPage(context, props);
175
+ expect(page.exists()).toBeTruthy();
176
+ await page.goToSsoSettings();
177
+ expect(page.ssoSettings).toBeTruthy();
178
+ expect(page.menuSelected).toBe('Single Sign-On');
179
+ expect(props.navigationContext.onGoToAdministrationSsoRequested).toHaveBeenCalled();
180
+ });
181
+
182
+ it('If the feature flag is false, the menu should not be visible', async() => {
183
+ expect.assertions(2);
184
+ const props = defaultProps({
185
+ context: {
186
+ siteSettings: {
187
+ canIUse: feature => feature !== "sso"
188
+ }
189
+ },
190
+ administrationWorkspaceContext: {selectedAdministration: AdministrationWorkspaceMenuTypes.MFA}
191
+ }); // The props to pass
192
+ page = new DisplayAdministrationMenuPage(context, props);
193
+ expect(page.exists()).toBeTruthy();
194
+ expect(page.ssoSettings).toBeNull();
195
+ });
196
+ });
137
197
  });
@@ -103,6 +103,20 @@ export default class DisplayAdministrationMenuPage {
103
103
  return this._page.container.querySelector('#smtp_settings_menu .row .main-cell-wrapper .main-cell a');
104
104
  }
105
105
 
106
+ /**
107
+ * Returns the self registration menu
108
+ */
109
+ get selfRegistration() {
110
+ return this._page.container.querySelector('#self_registration_menu .row .main-cell-wrapper .main-cell a');
111
+ }
112
+
113
+ /**
114
+ * Returns the Single Sign-On menu
115
+ */
116
+ get ssoSettings() {
117
+ return this._page.container.querySelector('#sso_menu .row .main-cell-wrapper .main-cell a');
118
+ }
119
+
106
120
  /**
107
121
  * Returns true if the page object exists in the container
108
122
  */
@@ -152,9 +166,14 @@ export default class DisplayAdministrationMenuPage {
152
166
  async goToSmtpSettings() {
153
167
  await this.click(this.smtpSettings);
154
168
  }
155
- }
156
-
157
-
158
-
159
169
 
170
+ /** Click on the self registration settings element */
171
+ async goToSelfRegistration() {
172
+ await this.click(this.selfRegistration);
173
+ }
160
174
 
175
+ /** Click on the SSO settings element */
176
+ async goToSsoSettings() {
177
+ await this.click(this.ssoSettings);
178
+ }
179
+ }