mirror of https://github.com/vector-im/riot-web
Redirect registration requests to Login when the server supports SSO
For https://github.com/vector-im/riot-web/issues/12362pull/21833/head
parent
bcfe1fcac5
commit
e265c92b6e
|
@ -31,6 +31,8 @@ import classNames from "classnames";
|
||||||
import * as Lifecycle from '../../../Lifecycle';
|
import * as Lifecycle from '../../../Lifecycle';
|
||||||
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||||
import AuthPage from "../../views/auth/AuthPage";
|
import AuthPage from "../../views/auth/AuthPage";
|
||||||
|
import Login from "../../../Login";
|
||||||
|
import dis from "../../../dispatcher";
|
||||||
|
|
||||||
// Phases
|
// Phases
|
||||||
// Show controls to configure server details
|
// Show controls to configure server details
|
||||||
|
@ -232,6 +234,13 @@ export default createReactClass({
|
||||||
serverRequiresIdServer,
|
serverRequiresIdServer,
|
||||||
busy: false,
|
busy: false,
|
||||||
});
|
});
|
||||||
|
const showGenericError = (e) => {
|
||||||
|
this.setState({
|
||||||
|
errorText: _t("Unable to query for supported registration methods."),
|
||||||
|
// add empty flows array to get rid of spinner
|
||||||
|
flows: [],
|
||||||
|
});
|
||||||
|
};
|
||||||
try {
|
try {
|
||||||
await this._makeRegisterRequest({});
|
await this._makeRegisterRequest({});
|
||||||
// This should never succeed since we specified an empty
|
// This should never succeed since we specified an empty
|
||||||
|
@ -243,18 +252,32 @@ export default createReactClass({
|
||||||
flows: e.data.flows,
|
flows: e.data.flows,
|
||||||
});
|
});
|
||||||
} else if (e.httpStatus === 403 && e.errcode === "M_UNKNOWN") {
|
} else if (e.httpStatus === 403 && e.errcode === "M_UNKNOWN") {
|
||||||
|
// At this point registration is pretty much disabled, but before we do that let's
|
||||||
|
// quickly check to see if the server supports SSO instead. If it does, we'll send
|
||||||
|
// the user off to the login page to figure their account out.
|
||||||
|
try {
|
||||||
|
const loginLogic = new Login(hsUrl, isUrl, null, {
|
||||||
|
defaultDeviceDisplayName: "riot login check", // We shouldn't ever be used
|
||||||
|
});
|
||||||
|
const flows = await loginLogic.getFlows();
|
||||||
|
const hasSsoFlow = flows.find(f => f.type === 'm.login.sso' || f.type === 'm.login.cas');
|
||||||
|
if (hasSsoFlow) {
|
||||||
|
// Redirect to login page - server probably expects SSO only
|
||||||
|
dis.dispatch({action: 'start_login'});
|
||||||
|
} else {
|
||||||
this.setState({
|
this.setState({
|
||||||
errorText: _t("Registration has been disabled on this homeserver."),
|
errorText: _t("Registration has been disabled on this homeserver."),
|
||||||
// add empty flows array to get rid of spinner
|
// add empty flows array to get rid of spinner
|
||||||
flows: [],
|
flows: [],
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to get login flows to check for SSO support", e);
|
||||||
|
showGenericError(e);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log("Unable to query for supported registration methods.", e);
|
console.log("Unable to query for supported registration methods.", e);
|
||||||
this.setState({
|
showGenericError(e);
|
||||||
errorText: _t("Unable to query for supported registration methods."),
|
|
||||||
// add empty flows array to get rid of spinner
|
|
||||||
flows: [],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue