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')}
Attribute Mapping ({t('security_settings.optional')})
{t('security_settings.desc_of_callback_URL', { AuthName: 'OAuth' })}
{(siteUrl == null || siteUrl === '') && (
${t('headers.app_settings', { ns: 'commons' })}`, ns: 'commons' }) }}
/>
)}
>
)}
- {t('security_settings.OAuth.OIDC.register_1')}
- {t('security_settings.OAuth.OIDC.register_2')}
- {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;