diff --git a/src/PasswordReset.js b/src/PasswordReset.js index 0dd5802962..31339eb4e5 100644 --- a/src/PasswordReset.js +++ b/src/PasswordReset.js @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket 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. @@ -72,15 +73,21 @@ class PasswordReset { * with a "message" property which contains a human-readable message detailing why * the reset failed, e.g. "There is no mapped matrix user ID for the given email address". */ - checkEmailLinkClicked() { - return this.client.setPassword({ - type: "m.login.email.identity", - threepid_creds: { - sid: this.sessionId, - client_secret: this.clientSecret, - id_server: this.identityServerDomain, - }, - }, this.password).catch(function(err) { + async checkEmailLinkClicked() { + const creds = { + sid: this.sessionId, + client_secret: this.clientSecret, + }; + if (await this.doesServerRequireIdServerParam()) { + creds.id_server = this.identityServerDomain; + } + + try { + await this.client.setPassword({ + type: "m.login.email.identity", + threepid_creds: creds, + }, this.password); + } catch (err) { if (err.httpStatus === 401) { err.message = _t('Failed to verify email address: make sure you clicked the link in the email'); } else if (err.httpStatus === 404) { @@ -90,7 +97,7 @@ class PasswordReset { err.message += ` (Status ${err.httpStatus})`; } throw err; - }); + } } } diff --git a/src/components/structures/auth/ForgotPassword.js b/src/components/structures/auth/ForgotPassword.js index de1b964ff4..46a5fa7bd7 100644 --- a/src/components/structures/auth/ForgotPassword.js +++ b/src/components/structures/auth/ForgotPassword.js @@ -117,17 +117,18 @@ module.exports = createReactClass({ }); }, - onVerify: function(ev) { + onVerify: async function(ev) { ev.preventDefault(); if (!this.reset) { console.error("onVerify called before submitPasswordReset!"); return; } - this.reset.checkEmailLinkClicked().done((res) => { + try { + await this.reset.checkEmailLinkClicked(); this.setState({ phase: PHASE_DONE }); - }, (err) => { + } catch (err) { this.showErrorDialog(err.message); - }); + } }, onSubmitForm: async function(ev) {