mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 21:51:23 +00:00
GUAC-1126: Maintain session-local data through login/logout events broadcast from the authentication service.
This commit is contained in:
@@ -23,4 +23,4 @@
|
|||||||
/**
|
/**
|
||||||
* The module for authentication and management of tokens.
|
* The module for authentication and management of tokens.
|
||||||
*/
|
*/
|
||||||
angular.module('auth', ['ngCookies', 'rest']);
|
angular.module('auth', ['ngCookies']);
|
||||||
|
@@ -22,6 +22,16 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A service for authenticating a user against the REST API.
|
* A service for authenticating a user against the REST API.
|
||||||
|
*
|
||||||
|
* This service broadcasts two events on $rootScope depending on the result of
|
||||||
|
* authentication operations: 'guacLogin' if authentication was successful and
|
||||||
|
* a new token was created, and 'guacLogout' if an existing token is being
|
||||||
|
* destroyed or replaced. Both events will be passed the related token as their
|
||||||
|
* sole parameter.
|
||||||
|
*
|
||||||
|
* If a login attempt results in an existing token being replaced, 'guacLogout'
|
||||||
|
* will be broadcast first for the token being replaced, followed by
|
||||||
|
* 'guacLogin' for the new token.
|
||||||
*/
|
*/
|
||||||
angular.module('auth').factory('authenticationService', ['$injector',
|
angular.module('auth').factory('authenticationService', ['$injector',
|
||||||
function authenticationService($injector) {
|
function authenticationService($injector) {
|
||||||
@@ -30,7 +40,7 @@ angular.module('auth').factory('authenticationService', ['$injector',
|
|||||||
var $cookieStore = $injector.get('$cookieStore');
|
var $cookieStore = $injector.get('$cookieStore');
|
||||||
var $http = $injector.get('$http');
|
var $http = $injector.get('$http');
|
||||||
var $q = $injector.get('$q');
|
var $q = $injector.get('$q');
|
||||||
var cacheService = $injector.get('cacheService');
|
var $rootScope = $injector.get('$rootScope');
|
||||||
|
|
||||||
var service = {};
|
var service = {};
|
||||||
|
|
||||||
@@ -102,12 +112,25 @@ angular.module('auth').factory('authenticationService', ['$injector',
|
|||||||
|
|
||||||
var currentToken = service.getCurrentToken();
|
var currentToken = service.getCurrentToken();
|
||||||
|
|
||||||
// If a new token was received, ensure the old token is invalidated
|
// If a new token was received, ensure the old token is invalidated,
|
||||||
if (currentToken && data.authToken !== currentToken) {
|
// if any, and notify listeners of the new token
|
||||||
service.logout()
|
if (data.authToken !== currentToken) {
|
||||||
['finally'](function logoutComplete() {
|
|
||||||
|
// If an old token existed, explicitly logout first
|
||||||
|
if (currentToken) {
|
||||||
|
service.logout()
|
||||||
|
['finally'](function logoutComplete() {
|
||||||
|
completeAuthentication(data);
|
||||||
|
$rootScope.$broadcast('guacLogin', data.authToken);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, simply complete authentication and notify of login
|
||||||
|
else {
|
||||||
completeAuthentication(data);
|
completeAuthentication(data);
|
||||||
});
|
$rootScope.$broadcast('guacLogin', data.authToken);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, just finish the auth process
|
// Otherwise, just finish the auth process
|
||||||
@@ -195,13 +218,13 @@ angular.module('auth').factory('authenticationService', ['$injector',
|
|||||||
*/
|
*/
|
||||||
service.logout = function logout() {
|
service.logout = function logout() {
|
||||||
|
|
||||||
// Clear all caches
|
|
||||||
cacheService.clearCaches();
|
|
||||||
|
|
||||||
// Clear authentication data
|
// Clear authentication data
|
||||||
var token = service.getCurrentToken();
|
var token = service.getCurrentToken();
|
||||||
$cookieStore.remove(AUTH_COOKIE_ID);
|
$cookieStore.remove(AUTH_COOKIE_ID);
|
||||||
|
|
||||||
|
// Notify listeners that a token is being destroyed
|
||||||
|
$rootScope.$broadcast('guacLogout', token);
|
||||||
|
|
||||||
// Delete old token
|
// Delete old token
|
||||||
return $http({
|
return $http({
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
@@ -249,6 +272,6 @@ angular.module('auth').factory('authenticationService', ['$injector',
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return service;
|
return service;
|
||||||
}]);
|
}]);
|
||||||
|
@@ -30,7 +30,8 @@ angular.module('client').factory('guacClientManager', ['$injector',
|
|||||||
var ManagedClient = $injector.get('ManagedClient');
|
var ManagedClient = $injector.get('ManagedClient');
|
||||||
|
|
||||||
// Required services
|
// Required services
|
||||||
var $window = $injector.get('$window');
|
var $window = $injector.get('$window');
|
||||||
|
var $rootScope = $injector.get('$rootScope');
|
||||||
|
|
||||||
var service = {};
|
var service = {};
|
||||||
|
|
||||||
@@ -144,6 +145,11 @@ angular.module('client').factory('guacClientManager', ['$injector',
|
|||||||
// Disconnect all clients when window is unloaded
|
// Disconnect all clients when window is unloaded
|
||||||
$window.addEventListener('unload', service.clear);
|
$window.addEventListener('unload', service.clear);
|
||||||
|
|
||||||
|
// Clear clients on logout
|
||||||
|
$rootScope.$on('guacLogout', function handleLogout() {
|
||||||
|
service.clear();
|
||||||
|
});
|
||||||
|
|
||||||
return service;
|
return service;
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
@@ -26,7 +26,6 @@ angular.module('login').controller('loginController', ['$scope', '$injector',
|
|||||||
// Required services
|
// Required services
|
||||||
var $location = $injector.get('$location');
|
var $location = $injector.get('$location');
|
||||||
var authenticationService = $injector.get('authenticationService');
|
var authenticationService = $injector.get('authenticationService');
|
||||||
var guacClientManager = $injector.get('guacClientManager');
|
|
||||||
var userPageService = $injector.get('userPageService');
|
var userPageService = $injector.get('userPageService');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,16 +53,10 @@ angular.module('login').controller('loginController', ['$scope', '$injector',
|
|||||||
|
|
||||||
// Redirect to main view upon success
|
// Redirect to main view upon success
|
||||||
.then(function loginSuccessful() {
|
.then(function loginSuccessful() {
|
||||||
|
|
||||||
// Provide user with clean environment
|
|
||||||
guacClientManager.clear();
|
|
||||||
|
|
||||||
// Redirect to main view
|
|
||||||
userPageService.getHomePage()
|
userPageService.getHomePage()
|
||||||
.then(function homePageRetrieved(homePage) {
|
.then(function homePageRetrieved(homePage) {
|
||||||
$location.url(homePage.url);
|
$location.url(homePage.url);
|
||||||
});
|
});
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// Reset and focus password upon failure
|
// Reset and focus password upon failure
|
||||||
|
@@ -23,4 +23,4 @@
|
|||||||
/**
|
/**
|
||||||
* The module for the login functionality.
|
* The module for the login functionality.
|
||||||
*/
|
*/
|
||||||
angular.module('login', ['client', 'element', 'navigation']);
|
angular.module('login', ['element', 'navigation']);
|
||||||
|
@@ -28,7 +28,7 @@ angular.module('rest').factory('cacheService', ['$injector',
|
|||||||
|
|
||||||
// Required services
|
// Required services
|
||||||
var $cacheFactory = $injector.get('$cacheFactory');
|
var $cacheFactory = $injector.get('$cacheFactory');
|
||||||
|
var $rootScope = $injector.get('$rootScope');
|
||||||
|
|
||||||
// Service containing all caches
|
// Service containing all caches
|
||||||
var service = {};
|
var service = {};
|
||||||
@@ -63,7 +63,12 @@ angular.module('rest').factory('cacheService', ['$injector',
|
|||||||
service.connections.removeAll();
|
service.connections.removeAll();
|
||||||
service.users.removeAll();
|
service.users.removeAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Clear caches on logout
|
||||||
|
$rootScope.$on('guacLogout', function handleLogout() {
|
||||||
|
service.clearCaches();
|
||||||
|
});
|
||||||
|
|
||||||
return service;
|
return service;
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
Reference in New Issue
Block a user