summary refs log tree commit diff
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-08-14 16:03:04 +0100
committerKegan Dougal <kegan@matrix.org>2014-08-14 16:03:04 +0100
commitfb93e14e530d6dfddf22d77eb42be5758f2d50f5 (patch)
treea47f61c4000586458d65e72b1d2521b206d5ce53
parentFinish up room controller too. May have missed one or two, but testing didn't... (diff)
downloadsynapse-fb93e14e530d6dfddf22d77eb42be5758f2d50f5.tar.xz
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.
-rw-r--r--synapse/storage/registration.py4
-rw-r--r--webclient/login/login-controller.js20
2 files changed, 18 insertions, 6 deletions
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.";
                 }
             }
         );