diff --git a/synapse/storage/registration.py b/synapse/storage/registration.py
index 68cdfbb4ca..b1e4196435 100644
--- a/synapse/storage/registration.py
+++ b/synapse/storage/registration.py
@@ -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
diff --git a/webclient/login/login-controller.js b/webclient/login/login-controller.js
index 015868b0b9..53756be9ea 100644
--- a/webclient/login/login-controller.js
+++ b/webclient/login/login-controller.js
@@ -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.";
}
}
);
|