diff --git a/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js b/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js index a739d2fdd..ef62e79e8 100644 --- a/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js +++ b/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js @@ -25,55 +25,113 @@ */ angular.module('index').config(['$routeProvider', '$locationProvider', function indexRouteConfig($routeProvider, $locationProvider) { - + // Disable HTML5 mode (use # for routing) $locationProvider.html5Mode(false); - - $routeProvider - .when('/', { - title: 'APP.NAME', - bodyClassName: 'home', - templateUrl: 'app/home/templates/home.html', - controller: 'homeController' - }) - .when('/manage/', { - title: 'APP.NAME', - bodyClassName: 'manage', - templateUrl: 'app/manage/templates/manage.html', - controller: 'manageController' - }) - .when('/manage/connections/:id?', { - title: 'APP.NAME', - bodyClassName: 'manage', - templateUrl: 'app/manage/templates/manageConnection.html', - controller: 'manageConnectionController' - }) - .when('/manage/connectionGroups/:id?', { - title: 'APP.NAME', - bodyClassName: 'manage', - templateUrl: 'app/manage/templates/manageConnectionGroup.html', - controller: 'manageConnectionGroupController' - }) - .when('/manage/users/:id', { - title: 'APP.NAME', - bodyClassName: 'manage', - templateUrl: 'app/manage/templates/manageUser.html', - controller: 'manageUserController' - }) - .when('/login/', { - title: 'APP.NAME', - bodyClassName: 'login', - templateUrl: 'app/login/templates/login.html', - controller: 'loginController' - }) - .when('/client/:type/:id/:params?', { - bodyClassName: 'client', - templateUrl: 'app/client/templates/client.html', - controller: 'clientController' - }) - .otherwise({ - redirectTo: '/' + + /** + * Attempts to re-authenticate with the Guacamole server, sending any + * query parameters in the URL, along with the current auth token, and + * updating locally stored token if necessary. + * + * @param {Service} $injector + * The Angular $injector service. + * + * @returns {Promise} + * A promise which resolves successfully only after an attempt to + * re-authenticate has been made. + */ + var updateCurrentToken = ['$injector', function updateCurrentToken($injector) { + + // Required services + var $location = $injector.get('$location'); + var $q = $injector.get('$q'); + var authenticationService = $injector.get('authenticationService'); + + // Promise for authentication attempt + var authAttempt = $q.defer(); + + // Re-authenticate including any parameters in URL + authenticationService.updateCurrentToken($location.search()) + ['finally'](function authenticationAttemptComplete() { + authAttempt.resolve(); }); + + // Return promise that will resolve regardless of success/failure + return authAttempt.promise; + + }]; + + // Configure each possible route + $routeProvider + + // Home screen + .when('/', { + title : 'APP.NAME', + bodyClassName : 'home', + templateUrl : 'app/home/templates/home.html', + controller : 'homeController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // Management screen + .when('/manage/', { + title : 'APP.NAME', + bodyClassName : 'manage', + templateUrl : 'app/manage/templates/manage.html', + controller : 'manageController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // Connection editor + .when('/manage/connections/:id?', { + title : 'APP.NAME', + bodyClassName : 'manage', + templateUrl : 'app/manage/templates/manageConnection.html', + controller : 'manageConnectionController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // Connection group editor + .when('/manage/connectionGroups/:id?', { + title : 'APP.NAME', + bodyClassName : 'manage', + templateUrl : 'app/manage/templates/manageConnectionGroup.html', + controller : 'manageConnectionGroupController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // User editor + .when('/manage/users/:id', { + title : 'APP.NAME', + bodyClassName : 'manage', + templateUrl : 'app/manage/templates/manageUser.html', + controller : 'manageUserController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // Login screen + .when('/login/', { + title : 'APP.NAME', + bodyClassName : 'login', + templateUrl : 'app/login/templates/login.html', + controller : 'loginController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // Client view + .when('/client/:type/:id/:params?', { + bodyClassName : 'client', + templateUrl : 'app/client/templates/client.html', + controller : 'clientController', + resolve : { updateCurrentToken: updateCurrentToken } + }) + + // Redirect to home screen if page not found + .otherwise({ + redirectTo : '/' + }); + }]);