GUACAMOLE-289: Isolate extension REST services to ".../api/ext/" and ".../api/session/ext".
Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/aa261410 Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/aa261410 Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/aa261410 Branch: refs/heads/master Commit: aa261410f4a457da99fcf49baed605697a853729 Parents: 4455cbc Author: Michael Jumper <[email protected]> Authored: Sat Apr 29 13:38:52 2017 -0700 Committer: Michael Jumper <[email protected]> Committed: Sat Apr 29 13:38:57 2017 -0700 ---------------------------------------------------------------------- .../apache/guacamole/net/auth/UserContext.java | 5 +-- .../guacamole/rest/session/SessionResource.java | 35 ++++++++++++++++++++ .../rest/session/UserContextResource.java | 26 --------------- 3 files changed, 38 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/aa261410/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/UserContext.java ---------------------------------------------------------------------- diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/UserContext.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/UserContext.java index 7c48337..10fd6bf 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/UserContext.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/UserContext.java @@ -43,8 +43,9 @@ public interface UserContext { * properly annotated with JSR-311 annotations, and may serve as the root * resource for any number of extension-specific REST resources related to * an authenticated user's session. The returned resource is ultimately - * exposed at ".../api/session/data/IDENTIFIER/ext/", where IDENTIFIER is - * the identifier of the AuthenticationProvider. + * exposed at ".../api/session/ext/IDENTIFIER/", where IDENTIFIER is the + * identifier of the AuthenticationProvider associated with this + * UserContext. * * REST resources which are NOT related to an authenticated user's session * should instead be returned from AuthenticationProvider.getResource(). http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/aa261410/guacamole/src/main/java/org/apache/guacamole/rest/session/SessionResource.java ---------------------------------------------------------------------- diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/session/SessionResource.java b/guacamole/src/main/java/org/apache/guacamole/rest/session/SessionResource.java index 568df4f..606e78b 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/session/SessionResource.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/session/SessionResource.java @@ -28,6 +28,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.GuacamoleResourceNotFoundException; import org.apache.guacamole.GuacamoleSession; import org.apache.guacamole.net.auth.UserContext; import org.apache.guacamole.rest.tunnel.TunnelCollectionResource; @@ -102,6 +103,40 @@ public class SessionResource { } /** + * Returns the arbitrary REST resource exposed by the UserContext + * associated with the AuthenticationProvider having the given identifier. + * + * @param authProviderIdentifier + * The unique identifier of the AuthenticationProvider associated with + * the UserContext whose arbitrary REST service is being retrieved. + * + * @return + * The arbitrary REST resource exposed by the UserContext exposed by + * this UserContextresource. + * + * @throws GuacamoleException + * If no such resource could be found, or if an error occurs while + * retrieving that resource. + */ + @Path("ext/{dataSource}") + public Object getExtensionResource( + @PathParam("dataSource") String authProviderIdentifier) + throws GuacamoleException { + + // Pull UserContext defined by the given auth provider identifier + UserContext userContext = session.getUserContext(authProviderIdentifier); + + // Pull resource from user context + Object resource = userContext.getResource(); + if (resource != null) + return resource; + + // UserContext-specific resource could not be found + throw new GuacamoleResourceNotFoundException("No such resource."); + + } + + /** * Retrieves a resource representing all tunnels associated with session * exposed by this SessionResource. * http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/aa261410/guacamole/src/main/java/org/apache/guacamole/rest/session/UserContextResource.java ---------------------------------------------------------------------- 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 b2e5eaa..29b443f 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 @@ -29,7 +29,6 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.apache.guacamole.GuacamoleException; -import org.apache.guacamole.GuacamoleResourceNotFoundException; import org.apache.guacamole.net.auth.ActiveConnection; import org.apache.guacamole.net.auth.Connection; import org.apache.guacamole.net.auth.ConnectionGroup; @@ -254,29 +253,4 @@ public class UserContextResource { return new SchemaResource(userContext); } - /** - * Returns the arbitrary REST resource exposed by the UserContext exposed - * by this UserContextResource. - * - * @return - * The arbitrary REST resource exposed by the UserContext exposed by - * this UserContextresource. - * - * @throws GuacamoleException - * If no such resource could be found, or if an error occurs while - * retrieving that resource. - */ - @Path("ext") - public Object getExtensionResource() throws GuacamoleException { - - // Pull resource from user context - Object resource = userContext.getResource(); - if (resource != null) - return resource; - - // UserContext-specific resource could not be found - throw new GuacamoleResourceNotFoundException("No such resource."); - - } - }
