/* 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 { useSiteUrlWithEmptyValueWarn } from '~/states/global'; import { withUnstatedContainers } from '../../UnstatedUtils'; type Props = { adminGeneralSecurityContainer: AdminGeneralSecurityContainer; adminSamlSecurityContainer: AdminSamlSecurityContainer; }; const SamlSecurityManagementContents = (props: Props) => { const { adminGeneralSecurityContainer, adminSamlSecurityContainer, } = props; const { t } = useTranslation('admin'); const siteUrl = useSiteUrlWithEmptyValueWarn(); 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) => { try { await adminSamlSecurityContainer.updateSamlSetting({ samlEntryPoint: data.samlEntryPoint, samlIssuer: data.samlIssuer, samlCert: data.samlCert, samlAttrMapId: data.samlAttrMapId, samlAttrMapUsername: data.samlAttrMapUsername, samlAttrMapMail: data.samlAttrMapMail, samlAttrMapFirstName: data.samlAttrMapFirstName, samlAttrMapLastName: data.samlAttrMapLastName, isSameUsernameTreatedAsIdenticalUser: adminSamlSecurityContainer.state.isSameUsernameTreatedAsIdenticalUser, isSameEmailTreatedAsIdenticalUser: adminSamlSecurityContainer.state.isSameEmailTreatedAsIdenticalUser, samlABLCRule: data.samlABLCRule, }); 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(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')}