Move all login error string generation into view

This makes all the various hits done by login report the same
useful error messages and gets rid of the broken ones like printing
the http status code even if it was undefined. Also add text for
the case of overzealous browser extensions because lots of people
get bitten by it.
This commit is contained in:
David Baker 2017-06-08 15:49:48 +01:00
parent 6d1fa775a0
commit d691c891e7
3 changed files with 36 additions and 35 deletions

View File

@ -97,11 +97,6 @@ export default class Login {
guest: true guest: true
}; };
}, (error) => { }, (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; throw error;
}); });
} }
@ -157,14 +152,7 @@ export default class Login {
accessToken: data.access_token accessToken: data.access_token
}); });
}, function(error) { }, function(error) {
if (error.httpStatus == 400 && loginParams.medium) { if (error.httpStatus === 403) {
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 (self._fallbackHsUrl) { if (self._fallbackHsUrl) {
var fbClient = Matrix.createClient({ var fbClient = Matrix.createClient({
baseUrl: self._fallbackHsUrl, baseUrl: self._fallbackHsUrl,
@ -184,10 +172,6 @@ export default class Login {
throw error; throw error;
}); });
} }
} else {
error.friendlyText = (
_t("There was a problem logging in.") + ' (HTTP ' + error.httpStatus + ")"
);
} }
throw error; throw error;
}); });

View File

@ -87,7 +87,24 @@ module.exports = React.createClass({
).then((data) => { ).then((data) => {
this.props.onLoggedIn(data); this.props.onLoggedIn(data);
}, (error) => { }, (error) => {
this._setStateFromError(error, true); let errorText;
// Some error strings only apply for logging in
const usingEmail = username.indexOf("@");
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,
// https://matrix.org/jira/browse/SYN-744
loginIncorrect: error.httpStatus == 401 || error.httpStatus == 403
});
}).finally(() => { }).finally(() => {
this.setState({ this.setState({
busy: false busy: false
@ -110,7 +127,16 @@ module.exports = React.createClass({
this._loginLogic.loginAsGuest().then(function(data) { this._loginLogic.loginAsGuest().then(function(data) {
self.props.onLoggedIn(data); self.props.onLoggedIn(data);
}, function(error) { }, 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() { }).finally(function() {
self.setState({ self.setState({
busy: false busy: false
@ -183,31 +209,22 @@ module.exports = React.createClass({
currentFlow: self._getCurrentFlowStep(), currentFlow: self._getCurrentFlowStep(),
}); });
}, function(err) { }, function(err) {
self._setStateFromError(err, false); self.setState({
errorText: self._errorTextFromError(err),
loginIncorrect: false,
});
}).finally(function() { }).finally(function() {
self.setState({ self.setState({
busy: false, busy: false,
}); });
}); }).done();
}, },
_getCurrentFlowStep: function() { _getCurrentFlowStep: function() {
return this._loginLogic ? this._loginLogic.getCurrentFlowStep() : null; 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) { _errorTextFromError(err) {
if (err.friendlyText) {
return err.friendlyText;
}
let errCode = err.errcode; let errCode = err.errcode;
if (!errCode && err.httpStatus) { if (!errCode && err.httpStatus) {
errCode = "HTTP " + err.httpStatus; errCode = "HTTP " + err.httpStatus;
@ -230,7 +247,7 @@ module.exports = React.createClass({
</span>; </span>;
} else { } else {
errorText = <span> errorText = <span>
{ _tJsx("Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted.", { _tJsx("Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted and that a browser extension is not blocking requests.",
/<a>(.*?)<\/a>/, /<a>(.*?)<\/a>/,
(sub) => { return <a href={this.state.enteredHomeserverUrl}>{ sub }</a>; } (sub) => { return <a href={this.state.enteredHomeserverUrl}>{ sub }</a>; }
)} )}

View File

@ -180,7 +180,7 @@
"Bug Report": "Bug Report", "Bug Report": "Bug Report",
"Bulk Options": "Bulk Options", "Bulk Options": "Bulk Options",
"Call Timeout": "Call Timeout", "Call Timeout": "Call Timeout",
"Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted.": "Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted.", "Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> 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 <a>enable unsafe scripts</a>.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.",
"Can't load user settings": "Can't load user settings", "Can't load user settings": "Can't load user settings",
"Change Password": "Change Password", "Change Password": "Change Password",