From e9538a4167f8edc381bbd355aef29bf3b4076866 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 12 Feb 2015 23:07:45 -0800 Subject: [PATCH] GUAC-1100: Commit to String identifiers. --- .../guacamole/net/auth/AbstractUser.java | 4 +- .../guacamole/net/auth/Connection.java | 20 +------ .../guacamole/net/auth/ConnectionGroup.java | 47 +++++++++-------- .../guacamole/net/auth/Directory.java | 17 +++--- .../guacamole/net/auth/Identifiable.java | 52 +++++++++++++++++++ .../glyptodon/guacamole/net/auth/User.java | 25 ++------- .../guacamole/net/auth/UserContext.java | 2 +- .../net/auth/permission/ObjectPermission.java | 10 ++-- .../auth/permission/ObjectPermissionSet.java | 22 ++++---- .../simple/SimpleConnectionDirectory.java | 2 +- .../auth/simple/SimpleConnectionGroup.java | 12 ++--- .../SimpleConnectionGroupDirectory.java | 2 +- .../net/auth/simple/SimpleDirectory.java | 28 ++++------ .../simple/SimpleObjectPermissionSet.java | 38 ++++++-------- .../guacamole/net/auth/simple/SimpleUser.java | 24 ++++----- .../net/auth/simple/SimpleUserContext.java | 4 +- .../net/auth/simple/SimpleUserDirectory.java | 4 +- .../net/basic/TunnelRequestService.java | 12 ++--- .../basic/rest/ObjectRetrievalService.java | 6 +-- .../net/basic/rest/auth/TokenRESTService.java | 4 +- .../connection/ConnectionRESTService.java | 8 +-- .../APIConnectionGroupWrapper.java | 4 +- .../ConnectionGroupRESTService.java | 14 ++--- .../rest/permission/APIPermissionSet.java | 4 +- .../net/basic/rest/user/APIUser.java | 2 +- .../net/basic/rest/user/APIUserWrapper.java | 10 ++-- .../net/basic/rest/user/UserRESTService.java | 26 +++++----- 27 files changed, 201 insertions(+), 202 deletions(-) create mode 100644 guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Identifiable.java diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/AbstractUser.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/AbstractUser.java index 96cdb619e..d3232b6cb 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/AbstractUser.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/AbstractUser.java @@ -44,12 +44,12 @@ public abstract class AbstractUser implements User { private String password; @Override - public String getUsername() { + public String getIdentifier() { return username; } @Override - public void setUsername(String username) { + public void setIdentifier(String username) { this.username = username; } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Connection.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Connection.java index cfd6447f2..63e60a328 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Connection.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Connection.java @@ -36,7 +36,7 @@ import org.glyptodon.guacamole.protocol.GuacamoleConfiguration; * * @author Michael Jumper */ -public interface Connection { +public interface Connection extends Identifiable { /** * Returns the name assigned to this Connection. @@ -51,24 +51,6 @@ public interface Connection { */ public void setName(String name); - /** - * Returns the unique identifier assigned to this Connection. All - * connections must have a deterministic, unique identifier which may not - * be null. - * - * @return - * The unique identifier assigned to this Connection, which may not be - * null. - */ - public String getIdentifier(); - - /** - * Sets the identifier assigned to this Connection. - * - * @param identifier The identifier to assign. - */ - public void setIdentifier(String identifier); - /** * Returns the unique identifier of the parent ConnectionGroup for * this Connection. diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/ConnectionGroup.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/ConnectionGroup.java index 6b5f84712..a99978759 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/ConnectionGroup.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/ConnectionGroup.java @@ -32,10 +32,29 @@ import org.glyptodon.guacamole.protocol.GuacamoleClientInformation; * * @author James Muehlner */ -public interface ConnectionGroup { - +public interface ConnectionGroup extends Identifiable { + + /** + * All legal types of connection group. + */ public enum Type { - ORGANIZATIONAL, BALANCING + + /** + * A connection group that purely organizes other connections or + * connection groups, serving only as a container. An organizational + * connection group is analogous to a directory or folder in a + * filesystem. + */ + ORGANIZATIONAL, + + /** + * A connection group that acts as a load balancer. A balancing + * connection group can be connected to in the same manner as a + * connection, and will transparently route to the least-used + * underlying connection. + */ + BALANCING + }; /** @@ -51,24 +70,6 @@ public interface ConnectionGroup { */ public void setName(String name); - /** - * Returns the unique identifier assigned to this ConnectionGroup. All - * connection groups must have a deterministic, unique identifier which may - * not be null. - * - * @return - * The unique identifier assigned to this ConnectionGroup, which may - * not be null. - */ - public String getIdentifier(); - - /** - * Sets the identifier assigned to this ConnectionGroup. - * - * @param identifier The identifier to assign. - */ - public void setIdentifier(String identifier); - /** * Returns the unique identifier of the parent ConnectionGroup for * this ConnectionGroup. @@ -111,7 +112,7 @@ public interface ConnectionGroup { * @throws GuacamoleException If an error occurs while creating the * Directory. */ - Directory getConnectionDirectory() + Directory getConnectionDirectory() throws GuacamoleException; /** @@ -125,7 +126,7 @@ public interface ConnectionGroup { * @throws GuacamoleException If an error occurs while creating the * Directory. */ - Directory getConnectionGroupDirectory() + Directory getConnectionGroupDirectory() throws GuacamoleException; /** diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Directory.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Directory.java index 96f4f7b02..b241c017e 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Directory.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Directory.java @@ -34,11 +34,10 @@ import org.glyptodon.guacamole.GuacamoleException; * function. * * @author Michael Jumper - * @param The type of identifier used to identify objects - * stored within this Directory. - * @param The type of objects stored within this Directory. + * @param + * The type of objects stored within this Directory. */ -public interface Directory { +public interface Directory { /** * Returns the object having the given identifier. Note that changes to @@ -56,7 +55,7 @@ public interface Directory { * object, or if permission for retrieving the * object is denied. */ - ObjectType get(IdentifierType identifier) throws GuacamoleException; + ObjectType get(String identifier) throws GuacamoleException; /** * Returns the objects having the given identifiers. Note that changes to @@ -78,7 +77,7 @@ public interface Directory { * If an error occurs while retrieving the objects, or if permission * to retrieve the requested objects is denied. */ - Collection getAll(Collection identifiers) + Collection getAll(Collection identifiers) throws GuacamoleException; /** @@ -89,7 +88,7 @@ public interface Directory { * @throws GuacamoleException If an error occurs while retrieving * the identifiers. */ - Set getIdentifiers() throws GuacamoleException; + Set getIdentifiers() throws GuacamoleException; /** * Adds the given object to the overall set. @@ -121,7 +120,7 @@ public interface Directory { * @throws GuacamoleException If an error occurs while removing the object, * or if removing object is not allowed. */ - void remove(IdentifierType identifier) throws GuacamoleException; + void remove(String identifier) throws GuacamoleException; /** * Moves the object with the given identifier to the given directory. @@ -132,7 +131,7 @@ public interface Directory { * @throws GuacamoleException If an error occurs while moving the object, * or if moving object is not allowed. */ - void move(IdentifierType identifier, Directory directory) + void move(String identifier, Directory directory) throws GuacamoleException; } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Identifiable.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Identifiable.java new file mode 100644 index 000000000..8490bbf7c --- /dev/null +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/Identifiable.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2013 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. + */ + +package org.glyptodon.guacamole.net.auth; + +/** + * An object which has a deterministic, unique identifier, which may not be + * null. + * + * @author Michael Jumper + */ +public interface Identifiable { + + /** + * Returns the unique identifier assigned to this object. All identifiable + * objects must have a deterministic, unique identifier which may not be + * null. + * + * @return + * The unique identifier assigned to this object, which may not be + * null. + */ + public String getIdentifier(); + + /** + * Sets the identifier assigned to this object. + * + * @param identifier + * The identifier to assign. + */ + public void setIdentifier(String identifier); + +} diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/User.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/User.java index da5c632e4..09e4c2e78 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/User.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/User.java @@ -32,24 +32,7 @@ import org.glyptodon.guacamole.net.auth.permission.SystemPermissionSet; * * @author Michael Jumper */ -public interface User { - - /** - * Returns the name of this user, which must be unique across all users. - * All users must have a deterministic, unique username which may not be - * null. - * - * @return - * The unique username of this user, which may not be null. - */ - public String getUsername(); - - /** - * Sets the name of this user, which must be unique across all users. - * - * @param username The name of this user. - */ - public void setUsername(String username); +public interface User extends Identifiable { /** * Returns this user's password. Note that the password returned may be @@ -92,7 +75,7 @@ public interface User { * If an error occurs while retrieving permissions, or if reading all * permissions is not allowed. */ - ObjectPermissionSet getConnectionPermissions() + ObjectPermissionSet getConnectionPermissions() throws GuacamoleException; /** @@ -106,7 +89,7 @@ public interface User { * If an error occurs while retrieving permissions, or if reading all * permissions is not allowed. */ - ObjectPermissionSet getConnectionGroupPermissions() + ObjectPermissionSet getConnectionGroupPermissions() throws GuacamoleException; /** @@ -119,6 +102,6 @@ public interface User { * If an error occurs while retrieving permissions, or if reading all * permissions is not allowed. */ - ObjectPermissionSet getUserPermissions() throws GuacamoleException; + ObjectPermissionSet getUserPermissions() throws GuacamoleException; } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/UserContext.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/UserContext.java index 5912b38ec..deba2cb7d 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/UserContext.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/UserContext.java @@ -52,7 +52,7 @@ public interface UserContext { * @throws GuacamoleException If an error occurs while creating the * Directory. */ - Directory getUserDirectory() throws GuacamoleException; + Directory getUserDirectory() throws GuacamoleException; /** * Retrieves a connection group which can be used to view and manipulate diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/permission/ObjectPermission.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/permission/ObjectPermission.java index c776e3414..e0927f30a 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/permission/ObjectPermission.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/permission/ObjectPermission.java @@ -28,10 +28,8 @@ package org.glyptodon.guacamole.net.auth.permission; * whole. * * @author Michael Jumper - * @param - * The type of identifier used by the object this permission affects. */ -public class ObjectPermission implements Permission { +public class ObjectPermission implements Permission { /** * Specific types of object-level permissions. Each permission type is @@ -65,7 +63,7 @@ public class ObjectPermission implements Permission implements Permission implements Permission - * The type of identifier used to identify objects affected by permissions - * stored in this ObjectPermissionSet. */ -public interface ObjectPermissionSet - extends PermissionSet> { +public interface ObjectPermissionSet extends PermissionSet { /** * Tests whether the permission of the given type is granted for the @@ -58,7 +54,7 @@ public interface ObjectPermissionSet * cannot be checked due to lack of permissions to do so. */ boolean hasPermission(ObjectPermission.Type permission, - IdentifierType identifier) throws GuacamoleException; + String identifier) throws GuacamoleException; /** * Adds the specified permission for the object having the given @@ -76,7 +72,7 @@ public interface ObjectPermissionSet * add permissions is denied. */ void addPermission(ObjectPermission.Type permission, - IdentifierType identifier) throws GuacamoleException; + String identifier) throws GuacamoleException; /** * Removes the specified permission for the object having the given @@ -94,7 +90,7 @@ public interface ObjectPermissionSet * to remove permissions is denied. */ void removePermission(ObjectPermission.Type permission, - IdentifierType identifier) throws GuacamoleException; + String identifier) throws GuacamoleException; /** * Tests whether this user has the specified permissions for the objects @@ -119,20 +115,20 @@ public interface ObjectPermissionSet * If an error occurs while checking permissions, or if permissions * cannot be checked due to lack of permissions to do so. */ - Collection getAccessibleObjects( + Collection getAccessibleObjects( Collection permissions, - Collection identifiers) throws GuacamoleException; + Collection identifiers) throws GuacamoleException; @Override - Set> getPermissions() + Set getPermissions() throws GuacamoleException; @Override - void addPermissions(Set> permissions) + void addPermissions(Set permissions) throws GuacamoleException; @Override - void removePermissions(Set> permissions) + void removePermissions(Set permissions) throws GuacamoleException; } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionDirectory.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionDirectory.java index e7669b872..a8641cb6c 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionDirectory.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionDirectory.java @@ -35,7 +35,7 @@ import org.glyptodon.guacamole.protocol.GuacamoleConfiguration; * * @author Michael Jumper */ -public class SimpleConnectionDirectory extends SimpleDirectory { +public class SimpleConnectionDirectory extends SimpleDirectory { /** * The Map of Connections to provide access to. diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroup.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroup.java index ffcf7a34a..6f4cb1051 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroup.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroup.java @@ -44,13 +44,13 @@ public class SimpleConnectionGroup extends AbstractConnectionGroup { * Underlying connection directory, containing all connections within this * group. */ - private final Directory connectionDirectory; + private final Directory connectionDirectory; /** * Underlying connection group directory, containing all connections within * this group. */ - private final Directory connectionGroupDirectory; + private final Directory connectionGroupDirectory; /** * Creates a new SimpleConnectionGroup having the given name and identifier @@ -64,8 +64,8 @@ public class SimpleConnectionGroup extends AbstractConnectionGroup { * when requested. */ public SimpleConnectionGroup(String name, String identifier, - Directory connectionDirectory, - Directory connectionGroupDirectory) { + Directory connectionDirectory, + Directory connectionGroupDirectory) { // Set name setName(name); @@ -83,13 +83,13 @@ public class SimpleConnectionGroup extends AbstractConnectionGroup { } @Override - public Directory getConnectionDirectory() + public Directory getConnectionDirectory() throws GuacamoleException { return connectionDirectory; } @Override - public Directory getConnectionGroupDirectory() + public Directory getConnectionGroupDirectory() throws GuacamoleException { return connectionGroupDirectory; } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.java index 344cbcb4d..8e0a6d6f8 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.java @@ -35,7 +35,7 @@ import org.glyptodon.guacamole.net.auth.ConnectionGroup; * @author James Muehlner */ public class SimpleConnectionGroupDirectory - extends SimpleDirectory { + extends SimpleDirectory { /** * The Map of ConnectionGroups to provide access to. diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleDirectory.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleDirectory.java index d665a9687..570fe2bcd 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleDirectory.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleDirectory.java @@ -37,20 +37,15 @@ import org.glyptodon.guacamole.net.auth.Directory; * will affect the available contents of this SimpleDirectory. * * @author Michael Jumper - * @param - * The type of identifier used to identify objects stored within this - * SimpleDirectory. - * * @param * The type of objects stored within this SimpleDirectory. */ -public class SimpleDirectory - implements Directory { +public class SimpleDirectory implements Directory { /** * The Map of objects to provide access to. */ - private Map objects = Collections.EMPTY_MAP; + private Map objects = Collections.EMPTY_MAP; /** * Creates a new empty SimpleDirectory which does not provide access to @@ -66,7 +61,7 @@ public class SimpleDirectory * @param objects * The Map of objects to provide access to. */ - public SimpleDirectory(Map objects) { + public SimpleDirectory(Map objects) { this.objects = objects; } @@ -78,7 +73,7 @@ public class SimpleDirectory * @param objects * The Map of objects to provide access to. */ - protected void setObjects(Map objects) { + protected void setObjects(Map objects) { this.objects = objects; } @@ -90,25 +85,25 @@ public class SimpleDirectory * @return * The Map of objects which currently backs this SimpleDirectory. */ - protected Map getObjects() { + protected Map getObjects() { return objects; } @Override - public ObjectType get(IdentifierType identifier) + public ObjectType get(String identifier) throws GuacamoleException { return objects.get(identifier); } @Override - public Collection getAll(Collection identifiers) + public Collection getAll(Collection identifiers) throws GuacamoleException { // Create collection which has an appropriate initial size Collection foundObjects = new ArrayList(identifiers.size()); // Populate collection with matching objects - for (IdentifierType identifier : identifiers) { + for (String identifier : identifiers) { // Add the object which has the current identifier, if any ObjectType object = objects.get(identifier); @@ -122,7 +117,7 @@ public class SimpleDirectory } @Override - public Set getIdentifiers() throws GuacamoleException { + public Set getIdentifiers() throws GuacamoleException { return objects.keySet(); } @@ -139,13 +134,12 @@ public class SimpleDirectory } @Override - public void remove(IdentifierType identifier) throws GuacamoleException { + public void remove(String identifier) throws GuacamoleException { throw new GuacamoleSecurityException("Permission denied."); } @Override - public void move(IdentifierType identifier, - Directory directory) + public void move(String identifier, Directory directory) throws GuacamoleException { throw new GuacamoleSecurityException("Permission denied."); } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleObjectPermissionSet.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleObjectPermissionSet.java index 96a98b46a..b265ca5ca 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleObjectPermissionSet.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleObjectPermissionSet.java @@ -36,17 +36,13 @@ import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet; * of Permissions to determine which permissions are present. * * @author Michael Jumper - * @param - * The type of identifier used to identify objects affected by permissions - * stored in this SimpleObjectPermissionSet. */ -public class SimpleObjectPermissionSet - implements ObjectPermissionSet { +public class SimpleObjectPermissionSet implements ObjectPermissionSet { /** * The set of all permissions currently granted. */ - private Set> permissions = Collections.EMPTY_SET; + private Set permissions = Collections.EMPTY_SET; /** * Creates a new empty SimpleObjectPermissionSet. @@ -62,7 +58,7 @@ public class SimpleObjectPermissionSet * The Set of permissions this SimpleObjectPermissionSet should * contain. */ - public SimpleObjectPermissionSet(Set> permissions) { + public SimpleObjectPermissionSet(Set permissions) { this.permissions = permissions; } @@ -74,21 +70,21 @@ public class SimpleObjectPermissionSet * The Set of permissions this SimpleObjectPermissionSet should * contain. */ - protected void setPermissions(Set> permissions) { + protected void setPermissions(Set permissions) { this.permissions = permissions; } @Override - public Set> getPermissions() { + public Set getPermissions() { return permissions; } @Override public boolean hasPermission(ObjectPermission.Type permission, - IdentifierType identifier) throws GuacamoleException { + String identifier) throws GuacamoleException { - ObjectPermission objectPermission = - new ObjectPermission(permission, identifier); + ObjectPermission objectPermission = + new ObjectPermission(permission, identifier); return permissions.contains(objectPermission); @@ -96,29 +92,29 @@ public class SimpleObjectPermissionSet @Override public void addPermission(ObjectPermission.Type permission, - IdentifierType identifier) throws GuacamoleException { + String identifier) throws GuacamoleException { throw new GuacamoleSecurityException("Permission denied."); } @Override public void removePermission(ObjectPermission.Type permission, - IdentifierType identifier) throws GuacamoleException { + String identifier) throws GuacamoleException { throw new GuacamoleSecurityException("Permission denied."); } @Override - public Collection getAccessibleObjects( + public Collection getAccessibleObjects( Collection permissionTypes, - Collection identifiers) throws GuacamoleException { + Collection identifiers) throws GuacamoleException { - Collection accessibleObjects = new ArrayList(permissions.size()); + Collection accessibleObjects = new ArrayList(permissions.size()); // For each identifier/permission combination - for (IdentifierType identifier : identifiers) { + for (String identifier : identifiers) { for (ObjectPermission.Type permissionType : permissionTypes) { // Add identifier if at least one requested permission is granted - ObjectPermission permission = new ObjectPermission(permissionType, identifier); + ObjectPermission permission = new ObjectPermission(permissionType, identifier); if (permissions.contains(permission)) { accessibleObjects.add(identifier); break; @@ -132,13 +128,13 @@ public class SimpleObjectPermissionSet } @Override - public void addPermissions(Set> permissions) + public void addPermissions(Set permissions) throws GuacamoleException { throw new GuacamoleSecurityException("Permission denied."); } @Override - public void removePermissions(Set> permissions) + public void removePermissions(Set permissions) throws GuacamoleException { throw new GuacamoleSecurityException("Permission denied."); } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUser.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUser.java index 0e75527e5..873c59062 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUser.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUser.java @@ -28,9 +28,7 @@ import java.util.Map; import java.util.Set; import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.net.auth.AbstractUser; -import org.glyptodon.guacamole.net.auth.Connection; import org.glyptodon.guacamole.net.auth.ConnectionGroup; -import org.glyptodon.guacamole.net.auth.User; import org.glyptodon.guacamole.net.auth.permission.ObjectPermission; import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet; import org.glyptodon.guacamole.net.auth.permission.SystemPermissionSet; @@ -46,14 +44,14 @@ public class SimpleUser extends AbstractUser { /** * All connection permissions granted to this user. */ - private final Set> connectionPermissions = - new HashSet>(); + private final Set connectionPermissions = + new HashSet(); /** * All connection group permissions granted to this user. */ - private final Set> connectionGroupPermissions = - new HashSet>(); + private final Set connectionGroupPermissions = + new HashSet(); /** * Creates a completely uninitialized SimpleUser. @@ -73,7 +71,7 @@ public class SimpleUser extends AbstractUser { Collection groups) { // Set username - setUsername(username); + setIdentifier(username); // Add connection permissions for (String identifier : configs.keySet()) { @@ -112,21 +110,21 @@ public class SimpleUser extends AbstractUser { } @Override - public ObjectPermissionSet getConnectionPermissions() + public ObjectPermissionSet getConnectionPermissions() throws GuacamoleException { - return new SimpleObjectPermissionSet(connectionPermissions); + return new SimpleObjectPermissionSet(connectionPermissions); } @Override - public ObjectPermissionSet getConnectionGroupPermissions() + public ObjectPermissionSet getConnectionGroupPermissions() throws GuacamoleException { - return new SimpleObjectPermissionSet(connectionGroupPermissions); + return new SimpleObjectPermissionSet(connectionGroupPermissions); } @Override - public ObjectPermissionSet getUserPermissions() + public ObjectPermissionSet getUserPermissions() throws GuacamoleException { - return new SimpleObjectPermissionSet(); + return new SimpleObjectPermissionSet(); } } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserContext.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserContext.java index 2bb376747..474bc5373 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserContext.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserContext.java @@ -51,7 +51,7 @@ public class SimpleUserContext implements UserContext { * The Directory with access only to the User associated with this * UserContext. */ - private final Directory userDirectory; + private final Directory userDirectory; /** * The ConnectionGroup with access only to those Connections that the User @@ -102,7 +102,7 @@ public class SimpleUserContext implements UserContext { } @Override - public Directory getUserDirectory() + public Directory getUserDirectory() throws GuacamoleException { return userDirectory; } diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserDirectory.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserDirectory.java index de7bd08e8..e44f1897e 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserDirectory.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/simple/SimpleUserDirectory.java @@ -31,7 +31,7 @@ import org.glyptodon.guacamole.net.auth.User; * * @author Michael Jumper */ -public class SimpleUserDirectory extends SimpleDirectory { +public class SimpleUserDirectory extends SimpleDirectory { /** * Creates a new SimpleUserDirectory which provides access to the single @@ -40,7 +40,7 @@ public class SimpleUserDirectory extends SimpleDirectory { * @param user The user to provide access to. */ public SimpleUserDirectory(User user) { - super(Collections.singletonMap(user.getUsername(), user)); + super(Collections.singletonMap(user.getIdentifier(), user)); } } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java index 25e7c87fe..8c1679236 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java @@ -213,19 +213,19 @@ public class TunnelRequestService { UserContext context = session.getUserContext(); // Get connection directory - Directory directory = + Directory directory = context.getRootConnectionGroup().getConnectionDirectory(); // Get authorized connection Connection connection = directory.get(id); if (connection == null) { - logger.info("Connection \"{}\" does not exist for user \"{}\".", id, context.self().getUsername()); + logger.info("Connection \"{}\" does not exist for user \"{}\".", id, context.self().getIdentifier()); throw new GuacamoleSecurityException("Requested connection is not authorized."); } // Connect socket socket = connection.connect(info); - logger.info("User \"{}\" successfully connected to \"{}\".", context.self().getUsername(), id); + logger.info("User \"{}\" successfully connected to \"{}\".", context.self().getIdentifier(), id); break; } @@ -235,19 +235,19 @@ public class TunnelRequestService { UserContext context = session.getUserContext(); // Get connection group directory - Directory directory = + Directory directory = context.getRootConnectionGroup().getConnectionGroupDirectory(); // Get authorized connection group ConnectionGroup group = directory.get(id); if (group == null) { - logger.info("Connection group \"{}\" does not exist for user \"{}\".", id, context.self().getUsername()); + logger.info("Connection group \"{}\" does not exist for user \"{}\".", id, context.self().getIdentifier()); throw new GuacamoleSecurityException("Requested connection group is not authorized."); } // Connect socket socket = group.connect(info); - logger.info("User \"{}\" successfully connected to group \"{}\".", context.self().getUsername(), id); + logger.info("User \"{}\" successfully connected to group \"{}\".", context.self().getIdentifier(), id); break; } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/ObjectRetrievalService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/ObjectRetrievalService.java index 27cb6d9ef..fb7356604 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/ObjectRetrievalService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/ObjectRetrievalService.java @@ -59,7 +59,7 @@ public class ObjectRetrievalService { String identifier) throws GuacamoleException { // Get user directory - Directory directory = userContext.getUserDirectory(); + Directory directory = userContext.getUserDirectory(); // Pull specified user User user = directory.get(identifier); @@ -91,7 +91,7 @@ public class ObjectRetrievalService { // Get root directory ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory directory = rootGroup.getConnectionDirectory(); + Directory directory = rootGroup.getConnectionDirectory(); // Pull specified connection Connection connection = directory.get(identifier); @@ -132,7 +132,7 @@ public class ObjectRetrievalService { return rootGroup; // Pull specified connection group otherwise - Directory directory = rootGroup.getConnectionGroupDirectory(); + Directory directory = rootGroup.getConnectionGroupDirectory(); ConnectionGroup connectionGroup = directory.get(identifier); if (connectionGroup == null) diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/auth/TokenRESTService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/auth/TokenRESTService.java index e46b54d1a..3aac87e65 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/auth/TokenRESTService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/auth/TokenRESTService.java @@ -188,8 +188,8 @@ public class TokenRESTService { tokenSessionMap.put(authToken, new GuacamoleSession(credentials, userContext)); } - logger.debug("Login was successful for user \"{}\".", userContext.self().getUsername()); - return new APIAuthToken(authToken, userContext.self().getUsername()); + logger.debug("Login was successful for user \"{}\".", userContext.self().getIdentifier()); + return new APIAuthToken(authToken, userContext.self().getIdentifier()); } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java index 0ec05e3f0..5e1eb7368 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java @@ -139,7 +139,7 @@ public class ConnectionRESTService { // Retrieve permission sets SystemPermissionSet systemPermissions = self.getSystemPermissions(); - ObjectPermissionSet connectionPermissions = self.getConnectionPermissions(); + ObjectPermissionSet connectionPermissions = self.getConnectionPermissions(); // Deny access if adminstrative or update permission is missing if (!systemPermissions.hasPermission(SystemPermission.Type.ADMINISTER) @@ -211,7 +211,7 @@ public class ConnectionRESTService { // Get the connection directory ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory connectionDirectory = + Directory connectionDirectory = rootGroup.getConnectionDirectory(); // Delete the specified connection @@ -252,7 +252,7 @@ public class ConnectionRESTService { ConnectionGroup parentConnectionGroup = retrievalService.retrieveConnectionGroup(userContext, parentID); // Add the new connection - Directory connectionDirectory = parentConnectionGroup.getConnectionDirectory(); + Directory connectionDirectory = parentConnectionGroup.getConnectionDirectory(); connectionDirectory.add(new APIConnectionWrapper(connection)); // Return the new connection identifier @@ -292,7 +292,7 @@ public class ConnectionRESTService { // Get the connection directory ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory connectionDirectory = + Directory connectionDirectory = rootGroup.getConnectionDirectory(); // Retrieve connection to update diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/APIConnectionGroupWrapper.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/APIConnectionGroupWrapper.java index c38b22977..24128bb56 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/APIConnectionGroupWrapper.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/APIConnectionGroupWrapper.java @@ -92,12 +92,12 @@ public class APIConnectionGroupWrapper implements ConnectionGroup { } @Override - public Directory getConnectionDirectory() throws GuacamoleException { + public Directory getConnectionDirectory() throws GuacamoleException { throw new UnsupportedOperationException("Operation not supported."); } @Override - public Directory getConnectionGroupDirectory() throws GuacamoleException { + public Directory getConnectionGroupDirectory() throws GuacamoleException { throw new UnsupportedOperationException("Operation not supported."); } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java index 651ddbd85..22430bf84 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java @@ -104,7 +104,7 @@ public class ConnectionGroupRESTService { List permissions) throws GuacamoleException { // Retrieve connection permissions - ObjectPermissionSet connectionPermissions = user.getConnectionPermissions(); + ObjectPermissionSet connectionPermissions = user.getConnectionPermissions(); // Determine whether user has at least one of the given permissions for (ObjectPermission.Type permission : permissions) { @@ -138,7 +138,7 @@ public class ConnectionGroupRESTService { List permissions) throws GuacamoleException { // Retrieve connection group permissions - ObjectPermissionSet connectionGroupPermissions = user.getConnectionGroupPermissions(); + ObjectPermissionSet connectionGroupPermissions = user.getConnectionGroupPermissions(); // Determine whether user has at least one of the given permissions for (ObjectPermission.Type permission : permissions) { @@ -211,7 +211,7 @@ public class ConnectionGroupRESTService { // Query all child connections Collection apiConnections = new ArrayList(); - Directory connectionDirectory = connectionGroup.getConnectionDirectory(); + Directory connectionDirectory = connectionGroup.getConnectionDirectory(); for (String childIdentifier : connectionDirectory.getIdentifiers()) { @@ -231,7 +231,7 @@ public class ConnectionGroupRESTService { // Query all child connection groups Collection apiConnectionGroups = new ArrayList(); - Directory groupDirectory = connectionGroup.getConnectionGroupDirectory(); + Directory groupDirectory = connectionGroup.getConnectionGroupDirectory(); for (String childIdentifier : groupDirectory.getIdentifiers()) { @@ -356,7 +356,7 @@ public class ConnectionGroupRESTService { // Get the connection group directory ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory connectionGroupDirectory = + Directory connectionGroupDirectory = rootGroup.getConnectionGroupDirectory(); // Delete the connection group @@ -399,7 +399,7 @@ public class ConnectionGroupRESTService { ConnectionGroup parentConnectionGroup = retrievalService.retrieveConnectionGroup(userContext, parentID); // Add the new connection group - Directory connectionGroupDirectory = parentConnectionGroup.getConnectionGroupDirectory(); + Directory connectionGroupDirectory = parentConnectionGroup.getConnectionGroupDirectory(); connectionGroupDirectory.add(new APIConnectionGroupWrapper(connectionGroup)); // Return the new connection group identifier @@ -440,7 +440,7 @@ public class ConnectionGroupRESTService { // Get the connection group directory ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory connectionGroupDirectory = + Directory connectionGroupDirectory = rootGroup.getConnectionGroupDirectory(); // Retrieve connection group to update diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/permission/APIPermissionSet.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/permission/APIPermissionSet.java index 1d4a14774..697641086 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/permission/APIPermissionSet.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/permission/APIPermissionSet.java @@ -114,10 +114,10 @@ public class APIPermissionSet { * ObjectPermissionSet. */ private void addObjectPermissions(Map> permissions, - ObjectPermissionSet permSet) throws GuacamoleException { + ObjectPermissionSet permSet) throws GuacamoleException { // Add all provided object permissions - for (ObjectPermission permission : permSet.getPermissions()) { + for (ObjectPermission permission : permSet.getPermissions()) { // Get associated set of permissions String identifier = permission.getObjectIdentifier(); diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUser.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUser.java index 2efcb6992..6351f2942 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUser.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUser.java @@ -55,7 +55,7 @@ public class APIUser { * @param user The User to construct the APIUser from. */ public APIUser(User user) { - this.username = user.getUsername(); + this.username = user.getIdentifier(); this.password = user.getPassword(); } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUserWrapper.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUserWrapper.java index d6032bbd2..52e5e707d 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUserWrapper.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/APIUserWrapper.java @@ -52,12 +52,12 @@ public class APIUserWrapper implements User { } @Override - public String getUsername() { + public String getIdentifier() { return apiUser.getUsername(); } @Override - public void setUsername(String username) { + public void setIdentifier(String username) { apiUser.setUsername(username); } @@ -78,19 +78,19 @@ public class APIUserWrapper implements User { } @Override - public ObjectPermissionSet getConnectionPermissions() + public ObjectPermissionSet getConnectionPermissions() throws GuacamoleException { throw new GuacamoleUnsupportedException("APIUserWrapper does not provide permission access."); } @Override - public ObjectPermissionSet getConnectionGroupPermissions() + public ObjectPermissionSet getConnectionGroupPermissions() throws GuacamoleException { throw new GuacamoleUnsupportedException("APIUserWrapper does not provide permission access."); } @Override - public ObjectPermissionSet getUserPermissions() + public ObjectPermissionSet getUserPermissions() throws GuacamoleException { throw new GuacamoleUnsupportedException("APIUserWrapper does not provide permission access."); } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/UserRESTService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/UserRESTService.java index b9345ce45..d8fc5f15a 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/UserRESTService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/user/UserRESTService.java @@ -151,12 +151,12 @@ public class UserRESTService { boolean isAdmin = systemPermissions.hasPermission(SystemPermission.Type.ADMINISTER); // Get the directory - Directory userDirectory = userContext.getUserDirectory(); + Directory userDirectory = userContext.getUserDirectory(); // Filter users, if requested Collection userIdentifiers = userDirectory.getIdentifiers(); if (!isAdmin && permissions != null) { - ObjectPermissionSet userPermissions = self.getUserPermissions(); + ObjectPermissionSet userPermissions = self.getUserPermissions(); userIdentifiers = userPermissions.getAccessibleObjects(permissions, userIdentifiers); } @@ -217,7 +217,7 @@ public class UserRESTService { UserContext userContext = authenticationService.getUserContext(authToken); // Get the directory - Directory userDirectory = userContext.getUserDirectory(); + Directory userDirectory = userContext.getUserDirectory(); // Randomly set the password if it wasn't provided if (user.getPassword() == null) @@ -256,7 +256,7 @@ public class UserRESTService { UserContext userContext = authenticationService.getUserContext(authToken); // Get the directory - Directory userDirectory = userContext.getUserDirectory(); + Directory userDirectory = userContext.getUserDirectory(); // Validate data and path are sane if (!user.getUsername().equals(username)) @@ -298,7 +298,7 @@ public class UserRESTService { UserContext userContext = authenticationService.getUserContext(authToken); // Get the directory - Directory userDirectory = userContext.getUserDirectory(); + Directory userDirectory = userContext.getUserDirectory(); // Get the user User existingUser = userDirectory.get(username); @@ -338,7 +338,7 @@ public class UserRESTService { User user; // If username is own username, just use self - might not have query permissions - if (userContext.self().getUsername().equals(username)) + if (userContext.self().getIdentifier().equals(username)) user = userContext.self(); // If not self, query corresponding user from directory @@ -430,10 +430,10 @@ public class UserRESTService { throw new GuacamoleResourceNotFoundException("No such user: \"" + username + "\""); // Permission patches for all types of permissions - PermissionSetPatch> connectionPermissionPatch = new PermissionSetPatch>(); - PermissionSetPatch> connectionGroupPermissionPatch = new PermissionSetPatch>(); - PermissionSetPatch> userPermissionPatch = new PermissionSetPatch>(); - PermissionSetPatch systemPermissionPatch = new PermissionSetPatch(); + PermissionSetPatch connectionPermissionPatch = new PermissionSetPatch(); + PermissionSetPatch connectionGroupPermissionPatch = new PermissionSetPatch(); + PermissionSetPatch userPermissionPatch = new PermissionSetPatch(); + PermissionSetPatch systemPermissionPatch = new PermissionSetPatch(); // Apply all patch operations individually for (APIPatch patch : patches) { @@ -448,7 +448,7 @@ public class UserRESTService { ObjectPermission.Type type = ObjectPermission.Type.valueOf(patch.getValue()); // Create and update corresponding permission - ObjectPermission permission = new ObjectPermission(type, identifier); + ObjectPermission permission = new ObjectPermission(type, identifier); updatePermissionSet(patch.getOp(), connectionPermissionPatch, permission); } @@ -461,7 +461,7 @@ public class UserRESTService { ObjectPermission.Type type = ObjectPermission.Type.valueOf(patch.getValue()); // Create and update corresponding permission - ObjectPermission permission = new ObjectPermission(type, identifier); + ObjectPermission permission = new ObjectPermission(type, identifier); updatePermissionSet(patch.getOp(), connectionGroupPermissionPatch, permission); } @@ -474,7 +474,7 @@ public class UserRESTService { ObjectPermission.Type type = ObjectPermission.Type.valueOf(patch.getValue()); // Create and update corresponding permission - ObjectPermission permission = new ObjectPermission(type, identifier); + ObjectPermission permission = new ObjectPermission(type, identifier); updatePermissionSet(patch.getOp(), userPermissionPatch, permission); }