import React, { useCallback, useEffect, useState } 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 { toastError, toastSuccess } 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.updateLdapSetting({ serverUrl: data.serverUrl, isUserBind: adminLdapSecurityContainer.state.isUserBind, ldapBindDN: data.ldapBindDN, ldapBindDNPassword: data.ldapBindDNPassword, ldapSearchFilter: data.ldapSearchFilter, ldapAttrMapUsername: data.ldapAttrMapUsername, isSameUsernameTreatedAsIdenticalUser: adminLdapSecurityContainer.state .isSameUsernameTreatedAsIdenticalUser, ldapAttrMapMail: data.ldapAttrMapMail, ldapAttrMapName: data.ldapAttrMapName, ldapGroupSearchBase: data.ldapGroupSearchBase, ldapGroupSearchFilter: data.ldapGroupSearchFilter, ldapGroupDnProperty: data.ldapGroupDnProperty, }); 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

{t('security_settings.ldap.bind_mode')}
{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;