import React, { useCallback, useEffect } from 'react'; import Link from 'next/link'; import { useAtomValue } from 'jotai'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer'; import AdminLocalSecurityContainer from '~/client/services/AdminLocalSecurityContainer'; import { toastError, toastSuccess } from '~/client/util/toastr'; import { isMailerSetupAtom } from '~/states/server-configurations'; import { withUnstatedContainers } from '../../UnstatedUtils'; type Props = { adminGeneralSecurityContainer: AdminGeneralSecurityContainer; adminLocalSecurityContainer: AdminLocalSecurityContainer; }; const LocalSecuritySettingContents = (props: Props): JSX.Element => { const { adminGeneralSecurityContainer, adminLocalSecurityContainer } = props; const { t } = useTranslation('admin'); const isMailerSetup = useAtomValue(isMailerSetupAtom); const { register, handleSubmit, reset } = useForm(); const { registrationMode, isPasswordResetEnabled, isEmailAuthenticationEnabled, } = adminLocalSecurityContainer.state; const { isLocalEnabled } = adminGeneralSecurityContainer.state; useEffect(() => { reset({ registrationWhitelist: adminLocalSecurityContainer.state.registrationWhitelist.join('\n'), }); }, [reset, adminLocalSecurityContainer.state.registrationWhitelist]); const onSubmit = useCallback( async (data) => { try { await adminLocalSecurityContainer.updateLocalSecuritySetting({ registrationMode: adminLocalSecurityContainer.state.registrationMode, registrationWhitelist: data.registrationWhitelist.split('\n'), isPasswordResetEnabled: adminLocalSecurityContainer.state.isPasswordResetEnabled, isEmailAuthenticationEnabled: adminLocalSecurityContainer.state.isEmailAuthenticationEnabled, }); await adminGeneralSecurityContainer.retrieveSetupStratedies(); toastSuccess(t('security_settings.updated_general_security_setting')); } catch (err) { toastError(err); } }, [t, adminGeneralSecurityContainer, adminLocalSecurityContainer], ); return ( <> {adminLocalSecurityContainer.state.retrieveError != null && (

{t('Error occurred')} :{' '} {adminLocalSecurityContainer.state.retrieveError}

)}

{t('security_settings.Local.name')}

{adminLocalSecurityContainer.state.useOnlyEnvVars && (

)}

adminGeneralSecurityContainer.switchIsLocalEnabled() } disabled={adminLocalSecurityContainer.state.useOnlyEnvVars} />
{!adminGeneralSecurityContainer.state.setupStrategies.includes( 'local', ) && isLocalEnabled && (
{t('security_settings.setup_is_not_yet_complete')}
)}
{isLocalEnabled && (

{t('security_settings.configuration')}

{t('security_settings.register_limitation')}

{t('security_settings.register_limitation_desc')}