summary refs log tree commit diff
path: root/webclient
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-08-14 15:36:40 +0100
committerKegan Dougal <kegan@matrix.org>2014-08-14 15:36:40 +0100
commitdb3e1d73c6a81bda3b2624596ea9b3f113242d38 (patch)
tree7c91027f8ffdee353ef4765107f89b07864325ca /webclient
parentAdded an access token interceptor to check unknown tokens. (diff)
downloadsynapse-db3e1d73c6a81bda3b2624596ea9b3f113242d38.tar.xz
Move the unknown token broadcast to the interceptor. Return the $http promise and not a wrapped one via $q. Everything now needs a level deeper nesting. Fixed registration and login.
Diffstat (limited to 'webclient')
-rw-r--r--webclient/app.js10
-rw-r--r--webclient/components/matrix/matrix-service.js21
-rw-r--r--webclient/login/login-controller.js14
-rw-r--r--webclient/login/login.html1
4 files changed, 16 insertions, 30 deletions
diff --git a/webclient/app.js b/webclient/app.js
index f869309449..0b613fa206 100644
--- a/webclient/app.js
+++ b/webclient/app.js
@@ -42,20 +42,20 @@ matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
                 redirectTo: '/rooms'
             });
             
-        $provide.factory('AccessTokenInterceptor', function ($q) {
+        $provide.factory('AccessTokenInterceptor', ['$q', '$rootScope', 
+            function ($q, $rootScope) {
             return {
                 responseError: function(rejection) {
-                    console.log("Rejection: " + JSON.stringify(rejection));
                     if (rejection.status === 403 && "data" in rejection && 
                             "errcode" in rejection.data && 
                             rejection.data.errcode === "M_UNKNOWN_TOKEN") {
-                        console.log("TODO: Got a 403 with an unknown token. Logging out.")
-                        // TODO logout
+                        console.log("Got a 403 with an unknown token. Logging out.")
+                        $rootScope.$broadcast("M_UNKNOWN_TOKEN");
                     }
                     return $q.reject(rejection);
                 }
             };
-        });
+        }]);
         $httpProvider.interceptors.push('AccessTokenInterceptor');
     }]);
 
diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js
index 81ccdc2cc0..132c996f7a 100644
--- a/webclient/components/matrix/matrix-service.js
+++ b/webclient/components/matrix/matrix-service.js
@@ -49,32 +49,13 @@ angular.module('matrixService', [])
         if (path.indexOf(prefixPath) !== 0) {
             path = prefixPath + path;
         }
-        // Do not directly return the $http instance but return a promise
-        // with enriched or cleaned information
-        var deferred = $q.defer();
-        $http({
+        return $http({
             method: method,
             url: baseUrl + path,
             params: params,
             data: data,
             headers: headers
         })
-        .success(function(data, status, headers, config) {
-            deferred.resolve(data, status, headers, config);
-        })
-        .error(function(data, status, headers, config) {
-            // Enrich the error callback with an human readable error reason
-            var reason = data.error;
-            if (!data.error) {
-                reason = JSON.stringify(data);
-            }
-            deferred.reject(reason, data, status, headers, config);
-
-            if (403 === status && "M_UNKNOWN_TOKEN" === data.errcode) {
-                // The access token is no more valid, broadcast the issue
-                $rootScope.$broadcast("M_UNKNOWN_TOKEN");
-            }
-        });
 
         return deferred.promise;
     };
diff --git a/webclient/login/login-controller.js b/webclient/login/login-controller.js
index fa91bf4253..c519f7698c 100644
--- a/webclient/login/login-controller.js
+++ b/webclient/login/login-controller.js
@@ -39,14 +39,13 @@ angular.module('LoginController', ['matrixService'])
         }
 
         matrixService.register($scope.account.desired_user_name, $scope.account.pwd1).then(
-            function(data) {
+            function(response) {
                 $scope.feedback = "Success";
-
                 // Update the current config 
                 var config = matrixService.config();
                 angular.extend(config, {
-                    access_token: data.access_token,
-                    user_id: data.user_id
+                    access_token: response.data.access_token,
+                    user_id: response.data.user_id
                 });
                 matrixService.setConfig(config);
 
@@ -74,7 +73,7 @@ angular.module('LoginController', ['matrixService'])
                     matrixService.setConfig({
                         homeserver: $scope.account.homeserver,
                         user_id: $scope.account.user_id,
-                        access_token: response.access_token
+                        access_token: response.data.access_token
                     });
                     matrixService.saveConfig();
                     $location.path("rooms");
@@ -82,6 +81,11 @@ angular.module('LoginController', ['matrixService'])
                 else {
                     $scope.feedback = "Failed to login: " + JSON.stringify(response);
                 }
+            },
+            function(error) {
+                if (error.data.errcode === "M_FORBIDDEN") {
+                    $scope.login_error_msg = "Incorrect username or password.";
+                }
             }
         );
     };
diff --git a/webclient/login/login.html b/webclient/login/login.html
index 508ff5e4bf..f02dde89a6 100644
--- a/webclient/login/login.html
+++ b/webclient/login/login.html
@@ -22,6 +22,7 @@
     <h3>Got an account?</h3>
     <form novalidate>
         <!-- Login with an registered user -->
+        <div>{{ login_error_msg }} </div>
         <div>
             <input id="user_id" size="70" type="text" auto-focus ng-model="account.user_id" placeholder="User ID (ex:@bob:localhost)"/>
             <br />