diff --git a/src/Login.js b/src/Login.js index 87731744e9..8db6e99b89 100644 --- a/src/Login.js +++ b/src/Login.js @@ -97,11 +97,6 @@ export default class Login { guest: true }; }, (error) => { - if (error.httpStatus === 403) { - error.friendlyText = _t("Guest access is disabled on this Home Server."); - } else { - error.friendlyText = _t("Failed to register as guest:") + ' ' + error.data; - } throw error; }); } @@ -157,15 +152,7 @@ export default class Login { accessToken: data.access_token }); }, function(error) { - if (error.httpStatus == 400 && loginParams.medium) { - error.friendlyText = ( - _t('This Home Server does not support login using email address.') - ); - } - else if (error.httpStatus === 403) { - error.friendlyText = ( - _t('Incorrect username and/or password.') - ); + if (error.httpStatus === 403) { if (self._fallbackHsUrl) { var fbClient = Matrix.createClient({ baseUrl: self._fallbackHsUrl, @@ -186,11 +173,6 @@ export default class Login { }); } } - else { - error.friendlyText = ( - _t("There was a problem logging in.") + ' (HTTP ' + error.httpStatus + ")" - ); - } throw error; }); } diff --git a/src/components/structures/login/Login.js b/src/components/structures/login/Login.js index 840f0874a7..27c0c200be 100644 --- a/src/components/structures/login/Login.js +++ b/src/components/structures/login/Login.js @@ -87,7 +87,27 @@ module.exports = React.createClass({ ).then((data) => { this.props.onLoggedIn(data); }, (error) => { - this._setStateFromError(error, true); + let errorText; + + // Some error strings only apply for logging in + const usingEmail = username.indexOf("@") > 0; + if (error.httpStatus == 400 && usingEmail) { + errorText = _t('This Home Server does not support login using email address.'); + } else if (error.httpStatus === 401 || error.httpStatus === 403) { + errorText = _t('Incorrect username and/or password.'); + } else { + // other errors, not specific to doing a password login + errorText = this._errorTextFromError(error); + } + + this.setState({ + errorText: errorText, + // 401 would be the sensible status code for 'incorrect password' + // but the login API gives a 403 https://matrix.org/jira/browse/SYN-744 + // mentions this (although the bug is for UI auth which is not this) + // We treat both as an incorrect password + loginIncorrect: error.httpStatus === 401 || error.httpStatus == 403, + }); }).finally(() => { this.setState({ busy: false @@ -110,7 +130,16 @@ module.exports = React.createClass({ this._loginLogic.loginAsGuest().then(function(data) { self.props.onLoggedIn(data); }, function(error) { - self._setStateFromError(error, true); + let errorText; + if (error.httpStatus === 403) { + errorText = _t("Guest access is disabled on this Home Server."); + } else { + errorText = self._errorTextFromError(error); + } + self.setState({ + errorText: errorText, + loginIncorrect: false, + }); }).finally(function() { self.setState({ busy: false @@ -183,31 +212,22 @@ module.exports = React.createClass({ currentFlow: self._getCurrentFlowStep(), }); }, function(err) { - self._setStateFromError(err, false); + self.setState({ + errorText: self._errorTextFromError(err), + loginIncorrect: false, + }); }).finally(function() { self.setState({ busy: false, }); - }); + }).done(); }, _getCurrentFlowStep: function() { return this._loginLogic ? this._loginLogic.getCurrentFlowStep() : null; }, - _setStateFromError: function(err, isLoginAttempt) { - this.setState({ - errorText: this._errorTextFromError(err), - // https://matrix.org/jira/browse/SYN-744 - loginIncorrect: isLoginAttempt && (err.httpStatus == 401 || err.httpStatus == 403) - }); - }, - _errorTextFromError(err) { - if (err.friendlyText) { - return err.friendlyText; - } - let errCode = err.errcode; if (!errCode && err.httpStatus) { errCode = "HTTP " + err.httpStatus; @@ -219,8 +239,8 @@ module.exports = React.createClass({ if (err.cors === 'rejected') { if (window.location.protocol === 'https:' && (this.state.enteredHomeserverUrl.startsWith("http:") || - !this.state.enteredHomeserverUrl.startsWith("http"))) - { + !this.state.enteredHomeserverUrl.startsWith("http")) + ) { errorText = { _tJsx("Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. " + "Either use HTTPS or enable unsafe scripts.", @@ -228,10 +248,9 @@ module.exports = React.createClass({ (sub) => { return { sub }; } )} ; - } - else { + } else { errorText = - { _tJsx("Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.", + { _tJsx("Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", /(.*?)<\/a>/, (sub) => { return { sub }; } )} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 3540feddee..c7c6cd6ef3 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -184,7 +184,7 @@ "Bug Report": "Bug Report", "Bulk Options": "Bulk Options", "Call Timeout": "Call Timeout", - "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.", + "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.", "Can't load user settings": "Can't load user settings", "Change Password": "Change Password",