import React from 'react';
import { useAtomValue } from 'jotai';
import { useTranslation } from 'next-i18next';
import Link from 'next/link';
import PropTypes from 'prop-types';
import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer';
import AdminLocalSecurityContainer from '~/client/services/AdminLocalSecurityContainer';
import { toastSuccess, toastError } from '~/client/util/toastr';
import { isMailerSetupAtom } from '~/states/server-configurations';
import { withUnstatedContainers } from '../../UnstatedUtils';
class LocalSecuritySettingContents extends React.Component {
constructor(props) {
super(props);
this.onClickSubmit = this.onClickSubmit.bind(this);
}
async onClickSubmit() {
const { t, adminGeneralSecurityContainer, adminLocalSecurityContainer } = this.props;
try {
await adminLocalSecurityContainer.updateLocalSecuritySetting();
await adminGeneralSecurityContainer.retrieveSetupStratedies();
toastSuccess(t('security_settings.updated_general_security_setting'));
}
catch (err) {
toastError(err);
}
}
render() {
const {
t,
adminGeneralSecurityContainer,
adminLocalSecurityContainer,
isMailerSetup,
} = this.props;
const { registrationMode, isPasswordResetEnabled, isEmailAuthenticationEnabled } = adminLocalSecurityContainer.state;
const { isLocalEnabled } = adminGeneralSecurityContainer.state;
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')}
adminLocalSecurityContainer.switchIsPasswordResetEnabled()}
/>
{!isMailerSetup && (
{t('commons:alert.password_reset_please_enable_mailer')}
link {t('app_setting.mail_settings')}
)}
{t('security_settings.Local.password_reset_desc')}
adminLocalSecurityContainer.switchIsEmailAuthenticationEnabled()}
/>
{!isMailerSetup && (
{t('commons:alert.please_enable_mailer')}
link {t('app_setting.mail_settings')}
)}
{t('security_settings.Local.enable_email_authentication_desc')}
>
)}
>
);
}
}
LocalSecuritySettingContents.propTypes = {
t: PropTypes.func.isRequired, // i18next
adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired,
adminLocalSecurityContainer: PropTypes.instanceOf(AdminLocalSecurityContainer).isRequired,
};
const LocalSecuritySettingContentsWrapperFC = (props) => {
const { t } = useTranslation('admin');
const isMailerSetup = useAtomValue(isMailerSetupAtom);
return ;
};
const LocalSecuritySettingContentsWrapper = withUnstatedContainers(LocalSecuritySettingContentsWrapperFC, [
AdminGeneralSecurityContainer,
AdminLocalSecurityContainer,
]);
export default LocalSecuritySettingContentsWrapper;