import React, { useState, useEffect, useCallback, } from 'react'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer'; import AdminLdapSecurityContainer from '~/client/services/AdminLdapSecurityContainer'; import { toastSuccess, toastError } from '~/client/util/toastr'; import { withUnstatedContainers } from '../../UnstatedUtils'; import LdapAuthTestModal from './LdapAuthTestModal'; type Props = { adminGeneralSecurityContainer: AdminGeneralSecurityContainer; adminLdapSecurityContainer: AdminLdapSecurityContainer; }; const LdapSecuritySettingContents = (props: Props) => { const { adminGeneralSecurityContainer, adminLdapSecurityContainer } = props; const { t } = useTranslation('admin'); const { isLdapEnabled } = adminGeneralSecurityContainer.state; const { serverUrl, ldapBindDN, ldapBindDNPassword, ldapSearchFilter, ldapAttrMapUsername, ldapAttrMapMail, ldapAttrMapName, ldapGroupSearchBase, ldapGroupSearchFilter, ldapGroupDnProperty, } = adminLdapSecurityContainer.state; const [isLdapAuthTestModalShown, setIsLdapAuthTestModalShown] = useState(false); const { register, handleSubmit, reset } = useForm(); useEffect(() => { reset({ serverUrl, ldapBindDN, ldapBindDNPassword, ldapSearchFilter, ldapAttrMapUsername, ldapAttrMapMail, ldapAttrMapName, ldapGroupSearchBase, ldapGroupSearchFilter, ldapGroupDnProperty, }); }, [ reset, serverUrl, ldapBindDN, ldapBindDNPassword, ldapSearchFilter, ldapAttrMapUsername, ldapAttrMapMail, ldapAttrMapName, ldapGroupSearchBase, ldapGroupSearchFilter, ldapGroupDnProperty, ]); const onSubmit = useCallback(async(data) => { try { await adminLdapSecurityContainer.changeServerUrl(data.serverUrl); await adminLdapSecurityContainer.changeBindDN(data.ldapBindDN); await adminLdapSecurityContainer.changeBindDNPassword(data.ldapBindDNPassword); await adminLdapSecurityContainer.changeSearchFilter(data.ldapSearchFilter); await adminLdapSecurityContainer.changeAttrMapUsername(data.ldapAttrMapUsername); await adminLdapSecurityContainer.changeAttrMapMail(data.ldapAttrMapMail); await adminLdapSecurityContainer.changeAttrMapName(data.ldapAttrMapName); await adminLdapSecurityContainer.changeGroupSearchBase(data.ldapGroupSearchBase); await adminLdapSecurityContainer.changeGroupSearchFilter(data.ldapGroupSearchFilter); await adminLdapSecurityContainer.changeGroupDnProperty(data.ldapGroupDnProperty); await adminLdapSecurityContainer.updateLdapSetting(); await adminGeneralSecurityContainer.retrieveSetupStratedies(); toastSuccess(t('security_settings.ldap.updated_ldap')); } catch (err) { toastError(err); } }, [t, adminLdapSecurityContainer, adminGeneralSecurityContainer]); const openLdapAuthTestModal = useCallback(() => { setIsLdapAuthTestModalShown(true); }, []); const closeLdapAuthTestModal = useCallback(() => { setIsLdapAuthTestModalShown(false); }, []); return (

LDAP

{ adminGeneralSecurityContainer.switchIsLdapEnabled() }} />
{(!adminGeneralSecurityContainer.state.setupStrategies.includes('ldap') && isLdapEnabled) &&
{t('security_settings.setup_is_not_yet_complete')}
}
{isLdapEnabled && (

{t('security_settings.configuration')}

{t('security_settings.example')}: ldaps://ldap.company.com/ou=people,dc=company,dc=com

{(adminLdapSecurityContainer.state.isUserBind === true) ? (

{t('security_settings.ldap.bind_DN_user_detail1')}
{/* eslint-disable-next-line react/no-danger */}
{t('security_settings.example')}1: uid={'{{ username }}'},dc=domain,dc=com
{t('security_settings.example')}2: {'{{ username }}'}@domain.com

) : (

{t('security_settings.ldap.bind_DN_manager_detail')}
{t('security_settings.example')}1: uid=admin,dc=domain,dc=com
{t('security_settings.example')}2: admin@domain.com

)}
{(adminLdapSecurityContainer.state.isUserBind) ? (

{t('security_settings.ldap.bind_DN_password_user_detail')}

) : ( <>

{t('security_settings.ldap.bind_DN_password_manager_detail')}

)}

{t('security_settings.ldap.search_filter_detail1')}
{/* eslint-disable-next-line react/no-danger */}
{/* eslint-disable-next-line react/no-danger */}

{t('security_settings.example')}1 - {t('security_settings.ldap.search_filter_example1')}: (|(uid={'{{username}}'})(mail={'{{username}}'}))
{t('security_settings.example')}2 - {t('security_settings.ldap.search_filter_example2')}: (sAMAccountName={'{{username}}'})

Attribute Mapping ({t('optional')})

{/* eslint-disable-next-line react/no-danger */}

{ adminLdapSecurityContainer.switchIsSameUsernameTreatedAsIdenticalUser() }} />

{/* eslint-disable-next-line react/no-danger */}

{t('security_settings.ldap.mail_detail')}

{t('security_settings.ldap.name_detail')}

{t('security_settings.ldap.group_search_filter')} ({t('optional')})

{/* eslint-disable-next-line react/no-danger */}
{t('security_settings.example')}: ou=groups,dc=domain,dc=com

{/* eslint-disable react/no-danger */}

{/* eslint-enable react/no-danger */}

{t('security_settings.example')}: {/* eslint-disable-next-line react/no-danger */}

{/* eslint-disable-next-line react/no-danger */}

)}
); }; const LdapSecuritySettingContentsWrapper = withUnstatedContainers(LdapSecuritySettingContents, [ AdminGeneralSecurityContainer, AdminLdapSecurityContainer, ]); export default LdapSecuritySettingContentsWrapper;