Be more helpful when failing to register/login, stating why (communication error, user in user, wrong credentials, etc). Make the HS send M_USER_IN_USE.

This commit is contained in:
Kegan Dougal 2014-08-14 16:03:04 +01:00
parent 40c998336d
commit fb93e14e53
2 changed files with 18 additions and 6 deletions

View file

@ -17,7 +17,7 @@ from twisted.internet import defer
from sqlite3 import IntegrityError
from synapse.api.errors import StoreError
from synapse.api.errors import StoreError, Codes
from ._base import SQLBaseStore
@ -73,7 +73,7 @@ class RegistrationStore(SQLBaseStore):
"VALUES (?,?,?)",
[user_id, password_hash, now])
except IntegrityError:
raise StoreError(400, "User ID already taken.")
raise StoreError(400, "User ID already taken.", errcode=Codes.USER_IN_USE)
# it's possible for this to get a conflict, but only for a single user
# since tokens are namespaced based on their user ID

View file

@ -55,8 +55,15 @@ angular.module('LoginController', ['matrixService'])
// Go to the user's rooms list page
$location.path("rooms");
},
function(reason) {
$scope.feedback = "Failure: " + reason;
function(error) {
if (error.data) {
if (error.data.errcode === "M_USER_IN_USE") {
$scope.feedback = "Username already taken.";
}
}
else if (error.status === 0) {
$scope.feedback = "Unable to talk to the server.";
}
});
};
@ -83,8 +90,13 @@ angular.module('LoginController', ['matrixService'])
}
},
function(error) {
if (error.data.errcode === "M_FORBIDDEN") {
$scope.login_error_msg = "Incorrect username or password.";
if (error.data) {
if (error.data.errcode === "M_FORBIDDEN") {
$scope.login_error_msg = "Incorrect username or password.";
}
}
else if (error.status === 0) {
$scope.login_error_msg = "Unable to talk to the server.";
}
}
);