/* eslint-disable react/no-danger */ import React, { useState, useEffect, useCallback } from 'react'; import { pathUtils } from '@growi/core/dist/utils'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import { Collapse } from 'reactstrap'; import urljoin from 'url-join'; import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer'; import AdminSamlSecurityContainer from '~/client/services/AdminSamlSecurityContainer'; import { toastSuccess, toastError } from '~/client/util/toastr'; import { useSiteUrl } from '~/stores-universal/context'; import { withUnstatedContainers } from '../../UnstatedUtils'; type Props = { adminGeneralSecurityContainer: AdminGeneralSecurityContainer; adminSamlSecurityContainer: AdminSamlSecurityContainer; }; const SamlSecurityManagementContents = (props: Props) => { const { adminGeneralSecurityContainer, adminSamlSecurityContainer, } = props; const { t } = useTranslation('admin'); const { data: siteUrl } = useSiteUrl(); const [isHelpOpened, setIsHelpOpened] = useState(false); const { register, handleSubmit, reset } = useForm(); useEffect(() => { reset({ samlEntryPoint: adminSamlSecurityContainer.state.samlEntryPoint || '', samlIssuer: adminSamlSecurityContainer.state.samlIssuer || '', samlCert: adminSamlSecurityContainer.state.samlCert || '', samlAttrMapId: adminSamlSecurityContainer.state.samlAttrMapId || '', samlAttrMapUsername: adminSamlSecurityContainer.state.samlAttrMapUsername || '', samlAttrMapMail: adminSamlSecurityContainer.state.samlAttrMapMail || '', samlAttrMapFirstName: adminSamlSecurityContainer.state.samlAttrMapFirstName || '', samlAttrMapLastName: adminSamlSecurityContainer.state.samlAttrMapLastName || '', samlABLCRule: adminSamlSecurityContainer.state.samlABLCRule || '', }); }, [adminSamlSecurityContainer.state, reset]); const onSubmit = useCallback(async(data) => { adminSamlSecurityContainer.changeSamlEntryPoint(data.samlEntryPoint); adminSamlSecurityContainer.changeSamlIssuer(data.samlIssuer); adminSamlSecurityContainer.changeSamlCert(data.samlCert); adminSamlSecurityContainer.changeSamlAttrMapId(data.samlAttrMapId); adminSamlSecurityContainer.changeSamlAttrMapUserName(data.samlAttrMapUsername); adminSamlSecurityContainer.changeSamlAttrMapMail(data.samlAttrMapMail); adminSamlSecurityContainer.changeSamlAttrMapFirstName(data.samlAttrMapFirstName); adminSamlSecurityContainer.changeSamlAttrMapLastName(data.samlAttrMapLastName); adminSamlSecurityContainer.changeSamlABLCRule(data.samlABLCRule); try { await adminSamlSecurityContainer.updateSamlSetting(); toastSuccess(t('security_settings.SAML.updated_saml')); } catch (err) { toastError(err); } try { await adminGeneralSecurityContainer.retrieveSetupStratedies(); } catch (err) { toastError(err); } }, [adminSamlSecurityContainer, adminGeneralSecurityContainer, t]); const { useOnlyEnvVars } = adminSamlSecurityContainer.state; const { isSamlEnabled } = adminGeneralSecurityContainer.state; const samlCallbackUrl = urljoin( siteUrl == null ? '' : pathUtils.removeTrailingSlash(siteUrl), '/passport/saml/callback', ); return (

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

{useOnlyEnvVars && (

)}

{ adminGeneralSecurityContainer.switchIsSamlEnabled() }} disabled={adminSamlSecurityContainer.state.useOnlyEnvVars} />
{(!adminGeneralSecurityContainer.state.setupStrategies.includes('saml') && isSamlEnabled) &&
{t('security_settings.setup_is_not_yet_complete')}
}

{t('security_settings.desc_of_callback_URL', { AuthName: 'SAML Identity' })}

{(siteUrl == null || siteUrl === '') && (
error ${t('headers.app_settings', { ns: 'commons' })}login`, ns: 'commons' }) }} />
)}
{isSamlEnabled && (
{(adminSamlSecurityContainer.state.missingMandatoryConfigKeys.length !== 0) && (
{t('security_settings.missing mandatory configs')}
    {adminSamlSecurityContainer.state.missingMandatoryConfigKeys.map((configKey) => { const key = configKey.replace('security:passport-saml:', ''); return
  • {t(`security_settings.form_item_name.${key}`)}
  • ; })}
)}

Basic Settings

DatabaseEnvironment variables
{t('security_settings.form_item_name.entryPoint')}

{t('security_settings.form_item_name.issuer')}

{t('security_settings.form_item_name.cert')}