diff --git a/src/components/structures/InteractiveAuth.js b/src/components/structures/InteractiveAuth.js index 89ff4d43a3..c893057022 100644 --- a/src/components/structures/InteractiveAuth.js +++ b/src/components/structures/InteractiveAuth.js @@ -1,5 +1,6 @@ /* Copyright 2017 Vector Creations Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -60,7 +61,7 @@ export default React.createClass({ inputs: PropTypes.object, // As js-sdk interactive-auth - makeRegistrationUrl: PropTypes.func, + requestEmailToken: PropTypes.func, sessionId: PropTypes.string, clientSecret: PropTypes.string, emailSid: PropTypes.string, @@ -96,6 +97,7 @@ export default React.createClass({ sessionId: this.props.sessionId, clientSecret: this.props.clientSecret, emailSid: this.props.emailSid, + requestEmailToken: this.props.requestEmailToken, }); this._authLogic.attemptAuth().then((result) => { @@ -202,7 +204,6 @@ export default React.createClass({ stageState={this.state.stageState} fail={this._onAuthStageFailed} setEmailSid={this._setEmailSid} - makeRegistrationUrl={this.props.makeRegistrationUrl} showContinue={!this.props.continueIsManaged} /> ); diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index 708118bb22..04ae90c394 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -2,6 +2,7 @@ Copyright 2015, 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd Copyright 2018, 2019 New Vector Ltd +Copyright 2019 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -203,6 +204,20 @@ module.exports = React.createClass({ }); }, + _requestEmailToken: function(emailAddress, clientSecret, sendAttempt, sessionId) { + return this._matrixClient.requestRegisterEmailToken( + emailAddress, + clientSecret, + sendAttempt, + this.props.makeRegistrationUrl({ + client_secret: clientSecret, + hs_url: this._matrixClient.getHomeserverUrl(), + is_url: this._matrixClient.getIdentityServerUrl(), + session_id: sessionId, + }), + ); + }, + _onUIAuthFinished: async function(success, response, extra) { if (!success) { let msg = response.message || response.toString(); @@ -424,7 +439,7 @@ module.exports = React.createClass({ makeRequest={this._makeRegisterRequest} onAuthFinished={this._onUIAuthFinished} inputs={this._getUIAuthInputs()} - makeRegistrationUrl={this.props.makeRegistrationUrl} + requestEmailToken={this._requestEmailToken} sessionId={this.props.sessionId} clientSecret={this.props.clientSecret} emailSid={this.props.idSid} diff --git a/src/components/views/auth/InteractiveAuthEntryComponents.js b/src/components/views/auth/InteractiveAuthEntryComponents.js index 4851222e49..b3687db2bd 100644 --- a/src/components/views/auth/InteractiveAuthEntryComponents.js +++ b/src/components/views/auth/InteractiveAuthEntryComponents.js @@ -1,6 +1,7 @@ /* Copyright 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd +Copyright 2019 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -57,7 +58,6 @@ import SettingsStore from "../../../settings/SettingsStore"; * session to be failed and the process to go back to the start. * setEmailSid: m.login.email.identity only: a function to be called with the * email sid after a token is requested. - * makeRegistrationUrl A function that makes a registration URL * * Each component may also provide the following functions (beyond the standard React ones): * focus: set the input focus appropriately in the form. @@ -365,7 +365,6 @@ export const EmailIdentityAuthEntry = React.createClass({ stageState: PropTypes.object.isRequired, fail: PropTypes.func.isRequired, setEmailSid: PropTypes.func.isRequired, - makeRegistrationUrl: PropTypes.func.isRequired, }, getInitialState: function() { @@ -374,38 +373,6 @@ export const EmailIdentityAuthEntry = React.createClass({ }; }, - componentWillMount: function() { - if (this.props.stageState.emailSid === null) { - this.setState({requestingToken: true}); - this._requestEmailToken().catch((e) => { - this.props.fail(e); - }).finally(() => { - this.setState({requestingToken: false}); - }).done(); - } - }, - - /* - * Requests a verification token by email. - */ - _requestEmailToken: function() { - const nextLink = this.props.makeRegistrationUrl({ - client_secret: this.props.clientSecret, - hs_url: this.props.matrixClient.getHomeserverUrl(), - is_url: this.props.matrixClient.getIdentityServerUrl(), - session_id: this.props.authSessionId, - }); - - return this.props.matrixClient.requestRegisterEmailToken( - this.props.inputs.emailAddress, - this.props.clientSecret, - 1, // TODO: Multiple send attempts? - nextLink, - ).then((result) => { - this.props.setEmailSid(result.sid); - }); - }, - render: function() { if (this.state.requestingToken) { const Loader = sdk.getComponent("elements.Spinner");