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.
- package/build/css/help.min.css +3 -3
- package/build/css/public.min.css +3 -3
- package/build/css/themes/default/api_authentication.min.css +3 -3
- package/build/css/themes/default/api_cloud.min.css +3 -3
- package/build/css/themes/default/api_main.min.css +3 -3
- package/build/css/themes/default/api_reports.min.css +3 -3
- package/build/css/themes/default/api_webinstaller.min.css +3 -3
- package/build/css/themes/default/ext_app.min.css +3 -3
- package/build/css/themes/default/ext_authentication.min.css +3 -3
- package/build/css/themes/default/ext_external.min.css +2 -2
- package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/default/ext_quickaccess.min.css +3 -3
- package/build/css/themes/midgar/api_authentication.min.css +3 -3
- package/build/css/themes/midgar/api_main.min.css +3 -3
- package/build/css/themes/midgar/api_reports.min.css +3 -3
- package/build/css/themes/midgar/ext_app.min.css +3 -3
- package/build/css/themes/midgar/ext_authentication.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
- package/build/css/themes/solarized_dark/api_authentication.min.css +1 -1
- package/build/css/themes/solarized_dark/api_main.min.css +1 -1
- package/build/css/themes/solarized_dark/api_reports.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_app.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_authentication.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_in_form_cta.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_in_form_menu.min.css +1 -1
- package/build/css/themes/solarized_dark/ext_quickaccess.min.css +1 -1
- package/build/css/themes/solarized_light/api_authentication.min.css +1 -1
- package/build/css/themes/solarized_light/api_main.min.css +1 -1
- package/build/css/themes/solarized_light/api_reports.min.css +1 -1
- package/build/css/themes/solarized_light/ext_app.min.css +1 -1
- package/build/css/themes/solarized_light/ext_authentication.min.css +1 -1
- package/build/css/themes/solarized_light/ext_in_form_cta.min.css +1 -1
- package/build/css/themes/solarized_light/ext_in_form_menu.min.css +1 -1
- package/build/css/themes/solarized_light/ext_quickaccess.min.css +1 -1
- package/build/js/dist/api-account-recovery.js +1 -1
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-app.js.LICENSE.txt +75 -5
- package/build/js/dist/api-feedback.js +2 -0
- package/build/js/dist/api-feedback.js.LICENSE.txt +45 -0
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-setup.js +1 -1
- package/build/js/dist/api-triage.js +1 -1
- package/build/js/dist/api-vendors.js +1 -1
- package/build/js/dist/api-vendors.js.LICENSE.txt +19 -9
- package/build/js/dist/src/locales/de-DE/common.json +995 -0
- package/build/js/dist/src/locales/en-UK/common.json +1061 -0
- package/build/js/dist/src/locales/es-ES/common.json +995 -0
- package/build/js/dist/src/locales/fr-FR/common.json +995 -0
- package/build/js/dist/src/locales/ja-JP/common.json +980 -0
- package/build/js/dist/src/locales/lt-LT/common.json +1025 -0
- package/build/js/dist/src/locales/nl-NL/common.json +995 -0
- package/build/js/dist/src/locales/pl-PL/common.json +1025 -0
- package/build/js/dist/src/locales/sv-SE/common.json +995 -0
- package/package.json +18 -1
- package/src/img/controls/attention.svg +1 -0
- package/src/locales/en-UK/common.json +80 -16
- package/src/react-extension/ApiApp.js +17 -5
- package/src/react-extension/ApiFeedback.entry.js +24 -0
- package/src/react-extension/ExtApp.js +12 -5
- package/src/react-extension/ExtAuthenticationLogin.js +17 -15
- package/src/react-extension/ExtAuthenticationLogin.test.stories.js +59 -0
- package/src/react-extension/ExtBootstrapApp.js +1 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.js +24 -0
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.data.js +3 -3
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.js +13 -1
- package/src/react-extension/components/Administration/AdministrationWorkspace.test.page.js +7 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.js +101 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.data.js +23 -0
- package/src/react-extension/components/Administration/ConfirmDeleteSsoSettingsDialog/ConfirmDeleteSsoSettingsDialog.test.stories.js +27 -0
- package/src/react-extension/components/Administration/ConfirmSaveAccountRecoverySettings/ConfirmSaveAccountRecoverySettings.js +1 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.js +78 -2
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.data.js +3 -1
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.js +60 -0
- package/src/react-extension/components/Administration/DisplayAdministrationMenu/DisplayAdministrationMenu.test.page.js +23 -4
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationInternationalisationActions/DisplayAdministrationInternationalisationActions.js +125 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationMfaActions/DisplayAdministrationMfaActions.js +131 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSelfRegistrationActions/DisplayAdministrationSelfRegistrationActions.js +103 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSsoActions/DisplayAdministrationSsoActions.js +91 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationSubscriptionActions/DisplayAdministrationSubscriptionActions.js +85 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationUserDirectoryActions/DisplayAdministrationUserDirectoryActions.js +228 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.js +4 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceBreadcrumb/DisplayAdministrationWorkspaceBreadcrumb.test.js +9 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +3 -3
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.data.js +14 -0
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.test.page.js +0 -17
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.js +18 -115
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.data.js +11 -13
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.js +38 -43
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.page.js +47 -10
- package/src/react-extension/components/Administration/DisplayInternationalizationAdministration/DisplayInternationalizationAdministration.test.stories.js +10 -43
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.js +82 -367
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.data.js +128 -42
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.js +75 -121
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.page.js +46 -16
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +18 -14
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.js +103 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.js +53 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.page.js +81 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmDeletionSelfRegistrationSettings/ConfirmDeletionSelfRegistrationSettings.test.stories.js +34 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.js +125 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.data.js +63 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.js +54 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.page.js +88 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/ConfirmSaveSelfRegistrationSettings/ConfirmSaveSelfRegistrationSettings.test.stories.js +35 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.js +381 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.data.js +69 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.js +332 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.page.js +247 -0
- package/src/react-extension/components/Administration/DisplaySelfRegistrationAdministration/DisplaySelfRegistrationAdministration.test.stories.js +72 -0
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +19 -19
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.data.js +1717 -1729
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +11 -3
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.page.js +4 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +41 -140
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +15 -3
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +22 -49
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.page.js +19 -11
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.stories.js +9 -3
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +5 -6
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.data.js +1717 -1728
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +11 -3
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.page.js +4 -1
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.stories.js +11 -1784
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +362 -835
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.data.js +427 -418
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.js +134 -175
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.page.js +108 -11
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +17 -25
- package/src/react-extension/components/Administration/EditSubscriptionKey/EditSubscriptionKey.js +4 -2
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.js +3 -3
- package/src/react-extension/components/Administration/ManageAccountRecoveryAdministrationSettings/ManageAccountRecoveryAdministrationSettings.test.js +1 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.js +32 -7
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.data.js +0 -3
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.js +145 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.page.js +52 -1
- package/src/react-extension/components/Administration/ManageSmtpAdministrationSettings/ManageSmtpAdministrationSettings.test.stories.js +15 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.js +340 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.data.js +56 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.js +223 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.page.js +235 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/ManageSsoSettings.test.stories.js +55 -0
- package/src/react-extension/components/Administration/ManageSsoSettings/SsoProviders.data.js +34 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.js +12 -3
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/GenerateOrganizationKey.test.js +27 -0
- package/src/react-extension/components/Administration/SelectAccountRecoveryOrganizationKey/SelectAccountRecoveryOrganizationKey.test.page.js +8 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.js +197 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.data.js +37 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.js +187 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.page.js +120 -0
- package/src/react-extension/components/Administration/TestSsoSettingsDialog/TestSsoSettingsDialog.test.stories.js +31 -0
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.js +9 -5
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.data.js +4 -0
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.js +11 -42
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.page.js +1 -0
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.js +9 -5
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.data.js +4 -0
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.js +16 -2
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.page.js +17 -1
- package/src/react-extension/components/AuthenticationLogin/Login/Login.js +159 -61
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.data.js +14 -11
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.js +79 -0
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.page.js +16 -0
- package/src/react-extension/components/AuthenticationLogin/OrchestrateLogin/OrchestrateLoginBoxMain.js +2 -0
- package/src/react-extension/components/AuthenticationSetup/SetupAuthentication/SetupAuthentication.js +4 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.js +119 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.js +43 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.page.js +108 -0
- package/src/react-extension/components/Common/Error/ApiError/ApiError.test.stories.js +39 -0
- package/src/react-extension/components/Common/Inputs/Autocomplete/Autocomplete.test.js +12 -0
- package/src/react-extension/components/Common/Inputs/Autocomplete/AutocompleteItem.js +2 -2
- package/src/react-extension/components/Common/Legacy/HandleLegacyAppjs.js +1 -1
- package/src/react-extension/components/Common/Navigation/Header/Logo.js +13 -1
- package/src/react-extension/components/Resource/CreateResource/CreateResource.js +103 -30
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.js +44 -10
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.page.js +35 -7
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +3 -3
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesListContextualMenu.js +6 -5
- package/src/react-extension/components/Resource/DisplayResourcesWorkspace/DisplayResourcesWorkspaceMenu.js +5 -4
- package/src/react-extension/components/Resource/EditResource/EditResource.js +95 -23
- package/src/react-extension/components/Resource/EditResource/EditResource.test.js +45 -13
- package/src/react-extension/components/Resource/EditResource/EditResource.test.page.js +35 -2
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetails.js +2 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsInformation.js +3 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.js +23 -2
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.js +8 -0
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.page.js +26 -2
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.js +22 -1
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.js +8 -0
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.page.js +25 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetails.js +2 -1
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/GenerateResourcePassword.js +2 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.js +14 -1
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.js +8 -0
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.page.js +12 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.js +42 -3
- package/src/react-extension/components/User/CreateUser/CreateUser.test.js +16 -0
- package/src/react-extension/components/User/CreateUser/CreateUser.test.page.js +26 -0
- package/src/react-extension/components/User/DisplayUserWorkspaceActions/DisplayUserWorkspaceActions.js +2 -1
- package/src/react-extension/components/User/DisplayUsersContextualMenu/DisplayUsersContextualMenu.js +5 -5
- package/src/react-extension/components/User/EditUser/EditUser.js +29 -2
- package/src/react-extension/components/User/EditUser/EditUser.test.js +12 -0
- package/src/react-extension/components/User/EditUser/EditUser.test.page.js +26 -0
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.js +2 -1
- package/src/react-extension/components/UserDetails/DisplayUserDetails/DisplayUserDetails.test.data.js +1332 -1331
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.js +2 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.js +19 -1
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.js +9 -0
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.page.js +12 -0
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetails/DisplayUserGroupDetails.js +2 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.js +16 -1
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.js +8 -0
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.page.js +26 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +6 -4
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +4 -1
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.js +21 -11
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.page.js +10 -1
- package/src/react-extension/contexts/AdminSmtpSettingsContext.js +2 -0
- package/src/react-extension/contexts/AdminSmtpSettingsContext.test.data.js +13 -0
- package/src/react-extension/contexts/AdminSmtpSettingsContext.test.js +3 -1
- package/src/react-extension/contexts/AdminSsoContext.js +558 -0
- package/src/react-extension/contexts/AdminSsoContext.test.data.js +51 -0
- package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.js +194 -0
- package/src/react-extension/contexts/Administration/AdministrationInternationalizationContext/AdministrationInternationalizationContext.test.js +111 -0
- package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.js +265 -0
- package/src/react-extension/contexts/Administration/AdministrationMfa/AdministrationMfaContext.test.js +178 -0
- package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.js +453 -0
- package/src/react-extension/contexts/Administration/AdministrationSelfRegistration/AdministrationSelfRegistrationContext.test.js +218 -0
- package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.js +168 -0
- package/src/react-extension/contexts/Administration/AdministrationSubscription/AdministrationSubscription.test.js +73 -0
- package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.js +353 -0
- package/src/react-extension/contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext.test.js +220 -0
- package/src/react-extension/contexts/AdministrationWorkspaceContext.js +17 -178
- package/src/react-extension/contexts/AdministrationWorkspaceContext.test.js +0 -26
- package/src/react-extension/contexts/ApiAppContext.test.data.js +4 -2
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.js +54 -4
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.data.js +10 -1
- package/src/react-extension/contexts/Authentication/AuthenticationLoginContext.test.js +92 -14
- package/src/react-extension/contexts/Authentication/AuthenticationSetupContext.js +1 -0
- package/src/react-extension/contexts/NavigationContext.js +34 -0
- package/src/react-extension/contexts/SsoContext.js +151 -0
- package/src/react-extension/contexts/SsoContext.test.data.js +36 -0
- package/src/react-extension/contexts/SsoContext.test.js +104 -0
- package/src/react-extension/lib/Domain/DomainUtil.js +70 -0
- package/src/react-extension/lib/Domain/DomainUtil.test.js +129 -0
- package/src/react-extension/lib/Domain/Domains.js +6113 -0
- package/src/react-extension/lib/Error/InputValidator.js +24 -0
- package/src/react-extension/lib/Map/DynamicRef.js +49 -0
- package/src/react-extension/lib/Map/DynamicRef.test.js +56 -0
- package/src/react-extension/lib/Map/MapObject.js +48 -0
- package/src/react-extension/lib/Map/MapObject.test.js +43 -0
- package/src/react-quickaccess/ExtQuickAccess.js +7 -4
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.js +3 -1
- package/src/react-quickaccess/components/GeneratePasswordPage/GeneratePasswordPage.test.data.js +4 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +115 -4
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.data.js +10 -0
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +30 -3
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.js +33 -1
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.data.js +25 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.js +60 -0
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.page.js +60 -0
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.js +33 -1
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.js +36 -7
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.js +3 -2
- package/src/react-quickaccess/contexts/SsoContext.js +150 -0
- package/src/react-web-integration/lib/InForm/InFormFieldSelector.js +5 -0
- package/src/shared/constants/inputs.const.js +30 -0
- package/src/shared/lib/Browser/clipBoard.js +45 -0
- package/src/shared/lib/Browser/clipBoard.test.js +59 -0
- package/src/shared/models/Mfa/Duo.js +36 -0
- package/src/shared/models/Mfa/Duo.test.js +59 -0
- package/src/shared/models/Mfa/MfaDTO.js +51 -0
- package/src/shared/models/Mfa/MfaDTO.test.js +48 -0
- package/src/shared/models/Mfa/MfaEnumeration.js +17 -0
- package/src/shared/models/Mfa/MfaModel.js +48 -0
- package/src/shared/models/Mfa/MfaModel.test.js +37 -0
- package/src/shared/models/Mfa/Yubikey.js +35 -0
- package/src/shared/models/Mfa/Yubikey.test.js +47 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.js +55 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDomainsViewModel.test.js +37 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDto.js +42 -0
- package/src/shared/models/selfRegistration/SelfRegistrationDto.test.js +48 -0
- package/src/shared/models/selfRegistration/SelfRegistrationEnumeration.js +17 -0
- package/src/shared/models/subscription/SubscriptionDto.js +34 -0
- package/src/shared/models/subscription/SubscriptionDto.test.js +31 -0
- package/src/shared/models/subscription/SubscriptionModel.js +33 -0
- package/src/shared/models/subscription/SubscriptionModel.test.js +48 -0
- package/src/shared/models/user/UserModel.js +37 -0
- package/src/shared/models/userDirectory/UserDirectoryDTO.js +57 -0
- package/src/shared/models/userDirectory/UserDirectoryDTO.test.js +40 -0
- package/src/shared/models/userDirectory/UserDirectoryEnum.js +22 -0
- package/src/shared/models/userDirectory/UserDirectoryModel.js +64 -0
- package/src/shared/models/userDirectory/UserDirectoryModel.test.js +37 -0
- package/src/shared/services/actions/subscription/SubscriptionActionService.js +69 -0
- package/src/shared/services/actions/subscription/SubscriptionActionService.test.js +73 -0
- package/src/shared/services/api/Internationalisation/InternationalisationService.js +46 -0
- package/src/shared/services/api/Mfa/MfaService.js +54 -0
- package/src/shared/services/{accountRecovery → api/accountRecovery}/ApiAppAccountRecoveryUserService.js +2 -2
- package/src/shared/services/{accountRecovery → api/accountRecovery}/ExtAppAccountRecoveryUserService.js +0 -0
- package/src/shared/services/api/secrets/pownedService.js +64 -0
- package/src/shared/services/api/secrets/pownedService.test.js +63 -0
- package/src/shared/services/api/selfRegistration/selfRegistrationService.js +64 -0
- package/src/shared/services/api/user/UserService.js +45 -0
- package/src/shared/services/api/userDirectory/UserDirectoryService.js +108 -0
- package/src/shared/services/forms/Mfa/MfaFormService.js +195 -0
- package/src/shared/services/forms/Mfa/MfaFormService.test.js +341 -0
- package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.js +92 -0
- package/src/shared/services/forms/selfRegistration/SelfRegistrationFormService.test.js +101 -0
- package/src/shared/services/forms/userDirectory/UserDirectoryFormService.js +118 -0
- package/src/shared/services/forms/userDirectory/UserDirectoryFormService.test.js +128 -0
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.js +0 -205
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.data.js +0 -37
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.js +0 -197
- package/src/react-extension/components/Administration/DisplayAdministrationWorkspaceActions/DisplayAdministrationWorkspaceActions.test.page.js +0 -133
|
@@ -13,16 +13,13 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import React from "react";
|
|
15
15
|
import PropTypes from "prop-types";
|
|
16
|
-
import {withAppContext} from "../../../contexts/AppContext";
|
|
17
|
-
import {withActionFeedback} from "../../../contexts/ActionFeedbackContext";
|
|
18
16
|
import Icon from "../../../../shared/components/Icons/Icon";
|
|
19
17
|
import {withAdministrationWorkspace} from "../../../contexts/AdministrationWorkspaceContext";
|
|
20
|
-
import XRegExp from "xregexp";
|
|
21
|
-
import DisplayTestUserDirectoryAdministration
|
|
22
|
-
from "../DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration";
|
|
23
|
-
import {withDialog} from "../../../contexts/DialogContext";
|
|
24
18
|
import {Trans, withTranslation} from "react-i18next";
|
|
25
19
|
import Select from "../../Common/Select/Select";
|
|
20
|
+
import DisplayAdministrationUserDirectoryActions from "../DisplayAdministrationWorkspaceActions/DisplayAdministrationUserDirectoryActions/DisplayAdministrationUserDirectoryActions";
|
|
21
|
+
import UserDirectoryFormService from '../../../../shared/services/forms/userDirectory/UserDirectoryFormService';
|
|
22
|
+
import {withAdminUserDirectory} from "../../../contexts/Administration/AdministrationUserDirectory/AdministrationUserDirectoryContext";
|
|
26
23
|
|
|
27
24
|
/**
|
|
28
25
|
* This component allows to display the MFA for the administration
|
|
@@ -35,312 +32,81 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
35
32
|
constructor(props) {
|
|
36
33
|
super(props);
|
|
37
34
|
this.state = this.defaultState;
|
|
38
|
-
this.
|
|
35
|
+
this.userDirectoryFormService = UserDirectoryFormService.getInstance(this.props.adminUserDirectoryContext, this.props.t);
|
|
39
36
|
this.bindCallbacks();
|
|
40
37
|
}
|
|
41
38
|
|
|
39
|
+
|
|
42
40
|
/**
|
|
43
41
|
* Get default state
|
|
44
42
|
* @returns {*}
|
|
45
43
|
*/
|
|
46
44
|
get defaultState() {
|
|
47
45
|
return {
|
|
48
|
-
loading: true, // component is loading or not
|
|
49
|
-
processing: false, // component is processing or not
|
|
50
|
-
|
|
51
46
|
hasFieldFocus: false, // true if the form field has focus
|
|
52
|
-
|
|
53
|
-
openCredentials: true, // section credential open
|
|
54
|
-
openDirectoryConfiguration: false, // section directory configuration open
|
|
55
|
-
openSynchronizationOptions: false, // section synchronization options open
|
|
56
|
-
|
|
57
|
-
openConnectionType: false, // select connection type
|
|
58
|
-
openDefaultAdmin: false, // select default user admin
|
|
59
|
-
openDefaultGroupAdmin: false, // select default group user admin
|
|
60
|
-
|
|
61
|
-
// FORM FIELDS
|
|
62
|
-
userDirectoryToggle: false, // User directory toggle value
|
|
63
|
-
// CREDENTIALS FIELDS
|
|
64
|
-
directoryType: "ad",
|
|
65
|
-
connectionType: "plain",
|
|
66
|
-
host: "",
|
|
67
|
-
hostError: null,
|
|
68
|
-
port: "389",
|
|
69
|
-
portError: null,
|
|
70
|
-
username: "",
|
|
71
|
-
password: "",
|
|
72
|
-
domain: "",
|
|
73
|
-
domainError: null,
|
|
74
|
-
baseDn: "",
|
|
75
|
-
// DIRECTORY CONFIGURATION FIELDS
|
|
76
|
-
groupPath: "",
|
|
77
|
-
userPath: "",
|
|
78
|
-
groupObjectClass: "",
|
|
79
|
-
userObjectClass: "",
|
|
80
|
-
useEmailPrefix: false,
|
|
81
|
-
emailPrefix: "",
|
|
82
|
-
emailSuffix: "",
|
|
83
|
-
// SYNCHRONIZATION OPTIONS
|
|
84
|
-
defaultAdmin: "",
|
|
85
|
-
defaultGroupAdmin: "",
|
|
86
|
-
groupsParentGroup: "",
|
|
87
|
-
usersParentGroup: "",
|
|
88
|
-
enabledUsersOnly: false,
|
|
89
|
-
createUsers: true,
|
|
90
|
-
deleteUsers: true,
|
|
91
|
-
createGroups: true,
|
|
92
|
-
deleteGroups: true,
|
|
93
|
-
updateGroups: true,
|
|
94
|
-
// The search field to select a default user
|
|
95
|
-
defaultAdminSearch: "",
|
|
96
|
-
defaultGroupAdminSearch: "",
|
|
97
|
-
|
|
98
|
-
users: null, // all users
|
|
99
|
-
|
|
100
|
-
hasAlreadyBeenValidated: false, // True if the form has already been submitted once
|
|
101
47
|
};
|
|
102
48
|
}
|
|
103
49
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
50
|
+
/**
|
|
51
|
+
* ComponentDidMount
|
|
52
|
+
* Invoked immediately after component is inserted into the tree
|
|
53
|
+
* @return {void}
|
|
54
|
+
*/
|
|
108
55
|
|
|
109
|
-
|
|
110
|
-
|
|
56
|
+
async componentDidMount() {
|
|
57
|
+
this.props.administrationWorkspaceContext.setDisplayAdministrationWorkspaceAction(DisplayAdministrationUserDirectoryActions);
|
|
58
|
+
this.props.adminUserDirectoryContext.findUserDirectorySettings();
|
|
111
59
|
}
|
|
112
60
|
|
|
113
61
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
62
|
+
* componentWillUnmount
|
|
63
|
+
* Use to clear the data from the form in case the user put something that needs to be cleared.
|
|
116
64
|
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
65
|
+
componentWillUnmount() {
|
|
66
|
+
this.props.administrationWorkspaceContext.resetDisplayAdministrationWorkspaceAction();
|
|
67
|
+
this.props.adminUserDirectoryContext.clearContext();
|
|
68
|
+
UserDirectoryFormService.killInstance();
|
|
69
|
+
this.userDirectoryFormService = null;
|
|
120
70
|
}
|
|
121
71
|
|
|
72
|
+
|
|
122
73
|
/**
|
|
123
74
|
* Bind callbacks methods
|
|
124
75
|
*/
|
|
125
76
|
bindCallbacks() {
|
|
126
|
-
this.handleUserDirectoryClickEvent = this.handleUserDirectoryClickEvent.bind(this);
|
|
127
|
-
|
|
128
77
|
this.handleCredentialTitleClicked = this.handleCredentialTitleClicked.bind(this);
|
|
129
78
|
this.handleDirectoryConfigurationTitleClicked = this.handleDirectoryConfigurationTitleClicked.bind(this);
|
|
130
79
|
this.handleSynchronizationOptionsTitleClicked = this.handleSynchronizationOptionsTitleClicked.bind(this);
|
|
131
|
-
this.handleConnectionTypeClicked = this.handleConnectionTypeClicked.bind(this);
|
|
132
|
-
|
|
133
|
-
this.handleInputChange = this.handleInputChange.bind(this);
|
|
134
|
-
this.handleHostInputKeyUp = this.handleHostInputKeyUp.bind(this);
|
|
135
|
-
this.handlePortInputKeyUp = this.handlePortInputKeyUp.bind(this);
|
|
136
|
-
this.handleDomainInputKeyUp = this.handleDomainInputKeyUp.bind(this);
|
|
137
80
|
this.handleFieldFocus = this.handleFieldFocus.bind(this);
|
|
138
81
|
this.handleFieldBlur = this.handleFieldBlur.bind(this);
|
|
139
|
-
this.
|
|
140
|
-
this.handleConnectionTypeChange = this.handleConnectionTypeChange.bind(this);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Create DOM nodes or React elements references in order to be able to access them programmatically.
|
|
145
|
-
*/
|
|
146
|
-
createRefs() {
|
|
147
|
-
this.connectionTypeRef = React.createRef();
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Handle the userDirectoryToggle change
|
|
152
|
-
* @param previousUserDirectoryToggle Previous userDirectoryToggle settings
|
|
153
|
-
*/
|
|
154
|
-
handleEnabledTestButton(previousUserDirectoryToggle) {
|
|
155
|
-
const hasPreviousUserDirectoryToggleChanged = this.state.userDirectoryToggle !== previousUserDirectoryToggle;
|
|
156
|
-
if (hasPreviousUserDirectoryToggleChanged) {
|
|
157
|
-
this.props.administrationWorkspaceContext.onTestEnabled(this.state.userDirectoryToggle);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Handle click events on UserDirectory component. Hide the component if the click occurred outside of the component.
|
|
163
|
-
* @param {ReactEvent} event The event
|
|
164
|
-
*/
|
|
165
|
-
handleUserDirectoryClickEvent(event) {
|
|
166
|
-
// Prevent stop editing when the user click on an element of the editor
|
|
167
|
-
if (this.connectionTypeRef.current !== null && !this.connectionTypeRef.current.contains(event.target)) {
|
|
168
|
-
this.setState({openConnectionType: false});
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Stop propagation event
|
|
174
|
-
* @param event
|
|
175
|
-
*/
|
|
176
|
-
stopPropagation(event) {
|
|
177
|
-
event.stopPropagation();
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Handle the must submit
|
|
182
|
-
* @param previousAdministrationWorkspaceContext Previous administration workspace context settings
|
|
183
|
-
*/
|
|
184
|
-
async handleMustSubmit(previousAdministrationWorkspaceContext) {
|
|
185
|
-
const hasMustSaveChanged = this.props.administrationWorkspaceContext.must.save !== previousAdministrationWorkspaceContext.must.save;
|
|
186
|
-
const hasMustTestChanged = this.props.administrationWorkspaceContext.must.test !== previousAdministrationWorkspaceContext.must.test;
|
|
187
|
-
if ((hasMustSaveChanged && this.props.administrationWorkspaceContext.must.save)
|
|
188
|
-
|| (hasMustTestChanged && this.props.administrationWorkspaceContext.must.test)) {
|
|
189
|
-
await this.handleFormSubmit();
|
|
190
|
-
this.props.administrationWorkspaceContext.onResetActionsSettings();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* fetch the user directory settings
|
|
196
|
-
*/
|
|
197
|
-
async findAllUserDirectorySettings() {
|
|
198
|
-
// USER DIRECTORY SETTINGS
|
|
199
|
-
const result = await this.props.administrationWorkspaceContext.onGetUsersDirectoryRequested();
|
|
200
|
-
const userDirectory = result.body;
|
|
201
|
-
// USERS
|
|
202
|
-
const usersResult = await this.props.administrationWorkspaceContext.onGetUsersRequested();
|
|
203
|
-
const users = this.sortUsers(usersResult.body);
|
|
204
|
-
let defaultAdmin = "";
|
|
205
|
-
let defaultGroupAdmin = "";
|
|
206
|
-
|
|
207
|
-
if (userDirectory.length !== 0) {
|
|
208
|
-
const userDirectoryToggle = true;
|
|
209
|
-
const directoryType = userDirectory.directory_type;
|
|
210
|
-
const connectionType = userDirectory.connection_type;
|
|
211
|
-
const domain = userDirectory.domain_name;
|
|
212
|
-
const username = userDirectory.username;
|
|
213
|
-
const password = userDirectory.password;
|
|
214
|
-
const baseDn = userDirectory.base_dn;
|
|
215
|
-
const host = userDirectory.server;
|
|
216
|
-
const port = userDirectory.port.toString();
|
|
217
|
-
defaultAdmin = userDirectory.default_user;
|
|
218
|
-
defaultGroupAdmin = userDirectory.default_group_admin_user;
|
|
219
|
-
const createUsers = userDirectory.sync_users_create;
|
|
220
|
-
const deleteUsers = userDirectory.sync_users_delete;
|
|
221
|
-
const createGroups = userDirectory.sync_groups_create;
|
|
222
|
-
const deleteGroups = userDirectory.sync_groups_delete;
|
|
223
|
-
const updateGroups = userDirectory.sync_groups_update;
|
|
224
|
-
const enabledUsersOnly = userDirectory.enabled_users_only === true;
|
|
225
|
-
const groupPath = userDirectory.group_path;
|
|
226
|
-
const userPath = userDirectory.user_path;
|
|
227
|
-
const groupObjectClass = userDirectory.group_object_class;
|
|
228
|
-
const userObjectClass = userDirectory.user_object_class;
|
|
229
|
-
const useEmailPrefix = userDirectory.use_email_prefix_suffix;
|
|
230
|
-
const emailPrefix = userDirectory.email_prefix;
|
|
231
|
-
const emailSuffix = userDirectory.email_suffix;
|
|
232
|
-
const groupsParentGroup = userDirectory.groups_parent_group;
|
|
233
|
-
const usersParentGroup = userDirectory.users_parent_group;
|
|
234
|
-
|
|
235
|
-
this.setState({
|
|
236
|
-
loading: false,
|
|
237
|
-
users,
|
|
238
|
-
userDirectoryToggle,
|
|
239
|
-
directoryType,
|
|
240
|
-
connectionType,
|
|
241
|
-
domain,
|
|
242
|
-
username,
|
|
243
|
-
password,
|
|
244
|
-
baseDn,
|
|
245
|
-
host,
|
|
246
|
-
port,
|
|
247
|
-
defaultAdmin,
|
|
248
|
-
defaultGroupAdmin,
|
|
249
|
-
enabledUsersOnly,
|
|
250
|
-
groupPath,
|
|
251
|
-
userPath,
|
|
252
|
-
groupObjectClass,
|
|
253
|
-
userObjectClass,
|
|
254
|
-
useEmailPrefix,
|
|
255
|
-
emailPrefix,
|
|
256
|
-
emailSuffix,
|
|
257
|
-
groupsParentGroup,
|
|
258
|
-
usersParentGroup,
|
|
259
|
-
createUsers,
|
|
260
|
-
deleteUsers,
|
|
261
|
-
createGroups,
|
|
262
|
-
deleteGroups,
|
|
263
|
-
updateGroups
|
|
264
|
-
});
|
|
265
|
-
this.props.administrationWorkspaceContext.onTestEnabled(userDirectoryToggle);
|
|
266
|
-
this.props.administrationWorkspaceContext.onSynchronizeEnabled(userDirectoryToggle);
|
|
267
|
-
} else {
|
|
268
|
-
const userLogged = users.find(user => this.props.context.loggedInUser.id === user.id);
|
|
269
|
-
defaultAdmin = userLogged.id;
|
|
270
|
-
defaultGroupAdmin = userLogged.id;
|
|
271
|
-
this.setState({
|
|
272
|
-
loading: false,
|
|
273
|
-
users,
|
|
274
|
-
defaultAdmin,
|
|
275
|
-
defaultGroupAdmin
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
sortUsers(users) {
|
|
281
|
-
const getUserFullName = user => `${user.profile.first_name} ${user.profile.last_name}`;
|
|
282
|
-
const nameSorter = (u1, u2) => getUserFullName(u1).localeCompare(getUserFullName(u2));
|
|
283
|
-
return users.sort(nameSorter);
|
|
82
|
+
this.handleInputChange = this.handleInputChange.bind(this);
|
|
284
83
|
}
|
|
285
84
|
|
|
286
85
|
/**
|
|
287
86
|
* Handle the click on the credential title
|
|
87
|
+
* @param {UserDirectory} userDirectory state
|
|
288
88
|
*/
|
|
289
89
|
handleCredentialTitleClicked() {
|
|
290
|
-
|
|
90
|
+
const settings = this.props.adminUserDirectoryContext.getSettings();
|
|
91
|
+
this.props.adminUserDirectoryContext.setSettings("openCredentials", !settings.openCredentials);
|
|
291
92
|
}
|
|
292
93
|
|
|
293
94
|
/**
|
|
294
95
|
* Handle the click on the credential title
|
|
96
|
+
* @param {UserDirectory} userDirectory state
|
|
295
97
|
*/
|
|
296
98
|
handleDirectoryConfigurationTitleClicked() {
|
|
297
|
-
|
|
99
|
+
const settings = this.props.adminUserDirectoryContext.getSettings();
|
|
100
|
+
this.props.adminUserDirectoryContext.setSettings('openDirectoryConfiguration', !settings.openDirectoryConfiguration);
|
|
298
101
|
}
|
|
299
102
|
|
|
300
103
|
/**
|
|
301
104
|
* Handle the click on the credential title
|
|
105
|
+
* @param {UserDirectory} userDirectory state
|
|
302
106
|
*/
|
|
303
107
|
handleSynchronizationOptionsTitleClicked() {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* Handle the click on the connection type
|
|
309
|
-
*/
|
|
310
|
-
handleConnectionTypeClicked() {
|
|
311
|
-
if (!this.hasAllInputDisabled()) {
|
|
312
|
-
this.setState({openConnectionType: !this.state.openConnectionType});
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Handle host input keyUp event.
|
|
318
|
-
*/
|
|
319
|
-
handleHostInputKeyUp() {
|
|
320
|
-
if (this.state.hasAlreadyBeenValidated) {
|
|
321
|
-
const state = this.validateHostInput();
|
|
322
|
-
this.setState(state);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/**
|
|
327
|
-
* Handle port input keyUp event.
|
|
328
|
-
*/
|
|
329
|
-
handlePortInputKeyUp() {
|
|
330
|
-
if (this.state.hasAlreadyBeenValidated) {
|
|
331
|
-
const state = this.validatePortInput();
|
|
332
|
-
this.setState(state);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Handle host input keyUp event.
|
|
338
|
-
*/
|
|
339
|
-
handleDomainInputKeyUp() {
|
|
340
|
-
if (this.state.hasAlreadyBeenValidated) {
|
|
341
|
-
const state = this.validateDomainInput();
|
|
342
|
-
this.setState(state);
|
|
343
|
-
}
|
|
108
|
+
const settings = this.props.adminUserDirectoryContext.getSettings();
|
|
109
|
+
this.props.adminUserDirectoryContext.setSettings('openSynchronizationOptions', !settings.openSynchronizationOptions);
|
|
344
110
|
}
|
|
345
111
|
|
|
346
112
|
/**
|
|
@@ -352,28 +118,42 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
352
118
|
const target = event.target;
|
|
353
119
|
const value = target.type === "checkbox" ? target.checked : target.value;
|
|
354
120
|
const name = target.name;
|
|
355
|
-
this.
|
|
356
|
-
this.
|
|
121
|
+
this.props.adminUserDirectoryContext.setSettings(name, value);
|
|
122
|
+
this.validateInput(name, value);
|
|
357
123
|
}
|
|
358
124
|
|
|
359
125
|
/**
|
|
360
|
-
*
|
|
361
|
-
* @
|
|
126
|
+
* validate the input
|
|
127
|
+
* @params {string} The input name
|
|
128
|
+
* @params {string} The input valude
|
|
129
|
+
* @returns {void}
|
|
362
130
|
*/
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
131
|
+
validateInput(name, value) {
|
|
132
|
+
switch (name) {
|
|
133
|
+
case 'host':
|
|
134
|
+
this.userDirectoryFormService.validateHostInput(value);
|
|
135
|
+
break;
|
|
136
|
+
case 'domain':
|
|
137
|
+
this.userDirectoryFormService.validateDomainInput(value);
|
|
138
|
+
break;
|
|
139
|
+
case 'port':
|
|
140
|
+
this.userDirectoryFormService.validatePortInput(value);
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
368
143
|
}
|
|
369
144
|
|
|
370
145
|
/**
|
|
371
|
-
* Handle
|
|
146
|
+
* Handle field focus
|
|
372
147
|
*/
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
148
|
+
handleFieldFocus() {
|
|
149
|
+
this.setState({hasFieldFocus: true});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Handle field blur
|
|
154
|
+
*/
|
|
155
|
+
handleFieldBlur() {
|
|
156
|
+
this.setState({hasFieldFocus: false});
|
|
377
157
|
}
|
|
378
158
|
|
|
379
159
|
/**
|
|
@@ -381,7 +161,8 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
381
161
|
* @returns {boolean}
|
|
382
162
|
*/
|
|
383
163
|
hasAllInputDisabled() {
|
|
384
|
-
|
|
164
|
+
const settings = this.props.adminUserDirectoryContext.getSettings();
|
|
165
|
+
return settings.processing || settings.loading;
|
|
385
166
|
}
|
|
386
167
|
|
|
387
168
|
/**
|
|
@@ -389,265 +170,38 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
389
170
|
* @returns {boolean}
|
|
390
171
|
*/
|
|
391
172
|
isUserDirectoryChecked() {
|
|
392
|
-
return this.
|
|
173
|
+
return this.props.adminUserDirectoryContext.getSettings().userDirectoryToggle;
|
|
393
174
|
}
|
|
394
175
|
|
|
395
176
|
/**
|
|
396
177
|
* If active directory is checked
|
|
397
178
|
*/
|
|
398
179
|
isActiveDirectoryChecked() {
|
|
399
|
-
return this.
|
|
180
|
+
return this.props.adminUserDirectoryContext.getSettings().directoryType === "ad";
|
|
400
181
|
}
|
|
401
182
|
|
|
402
183
|
/**
|
|
403
184
|
* If open ldap is checked
|
|
404
185
|
*/
|
|
405
186
|
isOpenLdapChecked() {
|
|
406
|
-
return this.
|
|
187
|
+
return this.props.adminUserDirectoryContext.getSettings().directoryType === "openldap";
|
|
407
188
|
}
|
|
408
189
|
|
|
409
190
|
/**
|
|
410
191
|
* If use email prefix is checked
|
|
411
192
|
*/
|
|
412
193
|
isUseEmailPrefixChecked() {
|
|
413
|
-
return this.
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Validate the form.
|
|
418
|
-
* @returns {Promise<boolean>}
|
|
419
|
-
*/
|
|
420
|
-
async validate() {
|
|
421
|
-
// Validate the form inputs.
|
|
422
|
-
await Promise.all([
|
|
423
|
-
this.validateHostInput(),
|
|
424
|
-
this.validatePortInput(),
|
|
425
|
-
this.validateDomainInput(),
|
|
426
|
-
]);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* Validate the host input.
|
|
431
|
-
* @returns {Promise<void>}
|
|
432
|
-
*/
|
|
433
|
-
async validateHostInput() {
|
|
434
|
-
let hostError = null;
|
|
435
|
-
const host = this.state.host.trim();
|
|
436
|
-
if (!host.length) {
|
|
437
|
-
hostError = this.translate("A host is required.");
|
|
438
|
-
}
|
|
439
|
-
return this.setState({hostError});
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Validate the port input.
|
|
444
|
-
* @returns {Promise<void>}
|
|
445
|
-
*/
|
|
446
|
-
async validatePortInput() {
|
|
447
|
-
let portError = null;
|
|
448
|
-
const port = this.state.port.trim();
|
|
449
|
-
if (!port.length) {
|
|
450
|
-
portError = this.translate("A port is required.");
|
|
451
|
-
} else if (!XRegExp("^[0-9]+").test(port)) {
|
|
452
|
-
portError = this.translate("Only numeric characters allowed.");
|
|
453
|
-
}
|
|
454
|
-
return this.setState({portError});
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
/**
|
|
458
|
-
* Validate the domain input.
|
|
459
|
-
* @returns {Promise<void>}
|
|
460
|
-
*/
|
|
461
|
-
async validateDomainInput() {
|
|
462
|
-
let domainError = null;
|
|
463
|
-
const domain = this.state.domain.trim();
|
|
464
|
-
if (!domain.length) {
|
|
465
|
-
domainError = this.translate("A domain name is required.");
|
|
466
|
-
}
|
|
467
|
-
return this.setState({domainError});
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
/**
|
|
471
|
-
* Return true if the form has some validation error
|
|
472
|
-
* @returns {boolean}
|
|
473
|
-
*/
|
|
474
|
-
hasValidationError() {
|
|
475
|
-
return this.state.hostError !== null || this.state.portError !== null || this.state.domainError !== null;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
/**
|
|
479
|
-
* Handle form submit event.
|
|
480
|
-
* @params {ReactEvent} The react event
|
|
481
|
-
* @returns {void}
|
|
482
|
-
*/
|
|
483
|
-
async handleFormSubmit() {
|
|
484
|
-
await this.setState({hasAlreadyBeenValidated: true});
|
|
485
|
-
// Do not re-submit an already processing form
|
|
486
|
-
if (!this.state.processing) {
|
|
487
|
-
await this.toggleProcessing();
|
|
488
|
-
await this.validate();
|
|
489
|
-
if (this.hasValidationError()) {
|
|
490
|
-
await this.toggleProcessing();
|
|
491
|
-
return;
|
|
492
|
-
}
|
|
493
|
-
try {
|
|
494
|
-
if (this.props.administrationWorkspaceContext.must.save) {
|
|
495
|
-
await this.saveUserDirectory();
|
|
496
|
-
await this.handleSaveSuccess();
|
|
497
|
-
} else if (this.props.administrationWorkspaceContext.must.test) {
|
|
498
|
-
await this.testUserDirectory();
|
|
499
|
-
}
|
|
500
|
-
this.setState({processing: false});
|
|
501
|
-
} catch (error) {
|
|
502
|
-
await this.handleSaveError(error);
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
createUserDirectoryDTO() {
|
|
508
|
-
const directory_type = this.state.directoryType;
|
|
509
|
-
const domain_name = this.state.domain;
|
|
510
|
-
const connection_type = this.state.connectionType;
|
|
511
|
-
const server = this.state.host;
|
|
512
|
-
const port = parseInt(this.state.port);
|
|
513
|
-
const username = this.state.username;
|
|
514
|
-
const password = this.state.password;
|
|
515
|
-
const base_dn = this.state.baseDn;
|
|
516
|
-
const group_path = this.state.groupPath;
|
|
517
|
-
const user_path = this.state.userPath;
|
|
518
|
-
const default_user = this.state.defaultAdmin;
|
|
519
|
-
const default_group_admin_user = this.state.defaultGroupAdmin;
|
|
520
|
-
const groups_parent_group = this.state.groupsParentGroup;
|
|
521
|
-
const users_parent_group = this.state.usersParentGroup;
|
|
522
|
-
const enabled_users_only = this.state.enabledUsersOnly;
|
|
523
|
-
const sync_users_create = this.state.createUsers;
|
|
524
|
-
const sync_users_delete = this.state.deleteUsers;
|
|
525
|
-
const sync_groups_create = this.state.createGroups;
|
|
526
|
-
const sync_groups_delete = this.state.deleteGroups;
|
|
527
|
-
const sync_groups_update = this.state.updateGroups;
|
|
528
|
-
const enabled = this.state.userDirectoryToggle;
|
|
529
|
-
|
|
530
|
-
let group_object_class = "";
|
|
531
|
-
let user_object_class = "";
|
|
532
|
-
let use_email_prefix_suffix = false;
|
|
533
|
-
let email_prefix = "";
|
|
534
|
-
let email_suffix = "";
|
|
535
|
-
if (directory_type == "openldap") {
|
|
536
|
-
group_object_class = this.state.groupObjectClass;
|
|
537
|
-
user_object_class = this.state.userObjectClass;
|
|
538
|
-
use_email_prefix_suffix = this.state.useEmailPrefix;
|
|
539
|
-
|
|
540
|
-
if (use_email_prefix_suffix) {
|
|
541
|
-
email_prefix = this.state.emailPrefix;
|
|
542
|
-
email_suffix = this.state.emailSuffix;
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
return {
|
|
547
|
-
directory_type,
|
|
548
|
-
domain_name,
|
|
549
|
-
connection_type,
|
|
550
|
-
server,
|
|
551
|
-
port,
|
|
552
|
-
username,
|
|
553
|
-
password,
|
|
554
|
-
base_dn,
|
|
555
|
-
group_path,
|
|
556
|
-
user_path,
|
|
557
|
-
group_object_class,
|
|
558
|
-
user_object_class,
|
|
559
|
-
default_user,
|
|
560
|
-
default_group_admin_user,
|
|
561
|
-
groups_parent_group,
|
|
562
|
-
users_parent_group,
|
|
563
|
-
enabled_users_only,
|
|
564
|
-
sync_users_create,
|
|
565
|
-
sync_users_delete,
|
|
566
|
-
sync_groups_create,
|
|
567
|
-
sync_groups_delete,
|
|
568
|
-
sync_groups_update,
|
|
569
|
-
enabled,
|
|
570
|
-
use_email_prefix_suffix,
|
|
571
|
-
email_prefix,
|
|
572
|
-
email_suffix
|
|
573
|
-
};
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
/**
|
|
577
|
-
* save user directory settings
|
|
578
|
-
* @returns {Promise<*>}
|
|
579
|
-
*/
|
|
580
|
-
async saveUserDirectory() {
|
|
581
|
-
if (this.state.userDirectoryToggle) {
|
|
582
|
-
await this.props.administrationWorkspaceContext.onUpdateUsersDirectoryRequested(this.createUserDirectoryDTO());
|
|
583
|
-
this.props.administrationWorkspaceContext.onSynchronizeEnabled(true);
|
|
584
|
-
} else {
|
|
585
|
-
this.setState(this.defaultState);
|
|
586
|
-
await this.props.administrationWorkspaceContext.onDeleteUsersDirectoryRequested();
|
|
587
|
-
this.props.administrationWorkspaceContext.onSynchronizeEnabled(false);
|
|
588
|
-
this.setState({loading: false});
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
/**
|
|
593
|
-
* test user directory settings
|
|
594
|
-
*/
|
|
595
|
-
async testUserDirectory() {
|
|
596
|
-
const result = await this.props.administrationWorkspaceContext.onTestUsersDirectoryRequested(this.createUserDirectoryDTO());
|
|
597
|
-
const displayTestUserDirectoryDialogProps = {
|
|
598
|
-
userDirectoryTestResult: result.body
|
|
599
|
-
};
|
|
600
|
-
this.props.context.setContext({displayTestUserDirectoryDialogProps});
|
|
601
|
-
this.props.dialogContext.open(DisplayTestUserDirectoryAdministration);
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
/**
|
|
605
|
-
* Handle save operation success.
|
|
606
|
-
*/
|
|
607
|
-
async handleSaveSuccess() {
|
|
608
|
-
await this.props.actionFeedbackContext.displaySuccess(this.translate("The user directory settings for the organization were updated."));
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
/**
|
|
612
|
-
* Handle save operation error.
|
|
613
|
-
* @param {object} error The returned error
|
|
614
|
-
*/
|
|
615
|
-
async handleSaveError(error) {
|
|
616
|
-
// It can happen when the user has closed the passphrase entry dialog by instance.
|
|
617
|
-
if (error.name === "UserAbortsOperationError") {
|
|
618
|
-
this.setState({processing: false});
|
|
619
|
-
} else {
|
|
620
|
-
// Unexpected error occurred.
|
|
621
|
-
console.error(error);
|
|
622
|
-
await this.handleError(error);
|
|
623
|
-
this.setState({processing: false});
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
/**
|
|
628
|
-
* handle error to display the error dialog
|
|
629
|
-
* @param error
|
|
630
|
-
*/
|
|
631
|
-
async handleError(error) {
|
|
632
|
-
await this.props.actionFeedbackContext.displayError(error.message);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
/**
|
|
636
|
-
* Toggle processing state
|
|
637
|
-
* @returns {Promise<void>}
|
|
638
|
-
*/
|
|
639
|
-
async toggleProcessing() {
|
|
640
|
-
const prev = this.state.processing;
|
|
641
|
-
return this.setState({processing: !prev});
|
|
194
|
+
return this.props.adminUserDirectoryContext.getSettings().useEmailPrefix;
|
|
642
195
|
}
|
|
643
196
|
|
|
644
197
|
/**
|
|
645
198
|
* Get users allowed to be default admin
|
|
646
199
|
*/
|
|
647
200
|
getUsersAllowedToBeDefaultAdmin() {
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
201
|
+
const users = this.props.adminUserDirectoryContext.getUsers();
|
|
202
|
+
if (users !== null) {
|
|
203
|
+
const usersFiltered = users.filter(user => user.active === true && user.role.name === "admin");
|
|
204
|
+
return usersFiltered && usersFiltered.map(user => ({value: user.id, label: this.displayUser(user)}));
|
|
651
205
|
}
|
|
652
206
|
return [];
|
|
653
207
|
}
|
|
@@ -656,9 +210,10 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
656
210
|
* Get users allowed to be default group admin
|
|
657
211
|
*/
|
|
658
212
|
getUsersAllowedToBeDefaultGroupAdmin() {
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
213
|
+
const users = this.props.adminUserDirectoryContext.getUsers();
|
|
214
|
+
if (users !== null) {
|
|
215
|
+
const usersFiltered = users.filter(user => user.active === true);
|
|
216
|
+
return usersFiltered && usersFiltered.map(user => ({value: user.id, label: this.displayUser(user)}));
|
|
662
217
|
}
|
|
663
218
|
return [];
|
|
664
219
|
}
|
|
@@ -672,17 +227,6 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
672
227
|
return `${user.profile.first_name} ${user.profile.last_name} (${user.username})`;
|
|
673
228
|
}
|
|
674
229
|
|
|
675
|
-
/**
|
|
676
|
-
* Display default admin
|
|
677
|
-
*/
|
|
678
|
-
displayDefaultAdmin() {
|
|
679
|
-
if (this.state.users !== null && this.state.defaultAdmin !== "") {
|
|
680
|
-
const user = this.state.users.find(user => user.id === this.state.defaultAdmin);
|
|
681
|
-
return this.displayUser(user);
|
|
682
|
-
}
|
|
683
|
-
return "";
|
|
684
|
-
}
|
|
685
|
-
|
|
686
230
|
/**
|
|
687
231
|
* get the connection type
|
|
688
232
|
*/
|
|
@@ -694,326 +238,309 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
694
238
|
];
|
|
695
239
|
}
|
|
696
240
|
|
|
697
|
-
/**
|
|
698
|
-
* Handle field focus
|
|
699
|
-
*/
|
|
700
|
-
handleFieldFocus() {
|
|
701
|
-
this.setState({hasFieldFocus: true});
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
/**
|
|
705
|
-
* Handle field blur
|
|
706
|
-
*/
|
|
707
|
-
handleFieldBlur() {
|
|
708
|
-
this.setState({hasFieldFocus: false});
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
/**
|
|
712
|
-
* Get the translate function
|
|
713
|
-
* @returns {function(...[*]=)}
|
|
714
|
-
*/
|
|
715
|
-
get translate() {
|
|
716
|
-
return this.props.t;
|
|
717
|
-
}
|
|
718
|
-
|
|
719
241
|
/**
|
|
720
242
|
* Render the component
|
|
721
243
|
* @returns {JSX}
|
|
722
244
|
*/
|
|
723
245
|
render() {
|
|
246
|
+
const settings = this.props.adminUserDirectoryContext.getSettings();
|
|
247
|
+
const errors = this.props.adminUserDirectoryContext.getErrors();
|
|
248
|
+
const isSubmitted = this.props.adminUserDirectoryContext.isSubmitted();
|
|
724
249
|
return (
|
|
725
250
|
<div className="row">
|
|
726
251
|
<div className="ldap-settings col7 main-column">
|
|
727
252
|
<h3>
|
|
728
253
|
<span className="input toggle-switch form-element">
|
|
729
254
|
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="userDirectoryToggle"
|
|
730
|
-
onChange={this.handleInputChange} checked={
|
|
255
|
+
onChange={this.handleInputChange} checked={settings.userDirectoryToggle} disabled={this.hasAllInputDisabled()}
|
|
731
256
|
id="userDirectoryToggle"/>
|
|
732
257
|
<label htmlFor="userDirectoryToggle"><Trans>Users Directory</Trans></label>
|
|
733
258
|
</span>
|
|
734
259
|
</h3>
|
|
735
260
|
{!this.isUserDirectoryChecked() &&
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
261
|
+
<p className="description">
|
|
262
|
+
<Trans>No Users Directory is configured. Enable it to synchronise your users and groups with passbolt.</Trans>
|
|
263
|
+
</p>
|
|
739
264
|
}
|
|
740
265
|
{this.isUserDirectoryChecked() &&
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
266
|
+
<>
|
|
267
|
+
<p className="description">
|
|
268
|
+
<Trans>A Users Directory is configured. The users and groups of passbolt will synchronize with it.</Trans>
|
|
269
|
+
</p>
|
|
270
|
+
<div className={`accordion section-general ${settings.openCredentials ? "" : "closed"}`}>
|
|
271
|
+
<h4 className="accordion-header">
|
|
272
|
+
<a onClick={this.handleCredentialTitleClicked}>
|
|
273
|
+
{settings.openCredentials && <Icon name="caret-down"/>}
|
|
274
|
+
{!settings.openCredentials && <Icon name="caret-right"/>}
|
|
275
|
+
<Trans>Credentials</Trans>
|
|
276
|
+
</a>
|
|
277
|
+
</h4>
|
|
278
|
+
<div className="accordion-content">
|
|
279
|
+
<div className="radiolist required">
|
|
280
|
+
<label><Trans>Directory type</Trans></label>
|
|
281
|
+
<div className="input radio ad openldap form-element ">
|
|
282
|
+
<div className="input radio">
|
|
283
|
+
<input type="radio" value="ad" onChange={this.handleInputChange} name="directoryType"
|
|
284
|
+
checked={this.isActiveDirectoryChecked()} id="directoryTypeAd"
|
|
285
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
286
|
+
<label htmlFor="directoryTypeAd"><Trans>Active Directory</Trans></label>
|
|
287
|
+
</div>
|
|
288
|
+
<div className="input radio">
|
|
289
|
+
<input type="radio" value="openldap" onChange={this.handleInputChange} name="directoryType"
|
|
290
|
+
checked={this.isOpenLdapChecked()} id="directoryTypeOpenLdap"
|
|
291
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
292
|
+
<label htmlFor="directoryTypeOpenLdap"><Trans>Open Ldap</Trans></label>
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
</div>
|
|
296
|
+
<div className={`input text required ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
297
|
+
<label><Trans>Server url</Trans></label>
|
|
298
|
+
<div className={`input text singleline connection_info ad openldap ${this.state.hasFieldFocus ? "no-focus" : ""}`}>
|
|
299
|
+
<input id="server-input" type="text" className="required host ad openldap form-element" name="host"
|
|
300
|
+
value={settings.host} onChange={this.handleInputChange}
|
|
301
|
+
placeholder={this.props.t("host")} disabled={this.hasAllInputDisabled()}/>
|
|
302
|
+
<div className="protocol" onBlur={this.handleFieldBlur} onFocus={this.handleFieldFocus}>
|
|
303
|
+
<Select className="inline" name="connectionType" items={this.connectionType} value={settings.connectionType} onChange={this.handleInputChange} disabled={this.hasAllInputDisabled()}/>
|
|
304
|
+
</div>
|
|
305
|
+
<div className="port ad openldap">
|
|
306
|
+
<input id="port-input" type="number" className="required in-field form-element" name="port"
|
|
307
|
+
value={settings.port} onChange={this.handleInputChange}
|
|
308
|
+
onBlur={this.handleFieldBlur} onFocus={this.handleFieldFocus}
|
|
309
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
{errors.hostError && isSubmitted &&
|
|
313
|
+
<div id="server-input-feedback" className="error-message">{errors.hostError}</div>
|
|
314
|
+
}
|
|
315
|
+
{errors.portError && isSubmitted &&
|
|
316
|
+
<div id="port-input-feedback" className="error-message">{errors.portError}</div>
|
|
317
|
+
}
|
|
318
|
+
</div>
|
|
319
|
+
<div className="singleline clearfix">
|
|
320
|
+
<div className={`input text first-field ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
321
|
+
<label><Trans>Username</Trans></label>
|
|
322
|
+
<input id="username-input" type="text" className="fluid form-element" name="username"
|
|
323
|
+
value={settings.username} onChange={this.handleInputChange} placeholder={this.props.t("Username")}
|
|
324
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
325
|
+
</div>
|
|
326
|
+
<div className={`input text last-field ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
327
|
+
<label><Trans>Password</Trans></label>
|
|
328
|
+
<input id="password-input" className="fluid form-element" name="password"
|
|
329
|
+
value={settings.password} onChange={this.handleInputChange} placeholder={this.props.t("Password")} type="password"
|
|
330
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
<div className={`input text required ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
334
|
+
<label><Trans>Domain</Trans></label>
|
|
335
|
+
<input id="domain-name-input" type="text" name="domain" value={settings.domain}
|
|
336
|
+
onChange={this.handleInputChange} className="required fluid form-element"
|
|
337
|
+
placeholder="domain.ext" disabled={this.hasAllInputDisabled()}/>
|
|
338
|
+
{errors.domainError && isSubmitted &&
|
|
339
|
+
<div id="domain-name-input-feedback" className="error-message">{errors.domainError}</div>
|
|
340
|
+
}
|
|
341
|
+
</div>
|
|
342
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
343
|
+
<label><Trans>Base DN</Trans></label>
|
|
344
|
+
<input id="base-dn-input" type="text" name="baseDn" value={settings.baseDn}
|
|
345
|
+
onChange={this.handleInputChange} className="fluid form-element" placeholder="OU=OrgUsers,DC=mydomain,DC=local"
|
|
346
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
347
|
+
<div className="help-message">
|
|
348
|
+
<Trans>The base DN (default naming context) for the domain.</Trans> <Trans>If this is empty then it will be queried from the RootDSE.</Trans>
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
</div>
|
|
353
|
+
<div
|
|
354
|
+
className={`accordion section-directory-configuration ${settings.openDirectoryConfiguration ? "" : "closed"}`}>
|
|
355
|
+
<h4 className="accordion-header">
|
|
356
|
+
<a onClick={this.handleDirectoryConfigurationTitleClicked}>
|
|
357
|
+
{settings.openDirectoryConfiguration && <Icon name="caret-down"/>}
|
|
358
|
+
{!settings.openDirectoryConfiguration && <Icon name="caret-right"/>}
|
|
359
|
+
<Trans>Directory configuration</Trans>
|
|
360
|
+
</a>
|
|
361
|
+
</h4>
|
|
362
|
+
<div className="accordion-content">
|
|
363
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
364
|
+
<label><Trans>Group path</Trans></label>
|
|
365
|
+
<input id="group-path-input" type="text" name="groupPath" value={settings.groupPath}
|
|
366
|
+
onChange={this.handleInputChange} className="required fluid form-element" placeholder={this.props.t("Group path")}
|
|
367
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
368
|
+
<div className="help-message">
|
|
369
|
+
<Trans>Group path is used in addition to the base DN while searching groups.</Trans> <Trans>Leave empty if users and groups are in the same DN.</Trans>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
373
|
+
<label><Trans>User path</Trans></label>
|
|
374
|
+
<input id="user-path-input" type="text" name="userPath" value={settings.userPath}
|
|
375
|
+
onChange={this.handleInputChange} className="required fluid form-element" placeholder={this.props.t("User path")}
|
|
376
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
377
|
+
<div className="help-message"><Trans>User path is used in addition to base DN while searching users.</Trans></div>
|
|
378
|
+
</div>
|
|
379
|
+
{this.isOpenLdapChecked() &&
|
|
380
|
+
<div>
|
|
381
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
382
|
+
<label><Trans>Group object class</Trans></label>
|
|
383
|
+
<input id="group-object-class-input" type="text" name="groupObjectClass"
|
|
384
|
+
value={settings.groupObjectClass} onChange={this.handleInputChange} className="required fluid"
|
|
385
|
+
placeholder="GroupObjectClass" disabled={this.hasAllInputDisabled()}/>
|
|
386
|
+
<div className="help-message">
|
|
387
|
+
<Trans>For Openldap only. Defines which group object to use.</Trans> (<Trans>Default</Trans>: posixGroup)
|
|
388
|
+
</div>
|
|
389
|
+
</div>
|
|
390
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
391
|
+
<label><Trans>User object class</Trans></label>
|
|
392
|
+
<input id="user-object-class-input" type="text" name="userObjectClass"
|
|
393
|
+
value={settings.userObjectClass} onChange={this.handleInputChange} className="required fluid form-element"
|
|
394
|
+
placeholder="UserObjectClass" disabled={this.hasAllInputDisabled()}/>
|
|
395
|
+
<div className="help-message"><Trans>For Openldap only. Defines which user object to use.</Trans> (<Trans>Default</Trans>: inetOrgPerson)
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
<div className={`input text openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
399
|
+
<label><Trans>Use email prefix / suffix?</Trans></label>
|
|
400
|
+
<div className="input toggle-switch openldap form-element">
|
|
401
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="useEmailPrefix"
|
|
402
|
+
value={settings.useEmailPrefix} onChange={this.handleInputChange} id="use-email-prefix-suffix-toggle-button"
|
|
403
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
404
|
+
<label className="text" htmlFor="use-email-prefix-suffix-toggle-button">
|
|
405
|
+
<Trans>Build email based on a prefix and suffix?</Trans>
|
|
406
|
+
</label>
|
|
407
|
+
</div>
|
|
408
|
+
<div className="help-message">
|
|
409
|
+
<Trans>Use this option when user entries do not include an email address by default</Trans>
|
|
410
|
+
</div>
|
|
411
|
+
</div>
|
|
412
|
+
{this.isUseEmailPrefixChecked() &&
|
|
413
|
+
<div className="singleline clearfix" id="use-email-prefix-suffix-options">
|
|
414
|
+
<div className={`input text first-field openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
415
|
+
<label><Trans>Email prefix</Trans></label>
|
|
416
|
+
<input id="email-prefix-input" type="text" name="emailPrefix" checked={settings.emailPrefix}
|
|
417
|
+
onChange={this.handleInputChange} className="required fluid form-element" placeholder={this.props.t("Username")}
|
|
418
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
419
|
+
<div className="help-message">
|
|
420
|
+
<Trans>The attribute you would like to use for the first part of the email (usually username).</Trans>
|
|
421
|
+
</div>
|
|
422
|
+
</div>
|
|
423
|
+
<div className={`input text last-field openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
424
|
+
|
|
425
|
+
<label><Trans>Email suffix</Trans></label>
|
|
426
|
+
<input id="email-suffix-input" type="text" name="emailSuffix" value={settings.emailSuffix}
|
|
427
|
+
onChange={this.handleInputChange} className="required form-element"
|
|
428
|
+
placeholder={this.props.t("@your-domain.com")} disabled={this.hasAllInputDisabled()}/>
|
|
429
|
+
<div className="help-message">
|
|
430
|
+
<Trans>The domain name part of the email (@your-domain-name).</Trans>
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
</div>
|
|
434
|
+
}
|
|
435
|
+
</div>
|
|
436
|
+
}
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
<div
|
|
440
|
+
className={`accordion section-sync-options ${settings.openSynchronizationOptions ? "" : "closed"}`}>
|
|
441
|
+
<h4 className="accordion-header">
|
|
442
|
+
<a onClick={this.handleSynchronizationOptionsTitleClicked}>
|
|
443
|
+
{settings.openSynchronizationOptions && <Icon name="caret-down"/>}
|
|
444
|
+
{!settings.openSynchronizationOptions && <Icon name="caret-right"/>}
|
|
445
|
+
<Trans>Synchronization options</Trans>
|
|
446
|
+
</a>
|
|
447
|
+
</h4>
|
|
448
|
+
<div className="accordion-content">
|
|
449
|
+
<div className={`select-wrapper input required ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
450
|
+
<label><Trans>Default admin</Trans></label>
|
|
451
|
+
<Select items={this.getUsersAllowedToBeDefaultAdmin()}
|
|
452
|
+
id="default-user-select"
|
|
453
|
+
name="defaultAdmin"
|
|
454
|
+
value={settings.defaultAdmin}
|
|
455
|
+
onChange={this.handleInputChange}
|
|
456
|
+
disabled={this.hasAllInputDisabled()}
|
|
457
|
+
search={true}/>
|
|
458
|
+
<div className="help-message">
|
|
459
|
+
<Trans>The default admin user is the user that will perform the operations for the the directory.</Trans>
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
<div className={`select-wrapper input required ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
463
|
+
<label><Trans>Default group admin</Trans></label>
|
|
464
|
+
<Select items={this.getUsersAllowedToBeDefaultGroupAdmin()}
|
|
465
|
+
id="default-group-admin-user-select"
|
|
466
|
+
name="defaultGroupAdmin"
|
|
467
|
+
value={settings.defaultGroupAdmin}
|
|
468
|
+
onChange={this.handleInputChange}
|
|
469
|
+
disabled={this.hasAllInputDisabled()}
|
|
470
|
+
search={true}/>
|
|
471
|
+
<div className="help-message">
|
|
472
|
+
<Trans>The default group manager is the user that will be the group manager of newly created groups.</Trans>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
476
|
+
<label><Trans>Groups parent group</Trans></label>
|
|
477
|
+
<input id="groups-parent-group-input" type="text" name="groupsParentGroup"
|
|
478
|
+
value={settings.groupsParentGroup} onChange={this.handleInputChange} className="fluid form-element" placeholder={this.props.t("Group name")}
|
|
479
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
480
|
+
<div className="help-message">
|
|
481
|
+
<Trans>Synchronize only the groups which are members of this group.</Trans>
|
|
482
|
+
</div>
|
|
483
|
+
</div>
|
|
484
|
+
<div className={`input text ad openldap ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
485
|
+
<label><Trans>Users parent group</Trans></label>
|
|
486
|
+
<input id="users-parent-group-input" type="text" name="usersParentGroup"
|
|
487
|
+
value={settings.usersParentGroup} onChange={this.handleInputChange} className="fluid form-element" placeholder={this.props.t("Group name")}
|
|
488
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
489
|
+
<div className="help-message">
|
|
490
|
+
<Trans>Synchronize only the users which are members of this group.</Trans>
|
|
491
|
+
</div>
|
|
492
|
+
</div>
|
|
493
|
+
{this.isActiveDirectoryChecked() &&
|
|
494
|
+
<div className={`input text clearfix ad ${this.hasAllInputDisabled() ? 'disabled' : ''}`}>
|
|
495
|
+
<label><Trans>Enabled users only</Trans></label>
|
|
496
|
+
<div className="input toggle-switch ad form-element">
|
|
497
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="enabledUsersOnly"
|
|
498
|
+
checked={settings.enabledUsersOnly} onChange={this.handleInputChange} id="enabled-users-only-toggle-button"
|
|
499
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
500
|
+
<label className="text" htmlFor="enabled-users-only-toggle-button"><Trans>Only synchronize enabled users (AD)</Trans></label>
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
}
|
|
504
|
+
<div className="input text clearfix ad openldap">
|
|
505
|
+
<label><Trans>Sync operations</Trans></label>
|
|
506
|
+
<div className="col6">
|
|
507
|
+
<div className="input toggle-switch ad openldap form-element">
|
|
508
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="createUsers"
|
|
509
|
+
checked={settings.createUsers} onChange={this.handleInputChange} id="sync-users-create-toggle-button"
|
|
510
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
511
|
+
<label className="text" htmlFor="sync-users-create-toggle-button"><Trans>Create users</Trans></label>
|
|
512
|
+
</div>
|
|
513
|
+
<div className="input toggle-switch ad openldap form-element">
|
|
514
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="deleteUsers"
|
|
515
|
+
checked={settings.deleteUsers} onChange={this.handleInputChange} id="sync-users-delete-toggle-button"
|
|
516
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
517
|
+
<label className="text" htmlFor="sync-users-delete-toggle-button"><Trans>Delete users</Trans></label>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
<div className="col6 last">
|
|
521
|
+
<div className="input toggle-switch ad openldap form-element">
|
|
522
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="createGroups"
|
|
523
|
+
checked={settings.createGroups} onChange={this.handleInputChange} id="sync-groups-create-toggle-button"
|
|
524
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
525
|
+
<label className="text" htmlFor="sync-groups-create-toggle-button"><Trans>Create groups</Trans></label>
|
|
526
|
+
</div>
|
|
527
|
+
<div className="input toggle-switch ad openldap form-element">
|
|
528
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="deleteGroups"
|
|
529
|
+
checked={settings.deleteGroups} onChange={this.handleInputChange} id="sync-groups-delete-toggle-button"
|
|
530
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
531
|
+
<label className="text" htmlFor="sync-groups-delete-toggle-button"><Trans>Delete groups</Trans></label>
|
|
532
|
+
</div>
|
|
533
|
+
<div className="input toggle-switch ad openldap form-element">
|
|
534
|
+
<input type="checkbox" className="toggle-switch-checkbox checkbox" name="updateGroups"
|
|
535
|
+
checked={settings.updateGroups} onChange={this.handleInputChange} id="sync-groups-update-toggle-button"
|
|
536
|
+
disabled={this.hasAllInputDisabled()}/>
|
|
537
|
+
<label className="text" htmlFor="sync-groups-update-toggle-button"><Trans>Update groups</Trans></label>
|
|
538
|
+
</div>
|
|
539
|
+
</div>
|
|
540
|
+
</div>
|
|
541
|
+
</div>
|
|
542
|
+
</div>
|
|
543
|
+
</>
|
|
1017
544
|
}
|
|
1018
545
|
</div>
|
|
1019
546
|
<div className="col4 last">
|
|
@@ -1032,11 +559,11 @@ class DisplayUserDirectoryAdministration extends React.Component {
|
|
|
1032
559
|
}
|
|
1033
560
|
|
|
1034
561
|
DisplayUserDirectoryAdministration.propTypes = {
|
|
1035
|
-
|
|
562
|
+
adminUserDirectoryContext: PropTypes.object, // The user directory workspace context
|
|
1036
563
|
administrationWorkspaceContext: PropTypes.object, // The administration workspace context
|
|
1037
|
-
actionFeedbackContext: PropTypes.any, // The action feedback context
|
|
1038
|
-
dialogContext: PropTypes.any, // The dialog context
|
|
1039
564
|
t: PropTypes.func, // The translation function
|
|
1040
565
|
};
|
|
1041
566
|
|
|
1042
|
-
export default
|
|
567
|
+
export default withAdminUserDirectory(withAdministrationWorkspace(withTranslation('common')(DisplayUserDirectoryAdministration)));
|
|
568
|
+
|
|
569
|
+
|