Repository: guacamole-client Updated Branches: refs/heads/staging/1.0.0 25071673d -> 1f55349d2
GUACAMOLE-220: Ignore missing user or group when retrieving permissions/memberships. Project: http://git-wip-us.apache.org/repos/asf/guacamole-client/repo Commit: http://git-wip-us.apache.org/repos/asf/guacamole-client/commit/adb9aaa5 Tree: http://git-wip-us.apache.org/repos/asf/guacamole-client/tree/adb9aaa5 Diff: http://git-wip-us.apache.org/repos/asf/guacamole-client/diff/adb9aaa5 Branch: refs/heads/staging/1.0.0 Commit: adb9aaa5e2b89ee8fa81dba3b76224baaab5e76a Parents: 7fcb506 Author: Michael Jumper <mjum...@apache.org> Authored: Fri Oct 5 11:56:42 2018 -0700 Committer: Michael Jumper <mjum...@apache.org> Committed: Fri Oct 5 11:56:42 2018 -0700 ---------------------------------------------------------------------- .../manage/controllers/manageUserController.js | 21 ++++++++----- .../controllers/manageUserGroupController.js | 33 ++++++++++++++------ .../webapp/app/rest/services/requestService.js | 27 ++++++++++++++++ 3 files changed, 65 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/adb9aaa5/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js ---------------------------------------------------------------------- diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js index 7d8397f..42568a7 100644 --- a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js +++ b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js @@ -248,20 +248,27 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto var loadExistingUser = function loadExistingUser(dataSource, username) { return $q.all({ users : dataSourceService.apply(userService.getUser, dataSources, username), - permissions : permissionService.getPermissions(dataSource, username), - parentGroups : membershipService.getUserGroups(dataSource, username) + + // Use empty permission set if user cannot be found + permissions: + permissionService.getPermissions(dataSource, username) + ['catch'](requestService.defaultValue(new PermissionSet())), + + // Assume no parent groups if user cannot be found + parentGroups: + membershipService.getUserGroups(dataSource, username) + ['catch'](requestService.defaultValue([])) + }) .then(function userDataRetrieved(values) { $scope.users = values.users; - $scope.user = values.users[dataSource]; $scope.parentGroups = values.parentGroups; // Create skeleton user if user does not exist - if (!$scope.user) - $scope.user = new User({ - 'username' : username - }); + $scope.user = values.users[dataSource] || new User({ + 'username' : username + }); // The current user will be associated with username of the existing // user in the retrieved permission set http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/adb9aaa5/guacamole/src/main/webapp/app/manage/controllers/manageUserGroupController.js ---------------------------------------------------------------------- diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageUserGroupController.js b/guacamole/src/main/webapp/app/manage/controllers/manageUserGroupController.js index 229b3b8..b1b04d3 100644 --- a/guacamole/src/main/webapp/app/manage/controllers/manageUserGroupController.js +++ b/guacamole/src/main/webapp/app/manage/controllers/manageUserGroupController.js @@ -303,24 +303,39 @@ angular.module('manage').controller('manageUserGroupController', ['$scope', '$in var loadExistingUserGroup = function loadExistingGroup(dataSource, identifier) { return $q.all({ userGroups : dataSourceService.apply(userGroupService.getUserGroup, dataSources, identifier), - permissions : permissionService.getPermissions(dataSource, identifier, true), - parentGroups : membershipService.getUserGroups(dataSource, identifier, true), - memberGroups : membershipService.getMemberUserGroups(dataSource, identifier), - memberUsers : membershipService.getMemberUsers(dataSource, identifier) + + // Use empty permission set if group cannot be found + permissions: + permissionService.getPermissions(dataSource, identifier, true) + ['catch'](requestService.defaultValue(new PermissionSet())), + + // Assume no parent groups if group cannot be found + parentGroups: + membershipService.getUserGroups(dataSource, identifier, true) + ['catch'](requestService.defaultValue([])), + + // Assume no member groups if group cannot be found + memberGroups: + membershipService.getMemberUserGroups(dataSource, identifier) + ['catch'](requestService.defaultValue([])), + + // Assume no member users if group cannot be found + memberUsers: + membershipService.getMemberUsers(dataSource, identifier) + ['catch'](requestService.defaultValue([])) + }) .then(function userGroupDataRetrieved(values) { $scope.userGroups = values.userGroups; - $scope.userGroup = values.userGroups[dataSource]; $scope.parentGroups = values.parentGroups; $scope.memberGroups = values.memberGroups; $scope.memberUsers = values.memberUsers; // Create skeleton user group if user group does not exist - if (!$scope.userGroup) - $scope.userGroup = new UserGroup({ - 'identifier' : identifier - }); + $scope.userGroup = values.userGroups[dataSource] || new UserGroup({ + 'identifier' : identifier + }); $scope.permissionFlags = PermissionFlagSet.fromPermissionSet(values.permissions); http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/adb9aaa5/guacamole/src/main/webapp/app/rest/services/requestService.js ---------------------------------------------------------------------- diff --git a/guacamole/src/main/webapp/app/rest/services/requestService.js b/guacamole/src/main/webapp/app/rest/services/requestService.js index 9aef124..8d20976 100644 --- a/guacamole/src/main/webapp/app/rest/services/requestService.js +++ b/guacamole/src/main/webapp/app/rest/services/requestService.js @@ -92,6 +92,33 @@ angular.module('rest').factory('requestService', ['$injector', }; /** + * Creates a promise error callback which resolves the promise with the + * given default value only if the @link{Error} in the original rejection + * is a NOT_FOUND error. All other errors are passed through and must be + * handled as yet more rejections. + * + * @param {*} value + * The default value to use to resolve the promise if the promise is + * rejected with a NOT_FOUND error. + * + * @returns {Function} + * A function which can be provided as the error callback for a + * promise. + */ + service.defaultValue = function defaultValue(value) { + return service.createErrorCallback(function resolveIfNotFound(error) { + + // Return default value only if not found + if (error.type === Error.Type.NOT_FOUND) + return value; + + // Reject promise with original error otherwise + throw error; + + }); + }; + + /** * Promise error callback which ignores all rejections due to REST errors, * but logs all other rejections, such as those due to JavaScript errors. * This callback should be used in favor of angular.noop in cases where