From 8234b4d656c9afce2c3211bddfbbd8ea9d6a3318 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 3 Mar 2020 23:11:29 -0700 Subject: [PATCH] Wire up 'create account' to the SSO button when SSO is used For https://github.com/vector-im/riot-web/issues/12362 --- src/components/structures/auth/Login.js | 31 ++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js index 24e4726416..0e3792baf5 100644 --- a/src/components/structures/auth/Login.js +++ b/src/components/structures/auth/Login.js @@ -120,8 +120,8 @@ export default createReactClass({ 'm.login.password': this._renderPasswordStep, // CAS and SSO are the same thing, modulo the url we link to - 'm.login.cas': () => this._renderSsoStep(this._loginLogic.getSsoLoginUrl("cas")), - 'm.login.sso': () => this._renderSsoStep(this._loginLogic.getSsoLoginUrl("sso")), + 'm.login.cas': () => this._renderSsoStep(this._getSsoUrl('m.login.cas')), + 'm.login.sso': () => this._renderSsoStep(this._getSsoUrl('m.login.sso')), }; this._initLoginLogic(); @@ -150,6 +150,18 @@ export default createReactClass({ return this.state.busy || this.props.busy; }, + _isSsoStep: function() { + return this._getCurrentFlowStep() === 'm.login.sso' || this._getCurrentFlowStep() === 'm.login.cas'; + }, + + _getSsoUrl: function(kind) { + if (kind === 'm.login.cas') { + return this._loginLogic.getSsoLoginUrl("cas") + } else { + return this._loginLogic.getSsoLoginUrl("sso"); + } + }, + onPasswordLogin: async function(username, phoneCountry, phoneNumber, password) { if (!this.state.serverIsAlive) { this.setState({busy: true}); @@ -344,6 +356,19 @@ export default createReactClass({ this.props.onRegisterClick(); }, + onTryRegisterClick: function(ev) { + if (this._isSsoStep()) { + // If we're showing SSO it means that registration is also probably disabled, + // so intercept the click and instead pretend the user clicked 'Sign in with SSO'. + ev.preventDefault(); + ev.stopPropagation(); + window.location = this._getSsoUrl(this._getCurrentFlowStep()); + } else { + // Don't intercept - just go through to the register page + this.onRegisterClick(ev); + } + }, + async onServerDetailsNextPhaseClick() { this.setState({ phase: PHASE_LOGIN, @@ -654,7 +679,7 @@ export default createReactClass({ { serverDeadSection } { this.renderServerComponent() } { this.renderLoginComponentForStep() } - + { _t('Create account') }