1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-17 15:53:28 +00:00

Improve adfs sso page (#5874)

* replace url_prefix with org_id

* enable connect&disconnect saml2

* improve adfs/saml login page

* enable adfs/saml user set password

* connect/disconnect saml page

* improve org saml config page

* fix code

* compatibility old version

* add migrete_idp_certificates.py

* simplify org saml config API
This commit is contained in:
WJH
2024-01-12 12:06:28 +08:00
committed by GitHub
parent a830c8fb62
commit 1f44154c80
23 changed files with 724 additions and 537 deletions

View File

@@ -0,0 +1,78 @@
import React from 'react';
import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';
import { gettext, siteRoot } from '../../utils/constants';
import ModalPortal from '../modal-portal';
const {
csrfToken,
isOrgContext,
orgID,
samlConnected,
enableMultiADFS,
orgSamlConnected,
socialNextPage
} = window.app.pageOptions;
class SocialLoginSAML extends React.Component {
constructor(props) {
super(props);
this.form = React.createRef();
this.state = {
isConfirmDialogOpen: false
};
}
confirmDisconnect = () => {
this.setState({
isConfirmDialogOpen: true
});
};
disconnect = () => {
this.form.current.submit();
};
toggleDialog = () => {
this.setState({
isConfirmDialogOpen: !this.state.isConfirmDialogOpen
});
};
render() {
let connectUrl = (enableMultiADFS && isOrgContext) ? `${siteRoot}org/custom/${orgID}/saml2/connect/?next=${encodeURIComponent(socialNextPage)}` : `${siteRoot}saml2/connect/?next=${encodeURIComponent(socialNextPage)}`;
let disconnectUrl = (orgSamlConnected && isOrgContext) ? `${siteRoot}org/custom/${orgID}/saml2/disconnect/?next=${encodeURIComponent(socialNextPage)}` : `${siteRoot}saml2/disconnect/?next=${encodeURIComponent(socialNextPage)}`;
return (
<React.Fragment>
<div className="setting-item" id="social-auth">
<h3 className="setting-item-heading">{gettext('Social Login')}</h3>
<p className="mb-2">{'SAML'}</p>
{(samlConnected || (orgSamlConnected && isOrgContext)) ?
<button className="btn btn-outline-primary" onClick={this.confirmDisconnect}>{gettext('Disconnect')}</button> :
<a href={connectUrl} className="btn btn-outline-primary">{gettext('Connect')}</a>
}
</div>
{this.state.isConfirmDialogOpen && (
<ModalPortal>
<Modal centered={true} isOpen={true} toggle={this.toggleDialog}>
<ModalHeader toggle={this.toggleDialog}>{gettext('Disconnect')}</ModalHeader>
<ModalBody>
<p>{gettext('Are you sure you want to disconnect?')}</p>
<form ref={this.form} className="d-none" method="post" action={disconnectUrl}>
<input type="hidden" name="csrfmiddlewaretoken" value={csrfToken} />
</form>
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={this.toggleDialog}>{gettext('Cancel')}</Button>
<Button color="primary" onClick={this.disconnect}>{gettext('Disconnect')}</Button>
</ModalFooter>
</Modal>
</ModalPortal>
)}
</React.Fragment>
);
}
}
export default SocialLoginSAML;