GUAC-1126: Re-route user within route config.

This commit is contained in:
Michael Jumper
2015-04-06 17:02:04 -07:00
parent ca8379d938
commit 8ead3a9d81
3 changed files with 54 additions and 11 deletions

View File

@@ -32,7 +32,6 @@ angular.module('home').controller('homeController', ['$scope', '$injector',
// Get required services
var authenticationService = $injector.get("authenticationService");
var connectionGroupService = $injector.get("connectionGroupService");
var userPageService = $injector.get("userPageService");
/**
* The root connection group, or null if the connection group hierarchy has
@@ -61,10 +60,4 @@ angular.module('home').controller('homeController', ['$scope', '$injector',
$scope.rootConnectionGroup = rootConnectionGroup;
});
// Navigate to home page, if not already there
userPageService.getHomePage()
.then(function homePageRetrieved(homePage) {
$location.url(homePage.url);
});
}]);

View File

@@ -62,6 +62,57 @@ angular.module('index').config(['$routeProvider', '$locationProvider',
}];
/**
* Redirects the user to their home page. This necessarily requires
* attempting to re-authenticate with the Guacamole server, as the user's
* credentials may have changed, and thus their most-appropriate home page
* may have changed as well.
*
* @param {Service} $injector
* The Angular $injector service.
*
* @returns {Promise}
* A promise which resolves successfully only after an attempt to
* re-authenticate and determine the user's proper home page has been
* made.
*/
var routeToUserHomePage = ['$injector', function routeToUserHomePage($injector) {
// Required services
var $location = $injector.get('$location');
var $q = $injector.get('$q');
var userPageService = $injector.get('userPageService');
// Promise for redirection attempt
var redirect = $q.defer();
// Re-authenticate including any parameters in URL
$injector.invoke(updateCurrentToken)
.then(function tokenUpdateComplete() {
// Redirect to home page
userPageService.getHomePage()
.then(function homePageRetrieved(homePage) {
$location.url(homePage.url);
})
// If retrieval of home page fails, assume '/'
['catch'](function homePageFailed() {
$location.url('/');
})
// Resolve promise in either case
['finally'](function retrievalAttemptComplete() {
redirect.resolve();
});
});
// Return promise that will resolve regardless of success/failure
return redirect.promise;
}];
// Configure each possible route
$routeProvider
@@ -71,7 +122,7 @@ angular.module('index').config(['$routeProvider', '$locationProvider',
bodyClassName : 'home',
templateUrl : 'app/home/templates/home.html',
controller : 'homeController',
resolve : { updateCurrentToken: updateCurrentToken }
resolve : { routeToUserHomePage: routeToUserHomePage }
})
// Connection management screen
@@ -147,9 +198,7 @@ angular.module('index').config(['$routeProvider', '$locationProvider',
// Redirect to home screen if page not found
.otherwise({
redirectTo : '/'
resolve : { routeToUserHomePage: routeToUserHomePage }
});
}]);

View File

@@ -29,6 +29,7 @@ angular.module('index', [
'home',
'login',
'manage',
'navigation',
'ngRoute',
'ngTouch',
'notification',