From b23dcf83cac852aaa61b3d4b34e7da612fc449c4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 20 Aug 2016 13:54:20 -0700 Subject: [PATCH] GUACAMOLE-77: Distinguish within REST between the user's identity/permissions and actual existing user objects. --- .../rest/session/UserContextResource.java | 28 ++++++++++++++++ .../rest/user/UserDirectoryResource.java | 33 ------------------- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/session/UserContextResource.java b/guacamole/src/main/java/org/apache/guacamole/rest/session/UserContextResource.java index 31bb002dc..39be48950 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/session/UserContextResource.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/session/UserContextResource.java @@ -38,6 +38,8 @@ import org.apache.guacamole.net.auth.UserContext; import org.apache.guacamole.rest.activeconnection.APIActiveConnection; import org.apache.guacamole.rest.connection.APIConnection; import org.apache.guacamole.rest.connectiongroup.APIConnectionGroup; +import org.apache.guacamole.rest.directory.DirectoryObjectResource; +import org.apache.guacamole.rest.directory.DirectoryObjectResourceFactory; import org.apache.guacamole.rest.history.HistoryResource; import org.apache.guacamole.rest.schema.SchemaResource; import org.apache.guacamole.rest.sharingprofile.APISharingProfile; @@ -57,6 +59,12 @@ public class UserContextResource { */ private final UserContext userContext; + /** + * Factory for creating DirectoryObjectResources which expose a given User. + */ + @Inject + private DirectoryObjectResourceFactory userResourceFactory; + /** * Factory for creating DirectoryResources which expose a given * ActiveConnection Directory. @@ -109,6 +117,26 @@ public class UserContextResource { this.userContext = userContext; } + /** + * Returns a new resource which represents the User whose access rights + * control the operations of the UserContext exposed by this + * UserContextResource. + * + * @return + * A new resource which represents the User whose access rights + * control the operations of the UserContext exposed by this + * UserContextResource. + * + * @throws GuacamoleException + * If an error occurs while retrieving the User. + */ + @Path("self") + public DirectoryObjectResource getSelfResource() + throws GuacamoleException { + return userResourceFactory.create(userContext, + userContext.getUserDirectory(), userContext.self()); + } + /** * Returns a new resource which represents the ActiveConnection Directory * contained within the UserContext exposed by this UserContextResource. diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/user/UserDirectoryResource.java b/guacamole/src/main/java/org/apache/guacamole/rest/user/UserDirectoryResource.java index 04218f1b9..c2515caf9 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/user/UserDirectoryResource.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/user/UserDirectoryResource.java @@ -29,7 +29,6 @@ import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.net.auth.User; import org.apache.guacamole.net.auth.Directory; import org.apache.guacamole.net.auth.UserContext; -import org.apache.guacamole.rest.directory.DirectoryObjectResource; import org.apache.guacamole.rest.directory.DirectoryObjectResourceFactory; import org.apache.guacamole.rest.directory.DirectoryObjectTranslator; import org.apache.guacamole.rest.directory.DirectoryResource; @@ -44,23 +43,6 @@ import org.apache.guacamole.rest.directory.DirectoryResource; @Consumes(MediaType.APPLICATION_JSON) public class UserDirectoryResource extends DirectoryResource { - /** - * The UserContext associated with the Directory which contains the - * User exposed by this resource. - */ - private final UserContext userContext; - - /** - * The Directory exposed by this resource. - */ - private final Directory directory; - - /** - * A factory which can be used to create instances of resources representing - * Users. - */ - private final DirectoryObjectResourceFactory resourceFactory; - /** * Creates a new UserDirectoryResource which exposes the operations and * subresources available for the given User Directory. @@ -85,9 +67,6 @@ public class UserDirectoryResource extends DirectoryResource { DirectoryObjectTranslator translator, DirectoryObjectResourceFactory resourceFactory) { super(userContext, directory, translator, resourceFactory); - this.userContext = userContext; - this.directory = directory; - this.resourceFactory = resourceFactory; } @Override @@ -101,16 +80,4 @@ public class UserDirectoryResource extends DirectoryResource { } - @Override - public DirectoryObjectResource - getObjectResource(String identifier) throws GuacamoleException { - - // If username is own username, just use self - might not have query permissions - if (userContext.self().getIdentifier().equals(identifier)) - return resourceFactory.create(userContext, directory, userContext.self()); - - return super.getObjectResource(identifier); - - } - }