import React from 'react'; import { pathUtils } from '@growi/core/dist/utils'; import { useTranslation } from 'next-i18next'; import PropTypes from 'prop-types'; import urljoin from 'url-join'; import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer'; import AdminOidcSecurityContainer from '~/client/services/AdminOidcSecurityContainer'; import { toastSuccess, toastError } from '~/client/util/toastr'; import { useSiteUrl } from '~/stores/context'; import { withUnstatedContainers } from '../../UnstatedUtils'; class OidcSecurityManagementContents extends React.Component { constructor(props) { super(props); this.onClickSubmit = this.onClickSubmit.bind(this); } async onClickSubmit() { const { t, adminOidcSecurityContainer, adminGeneralSecurityContainer } = this.props; try { await adminOidcSecurityContainer.updateOidcSetting(); await adminGeneralSecurityContainer.retrieveSetupStratedies(); toastSuccess(t('security_settings.OAuth.OIDC.updated_oidc')); } catch (err) { toastError(err); } } render() { const { t, adminGeneralSecurityContainer, adminOidcSecurityContainer, siteUrl, } = this.props; const { isOidcEnabled } = adminGeneralSecurityContainer.state; const oidcCallbackUrl = urljoin(pathUtils.removeTrailingSlash(siteUrl), '/passport/oidc/callback'); return ( <>

{t('security_settings.OAuth.OIDC.name')}

{ adminGeneralSecurityContainer.switchIsOidcEnabled() }} />
{(!adminGeneralSecurityContainer.state.setupStrategies.includes('oidc') && isOidcEnabled) &&
{t('security_settings.setup_is_not_yet_complete')}
}

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

{(siteUrl == null || siteUrl === '') && (
${t('headers.app_settings', { ns: 'commons' })}`, ns: 'commons' }) }} />
)}
{isOidcEnabled && ( <>

{t('security_settings.configuration')}

adminOidcSecurityContainer.changeOidcProviderName(e.target.value)} />
adminOidcSecurityContainer.changeOidcIssuerHost(e.target.value)} />

adminOidcSecurityContainer.changeOidcClientId(e.target.value)} />

adminOidcSecurityContainer.changeOidcClientSecret(e.target.value)} />

adminOidcSecurityContainer.changeOidcAuthorizationEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcTokenEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcRevocationEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcIntrospectionEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcUserInfoEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcEndSessionEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcRegistrationEndpoint(e.target.value)} />

adminOidcSecurityContainer.changeOidcJWKSUri(e.target.value)} />

Attribute Mapping ({t('security_settings.optional')})

adminOidcSecurityContainer.changeOidcAttrMapId(e.target.value)} />

adminOidcSecurityContainer.changeOidcAttrMapUserName(e.target.value)} />

adminOidcSecurityContainer.changeOidcAttrMapName(e.target.value)} />

adminOidcSecurityContainer.changeOidcAttrMapEmail(e.target.value)} />

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

{(siteUrl == null || siteUrl === '') && (
${t('headers.app_settings', { ns: 'commons' })}`, ns: 'commons' }) }} />
)}
{ adminOidcSecurityContainer.switchIsSameUsernameTreatedAsIdenticalUser() }} />

{ adminOidcSecurityContainer.switchIsSameEmailTreatedAsIdenticalUser() }} />

)}

{t('security_settings.OAuth.how_to.oidc')}

  1. {t('security_settings.OAuth.OIDC.register_1')}
  2. {t('security_settings.OAuth.OIDC.register_2')}
  3. {t('security_settings.OAuth.OIDC.register_3')}
); } } OidcSecurityManagementContents.propTypes = { t: PropTypes.func.isRequired, // i18next adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired, adminOidcSecurityContainer: PropTypes.instanceOf(AdminOidcSecurityContainer).isRequired, siteUrl: PropTypes.string, }; const OidcSecurityManagementContentsWrapperFC = (props) => { const { t } = useTranslation('admin'); const { data: siteUrl } = useSiteUrl(); return ; }; const OidcSecurityManagementContentsWrapper = withUnstatedContainers(OidcSecurityManagementContentsWrapperFC, [ AdminGeneralSecurityContainer, AdminOidcSecurityContainer, ]); export default OidcSecurityManagementContentsWrapper;