mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 17:13:21 +00:00 
			
		
		
		
	GUAC-919: Copy Angular changes from old GUAC-546 branch.
This commit is contained in:
		
				
					committed by
					
						 Michael Jumper
						Michael Jumper
					
				
			
			
				
	
			
			
			
						parent
						
							ac2617b92a
						
					
				
				
					commit
					5c43ae4ff9
				
			| @@ -0,0 +1,110 @@ | ||||
| /* | ||||
|  * Copyright (C) 2014 Glyptodon LLC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * The controller for the connection edit modal. | ||||
|  */ | ||||
| angular.module('manage').controller('connectionEditModalController', ['$scope', '$injector',  | ||||
|         function connectionEditModalController($scope, $injector) { | ||||
|              | ||||
|     var connectionEditModal             = $injector.get('connectionEditModal'); | ||||
|     var connectionDAO                   = $injector.get('connectionDAO'); | ||||
|     var displayObjectPreparationService = $injector.get('displayObjectPreparationService'); | ||||
|      | ||||
|     // Make a copy of the old connection so that we can copy over the changes when done | ||||
|     var oldConnection = $scope.connection; | ||||
|      | ||||
|     // Copy data into a new conection object in case the user doesn't want to save | ||||
|     $scope.connection = angular.copy($scope.connection); | ||||
|      | ||||
|     var newConnection = !$scope.connection.identifier; | ||||
|     if(newConnection) | ||||
|         // Prepare this connection for display | ||||
|         displayObjectPreparationService.prepareConnection($scope.connection); | ||||
|      | ||||
|     // Set it to VNC by default | ||||
|     if(!$scope.connection.protocol) | ||||
|         $scope.connection.protocol = "vnc"; | ||||
|      | ||||
|     /** | ||||
|      * Close the modal. | ||||
|      */ | ||||
|     $scope.close = function close() { | ||||
|         connectionEditModal.deactivate(); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Save the connection and close the modal. | ||||
|      */ | ||||
|     $scope.save = function save() { | ||||
|         connectionDAO.saveConnection($scope.connection).success(function successfullyUpdatedConnection() { | ||||
|              | ||||
|             var oldParentID = oldConnection.parentIdentifier; | ||||
|             var newParentID = $scope.connection.parentIdentifier; | ||||
|              | ||||
|             // Copy the data back to the original model | ||||
|             angular.extend(oldConnection, $scope.connection); | ||||
|              | ||||
|             // We have to move this connection | ||||
|             if(oldParentID !== newParentID) | ||||
|                  | ||||
|                 // New connections are created by default in root - don't try to move it if it's already there. | ||||
|                 if(newConnection && newParentID === $scope.rootGroup.identifier) { | ||||
|                     $scope.moveItem($scope.connection, oldParentID, newParentID); | ||||
|                 } else { | ||||
|                     connectionDAO.moveConnection($scope.connection).then(function moveConnection() { | ||||
|                         $scope.moveItem($scope.connection, oldParentID, newParentID); | ||||
|                     }); | ||||
|                 } | ||||
|              | ||||
|             // Close the modal | ||||
|             connectionEditModal.deactivate(); | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Delete the connection and close the modal. | ||||
|      */ | ||||
|     $scope['delete'] = function deleteConnection() { | ||||
|          | ||||
|         // Nothing to delete if the connection is new | ||||
|         var newConnection = !$scope.connection.identifier; | ||||
|         if(newConnection) { | ||||
|             // Close the modal | ||||
|             connectionEditModal.deactivate(); | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         connectionDAO.deleteConnection($scope.connection).success(function successfullyDeletedConnection() { | ||||
|             var oldParentID = oldConnection.parentIdentifier; | ||||
|              | ||||
|             // We have to remove this connection from the heirarchy | ||||
|             $scope.moveItem($scope.connection, oldParentID); | ||||
|              | ||||
|             // Close the modal | ||||
|             connectionEditModal.deactivate(); | ||||
|         }); | ||||
|     } | ||||
| }]); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -0,0 +1,115 @@ | ||||
| /* | ||||
|  * Copyright (C) 2014 Glyptodon LLC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * The controller for the connection group edit modal. | ||||
|  */ | ||||
| angular.module('manage').controller('connectionGroupEditModalController', ['$scope', '$injector',  | ||||
|         function connectionEditModalController($scope, $injector) { | ||||
|              | ||||
|     var connectionGroupEditModal        = $injector.get('connectionGroupEditModal'); | ||||
|     var connectionGroupDAO              = $injector.get('connectionGroupDAO'); | ||||
|     var displayObjectPreparationService = $injector.get('displayObjectPreparationService'); | ||||
|      | ||||
|     // Make a copy of the old connection group so that we can copy over the changes when done | ||||
|     var oldConnectionGroup = $scope.connectionGroup; | ||||
|      | ||||
|     // Copy data into a new conection group object in case the user doesn't want to save | ||||
|     $scope.connectionGroup = angular.copy($scope.connectionGroup); | ||||
|      | ||||
|     var newConnectionGroup = !$scope.connectionGroup.identifier; | ||||
|      | ||||
|     $scope.types = [ | ||||
|         { | ||||
|             label: "organizational", | ||||
|             value: "ORGANIZATIONAL" | ||||
|         }, | ||||
|         { | ||||
|             label: "balancing", | ||||
|             value: "BALANCING" | ||||
|         } | ||||
|     ]; | ||||
|      | ||||
|     // Set it to organizational by default | ||||
|     if(!$scope.connectionGroup.type) | ||||
|         $scope.connectionGroup.type = $scope.types[0].value; | ||||
|      | ||||
|     /** | ||||
|      * Close the modal. | ||||
|      */ | ||||
|     $scope.close = function close() { | ||||
|         connectionGroupEditModal.deactivate(); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Save the connection and close the modal. | ||||
|      */ | ||||
|     $scope.save = function save() { | ||||
|         connectionGroupDAO.saveConnectionGroup($scope.connectionGroup).success(function successfullyUpdatedConnectionGroup() { | ||||
|              | ||||
|             // Prepare this connection group for display | ||||
|             displayObjectPreparationService.prepareConnectionGroup($scope.connectionGroup); | ||||
|              | ||||
|             var oldParentID = oldConnectionGroup.parentIdentifier; | ||||
|             var newParentID = $scope.connectionGroup.parentIdentifier; | ||||
|              | ||||
|             // Copy the data back to the original model | ||||
|             angular.extend(oldConnectionGroup, $scope.connectionGroup); | ||||
|              | ||||
|             // New groups are created by default in root - don't try to move it if it's already there. | ||||
|             if(newConnectionGroup && newParentID === $scope.rootGroup.identifier) { | ||||
|                 $scope.moveItem($scope.connectionGroup, oldParentID, newParentID); | ||||
|             } else { | ||||
|                 connectionGroupDAO.moveConnectionGroup($scope.connectionGroup).then(function moveConnectionGroup() { | ||||
|                     $scope.moveItem($scope.connectionGroup, oldParentID, newParentID); | ||||
|                 }); | ||||
|             } | ||||
|              | ||||
|             // Close the modal | ||||
|             connectionGroupEditModal.deactivate(); | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Delete the connection and close the modal. | ||||
|      */ | ||||
|     $scope['delete'] = function deleteConnectionGroup() { | ||||
|          | ||||
|         // Nothing to delete if the connection is new | ||||
|         if(newConnectionGroup) | ||||
|             // Close the modal | ||||
|             connectionGroupEditModal.deactivate(); | ||||
|          | ||||
|         connectionGroupDAO.deleteConnectionGroup($scope.connectionGroup).success(function successfullyDeletedConnectionGroup() { | ||||
|             var oldParentID = oldConnectionGroup.parentIdentifier; | ||||
|              | ||||
|             // We have to remove this connection group from the heirarchy | ||||
|             $scope.moveItem($scope.connectionGroup, oldParentID); | ||||
|              | ||||
|             // Close the modal | ||||
|             connectionGroupEditModal.deactivate(); | ||||
|         }); | ||||
|     } | ||||
| }]); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -0,0 +1,242 @@ | ||||
| /* | ||||
|  * Copyright (C) 2014 Glyptodon LLC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * The controller for the administration page. | ||||
|  */ | ||||
| angular.module('manage').controller('manageController', ['$scope', '$injector',  | ||||
|         function manageController($scope, $injector) { | ||||
|              | ||||
|     // Get the dependencies commonJS style | ||||
|     var connectionGroupService      = $injector.get('connectionGroupService'); | ||||
|     var connectionEditModal         = $injector.get('connectionEditModal'); | ||||
|     var connectionGroupEditModal    = $injector.get('connectionGroupEditModal'); | ||||
|     var userEditModal               = $injector.get('userEditModal'); | ||||
|     var protocolDAO                 = $injector.get('protocolDAO'); | ||||
|     var userDAO                     = $injector.get('userDAO'); | ||||
|     var userService                 = $injector.get('userService'); | ||||
|      | ||||
|     // All the connections and connection groups in root | ||||
|     $scope.connectionsAndGroups = []; | ||||
|      | ||||
|     // All users that the current user has permission to edit | ||||
|     $scope.users = []; | ||||
|      | ||||
|     $scope.basicPermissionsLoaded.then(function basicPermissionsHaveBeenLoaded() { | ||||
|         connectionGroupService.getAllGroupsAndConnections([], undefined, true, true).then(function filterConnectionsAndGroups(rootGroupList) { | ||||
|             $scope.rootGroup = rootGroupList[0]; | ||||
|             $scope.connectionsAndGroups = $scope.rootGroup.children; | ||||
|              | ||||
|             // Filter the items to only include ones that we have UPDATE for | ||||
|             if(!$scope.currentUserIsAdmin) { | ||||
|                 connectionGroupService.filterConnectionsAndGroupByPermission( | ||||
|                     $scope.connectionsAndGroups, | ||||
|                     $scope.currentUserPermissions, | ||||
|                     { | ||||
|                         'CONNECTION':       'UPDATE', | ||||
|                         'CONNECTION_GROUP': 'UPDATE' | ||||
|                     } | ||||
|                 ); | ||||
|             } | ||||
|         }); | ||||
|          | ||||
|         userDAO.getUsers().success(function filterEditableUsers(users) { | ||||
|             $scope.users = users; | ||||
|              | ||||
|             // Filter the users to only include ones that we have UPDATE for | ||||
|             if(!$scope.currentUserIsAdmin) { | ||||
|                 userService.filterUsersByPermission( | ||||
|                     $scope.users, | ||||
|                     $scope.currentUserPermissions, | ||||
|                     'UPDATE' | ||||
|                 ); | ||||
|             } | ||||
|         }); | ||||
|     }); | ||||
|      | ||||
|     /** | ||||
|      * Move the connection or connection group within the group heirarchy,  | ||||
|      * initially place a new item, or remove an item from the heirarchy. | ||||
|      * @param {object} item The connection or connection group to move. | ||||
|      * @param {string} fromID The ID of the group to move the item from, if relevant. | ||||
|      * @param {string} toID The ID of the group to move the item to, if relevant. | ||||
|      */ | ||||
|     $scope.moveItem = function moveItem(item, fromID, toID) { | ||||
|          | ||||
|         // Remove the item from the old group, if there was one | ||||
|         if(fromID) { | ||||
|             var oldParent   = findGroup($scope.rootGroup, fromID), | ||||
|                 oldChildren = oldParent.children; | ||||
|              | ||||
|             // Find and remove the item from the old group | ||||
|             for(var i = 0; i < oldChildren.length; i++) { | ||||
|                 var child = oldChildren[i]; | ||||
|                 if(child.isConnection === item.isConnection && | ||||
|                         child.identifier === item.identifier) { | ||||
|                     oldChildren.splice(i, 1); | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         // Add the item to the new group, if there is one | ||||
|         if(toID) { | ||||
|             var newParent = findGroup($scope.rootGroup, toID); | ||||
|             newParent.children.push(item); | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|     function findGroup(group, parentID) { | ||||
|         // Only searching in groups | ||||
|         if(group.isConnection) | ||||
|             return; | ||||
|          | ||||
|         if(group.identifier === parentID) | ||||
|             return group; | ||||
|          | ||||
|         for(var i = 0; i < group.children.length; i++) { | ||||
|             var child = group.children[i]; | ||||
|             var foundGroup = findGroup(child, parentID); | ||||
|             if(foundGroup) return foundGroup; | ||||
|         } | ||||
|     } | ||||
|          | ||||
|      | ||||
|     $scope.protocols = {}; | ||||
|      | ||||
|     // Get the protocol information from the server and copy it into the scope | ||||
|     protocolDAO.getProtocols().success(function fetchProtocols(protocols) { | ||||
|         angular.extend($scope.protocols, protocols); | ||||
|     }); | ||||
|      | ||||
|     /** | ||||
|      * Toggle the open/closed status of the connectionGroup. | ||||
|      *  | ||||
|      * @param {object} connectionGroup The connection group to toggle. | ||||
|      */ | ||||
|     $scope.toggleExpanded = function toggleExpanded(connectionGroup) { | ||||
|         connectionGroup.expanded = !connectionGroup.expanded; | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Open a modal to edit the connection. | ||||
|      *   | ||||
|      * @param {object} connection The connection to edit. | ||||
|      */ | ||||
|     $scope.editConnection = function editConnection(connection) { | ||||
|         connectionEditModal.activate( | ||||
|         { | ||||
|             connection : connection,  | ||||
|             protocols  : $scope.protocols, | ||||
|             moveItem   : $scope.moveItem, | ||||
|             rootGroup  : $scope.rootGroup | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Open a modal to edit a new connection. | ||||
|      */ | ||||
|     $scope.newConnection = function newConnection() { | ||||
|         connectionEditModal.activate( | ||||
|         { | ||||
|             connection : {},  | ||||
|             protocols  : $scope.protocols, | ||||
|             moveItem   : $scope.moveItem, | ||||
|             rootGroup  : $scope.rootGroup | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Open a modal to edit a new connection group. | ||||
|      */ | ||||
|     $scope.newConnectionGroup = function newConnectionGroup() { | ||||
|         connectionGroupEditModal.activate( | ||||
|         { | ||||
|             connectionGroup : {},  | ||||
|             moveItem        : $scope.moveItem, | ||||
|             rootGroup       : $scope.rootGroup | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Open a modal to edit the connection group. | ||||
|      *   | ||||
|      * @param {object} connection The connection group to edit. | ||||
|      */ | ||||
|     $scope.editConnectionGroup = function editConnectionGroup(connectionGroup) { | ||||
|         connectionGroupEditModal.activate( | ||||
|         { | ||||
|             connectionGroup : connectionGroup,  | ||||
|             moveItem        : $scope.moveItem, | ||||
|             rootGroup       : $scope.rootGroup | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     // Remove the user from the current list of users | ||||
|     function removeUser(user) { | ||||
|         for(var i = 0; i < $scope.users.length; i++) { | ||||
|             if($scope.users[i].username === user.username) { | ||||
|                 $scope.users.splice(i, 1); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Open a modal to edit the user. | ||||
|      *   | ||||
|      * @param {object} user The user to edit. | ||||
|      */ | ||||
|     $scope.editUser = function editUser(user) { | ||||
|         userEditModal.activate( | ||||
|         { | ||||
|             user            : user,  | ||||
|             rootGroup       : $scope.rootGroup, | ||||
|             removeUser      : removeUser | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     $scope.newUsername = ""; | ||||
|      | ||||
|     /** | ||||
|      * Open a modal to edit the user. | ||||
|      *   | ||||
|      * @param {object} user The user to edit. | ||||
|      */ | ||||
|     $scope.newUser = function newUser() { | ||||
|         if($scope.newUsername) { | ||||
|             var newUser = { | ||||
|                 username: $scope.newUsername | ||||
|             }; | ||||
|              | ||||
|             userDAO.createUser(newUser).success(function addUserToList() { | ||||
|                 $scope.users.push(newUser); | ||||
|             }); | ||||
|              | ||||
|             $scope.newUsername = ""; | ||||
|         } | ||||
|     }; | ||||
|      | ||||
| }]); | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -0,0 +1,263 @@ | ||||
| /* | ||||
|  * Copyright (C) 2014 Glyptodon LLC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * The controller for the connection edit modal. | ||||
|  */ | ||||
| angular.module('manage').controller('userEditModalController', ['$scope', '$injector',  | ||||
|         function userEditModalController($scope, $injector) { | ||||
|              | ||||
|     var userEditModal                   = $injector.get('userEditModal'); | ||||
|     var userDAO                         = $injector.get('userDAO'); | ||||
|     var permissionDAO                   = $injector.get('permissionDAO'); | ||||
|      | ||||
|     // Make a copy of the old user so that we can copy over the changes when done | ||||
|     var oldUser = $scope.user; | ||||
|      | ||||
|     // Copy data into a new conection object in case the user doesn't want to save | ||||
|     $scope.user = angular.copy($scope.user); | ||||
|      | ||||
|     /** | ||||
|      * Close the modal. | ||||
|      */ | ||||
|     $scope.close = function close() { | ||||
|         userEditModal.deactivate(); | ||||
|     }; | ||||
|      | ||||
|     /* | ||||
|      * All the permissions that have been modified since this modal was opened. | ||||
|      * Maps of type or id to value. | ||||
|      */  | ||||
|     $scope.modifiedSystemPermissions = {}; | ||||
|     $scope.modifiedConnectionPermissions = {}; | ||||
|     $scope.modifiedConnectionGroupPermissions = {}; | ||||
|      | ||||
|     $scope.markSystemPermissionModified = function markSystemPermissionModified(type) { | ||||
|         $scope.modifiedSystemPermissions[type] = $scope.systemPermissions[type]; | ||||
|     }; | ||||
|      | ||||
|     $scope.markConnectionPermissionModified = function markConnectionPermissionModified(id) { | ||||
|         $scope.modifiedConnectionPermissions[id] = $scope.connectionPermissions[id]; | ||||
|     }; | ||||
|      | ||||
|     $scope.markConnectionGroupPermissionModified = function markConnectionGroupPermissionModified(id) { | ||||
|         $scope.modifiedConnectionGroupPermissions[id] = $scope.connectionGroupPermissions[id]; | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Save the user and close the modal. | ||||
|      */ | ||||
|     $scope.save = function save() { | ||||
|          | ||||
|         if($scope.passwordMatch !== $scope.user.password) { | ||||
|             //TODO: Display an error | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         userDAO.saveUser($scope.user).success(function successfullyUpdatedUser() { | ||||
|              | ||||
|             //Figure out what permissions have changed | ||||
|             var connectionPermissionsToCreate = [], | ||||
|                 connectionPermissionsToDelete = [], | ||||
|                 connectionGroupPermissionsToCreate = [], | ||||
|                 connectionGroupPermissionsToDelete = [], | ||||
|                 systemPermissionsToCreate = [], | ||||
|                 systemPermissionsToDelete = []; | ||||
|              | ||||
|             for(var type in $scope.modifiedSystemPermissions) { | ||||
|                 // It was added | ||||
|                 if($scope.modifiedSystemPermissions[type] && !originalSystemPermissions[type]) { | ||||
|                     systemPermissionsToCreate.push(type); | ||||
|                 } | ||||
|                 // It was removed | ||||
|                 else if(!$scope.modifiedSystemPermissions[type] && originalSystemPermissions[type]) { | ||||
|                     systemPermissionsToDelete.push(type); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             for(var id in $scope.modifiedConnectionPermissions) { | ||||
|                 // It was added | ||||
|                 if($scope.modifiedConnectionPermissions[id] && !originalConnectionPermissions[id]) { | ||||
|                     connectionPermissionsToCreate.push(id); | ||||
|                 } | ||||
|                 // It was removed | ||||
|                 else if(!$scope.modifiedConnectionPermissions[id] && originalConnectionPermissions[id]) { | ||||
|                     connectionPermissionsToDelete.push(id); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             for(var id in $scope.modifiedConnectionGroupPermissions) { | ||||
|                 // It was added | ||||
|                 if($scope.modifiedConnectionGroupPermissions[id] && !originalConnectionGroupPermissions[id]) { | ||||
|                     connectionGroupPermissionsToCreate.push(id); | ||||
|                 } | ||||
|                 // It was removed | ||||
|                 else if(!$scope.modifiedConnectionGroupPermissions[id] && originalConnectionGroupPermissions[id]) { | ||||
|                     connectionGroupPermissionsToDelete.push(id); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             var permissionsToAdd = []; | ||||
|             var permissionsToRemove = []; | ||||
|              | ||||
|             // Create new connection permissions | ||||
|             for(var i = 0; i < connectionPermissionsToCreate.length; i++) { | ||||
|                 permissionsToAdd.push({ | ||||
|                     objectType :        "CONNECTION", | ||||
|                     objectIdentifier :  connectionPermissionsToCreate[i], | ||||
|                     permissionType :    "READ" | ||||
|                 }); | ||||
|             } | ||||
|              | ||||
|             // Delete old connection permissions | ||||
|             for(var i = 0; i < connectionPermissionsToDelete.length; i++) { | ||||
|                 permissionsToRemove.push({ | ||||
|                     objectType :        "CONNECTION", | ||||
|                     objectIdentifier :  connectionPermissionsToDelete[i], | ||||
|                     permissionType :    "READ" | ||||
|                 }); | ||||
|             } | ||||
|              | ||||
|             // Create new connection group permissions | ||||
|             for(var i = 0; i < connectionGroupPermissionsToCreate.length; i++) { | ||||
|                 permissionsToAdd.push({ | ||||
|                     objectType :        "CONNECTION_GROUP", | ||||
|                     objectIdentifier :  connectionGroupPermissionsToCreate[i], | ||||
|                     permissionType :    "READ" | ||||
|                 }); | ||||
|             } | ||||
|              | ||||
|             // Delete old connection group permissions | ||||
|             for(var i = 0; i < connectionGroupPermissionsToDelete.length; i++) { | ||||
|                 permissionsToRemove.push({ | ||||
|                     objectType :        "CONNECTION_GROUP", | ||||
|                     objectIdentifier :  connectionGroupPermissionsToDelete[i], | ||||
|                     permissionType :    "READ" | ||||
|                 }); | ||||
|             } | ||||
|              | ||||
|             // Create new system permissions | ||||
|             for(var i = 0; i < systemPermissionsToCreate.length; i++) { | ||||
|                 permissionsToAdd.push({ | ||||
|                     objectType :        "SYSTEM", | ||||
|                     permissionType :    systemPermissionsToCreate[i] | ||||
|                 }); | ||||
|             } | ||||
|              | ||||
|             // Delete old system permissions | ||||
|             for(var i = 0; i < systemPermissionsToDelete.length; i++) { | ||||
|                 permissionsToRemove.push({ | ||||
|                     objectType :        "SYSTEM", | ||||
|                     permissionType :    systemPermissionsToDelete[i] | ||||
|                 }); | ||||
|             } | ||||
|          | ||||
|             function completeSaveProcess() { | ||||
|                 // Close the modal | ||||
|                 userEditModal.deactivate(); | ||||
|             } | ||||
|              | ||||
|             function handleFailure() { | ||||
|                 //TODO: Handle the permission API call failure | ||||
|             } | ||||
|              | ||||
|             if(permissionsToAdd.length || permissionsToRemove.length) { | ||||
|                 // Make the call to update the permissions | ||||
|                 permissionDAO.patchPermissions( | ||||
|                         $scope.user.username, permissionsToAdd, permissionsToRemove) | ||||
|                         .success(completeSaveProcess).error(handleFailure); | ||||
|             } else { | ||||
|                 completeSaveProcess(); | ||||
|             } | ||||
|              | ||||
|         }); | ||||
|     }; | ||||
|      | ||||
|     $scope.permissions = []; | ||||
|  | ||||
|     // Maps of connection and connection group IDs to access permission booleans | ||||
|     $scope.connectionPermissions = {}; | ||||
|     $scope.connectionGroupPermissions = {}; | ||||
|     $scope.systemPermissions = {}; | ||||
|      | ||||
|     // The original permissions to compare against  | ||||
|     var originalConnectionPermissions, | ||||
|         originalConnectionGroupPermissions, | ||||
|         originalSystemPermissions; | ||||
|      | ||||
|     // Get the permissions for the user we are editing | ||||
|     permissionDAO.getPermissions($scope.user.username).success(function gotPermissions(permissions) { | ||||
|         $scope.permissions = permissions; | ||||
|          | ||||
|         // Figure out if the user has any system level permissions | ||||
|         for(var i = 0; i < $scope.permissions.length; i++) { | ||||
|             var permission = $scope.permissions[i]; | ||||
|             if(permission.objectType === "SYSTEM") { | ||||
|                  | ||||
|                 $scope.systemPermissions[permission.permissionType] = true; | ||||
|                  | ||||
|             // Only READ permission is editable via this UI | ||||
|             } else if (permission.permissionType === "READ") { | ||||
|                 switch(permission.objectType) { | ||||
|                     case "CONNECTION": | ||||
|                         $scope.connectionPermissions[permission.objectIdentifier] = true; | ||||
|                         break; | ||||
|                     case "CONNECTION_GROUP": | ||||
|                         $scope.connectionGroupPermissions[permission.objectIdentifier] = true; | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         // Copy the original permissions so we can compare later | ||||
|         originalConnectionPermissions = angular.copy($scope.connectionPermissions); | ||||
|         originalConnectionGroupPermissions = angular.copy($scope.connectionGroupPermissions); | ||||
|         originalSystemPermissions = angular.copy($scope.systemPermissions); | ||||
|          | ||||
|     }); | ||||
|      | ||||
|     /** | ||||
|      * Delete the user and close the modal. | ||||
|      */ | ||||
|     $scope['delete'] = function deleteUser() { | ||||
|         userDAO.deleteUser($scope.user).success(function successfullyDeletedUser() { | ||||
|              | ||||
|             // Remove the user from the list | ||||
|             $scope.removeUser($scope.user); | ||||
|              | ||||
|             // Close the modal | ||||
|             userEditModal.deactivate(); | ||||
|         }); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Toggle the open/closed status of the connectionGroup. | ||||
|      *  | ||||
|      * @param {object} connectionGroup The connection group to toggle. | ||||
|      */ | ||||
|     $scope.toggleExpanded = function toggleExpanded(connectionGroup) { | ||||
|         connectionGroup.expanded = !connectionGroup.expanded; | ||||
|     }; | ||||
| }]); | ||||
|  | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user