diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index 1c094cf862..63c5b267cf 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -98,6 +98,9 @@ module.exports = React.createClass({ // component without it. matrixClient: null, + // whether the HS requires an ID server to register with a threepid + serverRequiresIdServer: null, + // The user ID we've just registered registeredUsername: null, @@ -204,13 +207,23 @@ module.exports = React.createClass({ } const {hsUrl, isUrl} = serverConfig; - this.setState({ - matrixClient: Matrix.createClient({ - baseUrl: hsUrl, - idBaseUrl: isUrl, - }), + const cli = Matrix.createClient({ + baseUrl: hsUrl, + idBaseUrl: isUrl, + }); + + let serverRequiresIdServer = true; + try { + serverRequiresIdServer = await cli.doesServerRequireIdServerParam(); + } catch (e) { + console.log("Unable to determine is server needs id_server param", e); + } + + this.setState({ + matrixClient: cli, + serverRequiresIdServer, + busy: false, }); - this.setState({busy: false}); try { await this._makeRegisterRequest({}); // This should never succeed since we specified an empty @@ -550,6 +563,7 @@ module.exports = React.createClass({ flows={this.state.flows} serverConfig={this.props.serverConfig} canSubmit={!this.state.serverErrorIsFatal} + serverRequiresIdServer={this.state.serverRequiresIdServer} />; } }, diff --git a/src/components/views/auth/RegistrationForm.js b/src/components/views/auth/RegistrationForm.js index f3b9640e16..cf1b074fe1 100644 --- a/src/components/views/auth/RegistrationForm.js +++ b/src/components/views/auth/RegistrationForm.js @@ -55,6 +55,7 @@ module.exports = React.createClass({ flows: PropTypes.arrayOf(PropTypes.object).isRequired, serverConfig: PropTypes.instanceOf(ValidatedServerConfig).isRequired, canSubmit: PropTypes.bool, + serverRequiresIdServer: PropTypes.bool, }, getDefaultProps: function() { @@ -437,7 +438,7 @@ module.exports = React.createClass({ _showEmail() { const haveIs = Boolean(this.props.serverConfig.isUrl); - if (!haveIs || !this._authStepIsUsed('m.login.email.identity')) { + if ((this.props.serverRequiresIdServer && !haveIs) || !this._authStepIsUsed('m.login.email.identity')) { return false; } return true; diff --git a/test/components/structures/auth/Registration-test.js b/test/components/structures/auth/Registration-test.js index 6a8b35fbc0..38188b2536 100644 --- a/test/components/structures/auth/Registration-test.js +++ b/test/components/structures/auth/Registration-test.js @@ -69,7 +69,7 @@ describe('Registration', function() { const root = render(); - // Set non-empty flow & matrixClient to get past the loading spinner + // Set non-empty flows & matrixClient to get past the loading spinner root.setState({ flows: [], matrixClient: {},