mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	GUAC-800: Update REST services to allow read/write of attributes on users, connections, and groups.
This commit is contained in:
		| @@ -24,6 +24,7 @@ package org.glyptodon.guacamole.net.basic.rest.connection; | |||||||
|  |  | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import org.codehaus.jackson.annotate.JsonIgnoreProperties; | import org.codehaus.jackson.annotate.JsonIgnoreProperties; | ||||||
|  | import org.codehaus.jackson.map.annotate.JsonSerialize; | ||||||
| import org.glyptodon.guacamole.GuacamoleException; | import org.glyptodon.guacamole.GuacamoleException; | ||||||
| import org.glyptodon.guacamole.net.auth.Connection; | import org.glyptodon.guacamole.net.auth.Connection; | ||||||
| import org.glyptodon.guacamole.protocol.GuacamoleConfiguration; | import org.glyptodon.guacamole.protocol.GuacamoleConfiguration; | ||||||
| @@ -34,6 +35,7 @@ import org.glyptodon.guacamole.protocol.GuacamoleConfiguration; | |||||||
|  * @author James Muehlner |  * @author James Muehlner | ||||||
|  */ |  */ | ||||||
| @JsonIgnoreProperties(ignoreUnknown = true) | @JsonIgnoreProperties(ignoreUnknown = true) | ||||||
|  | @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) | ||||||
| public class APIConnection { | public class APIConnection { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -61,6 +63,11 @@ public class APIConnection { | |||||||
|      */ |      */ | ||||||
|     private Map<String, String> parameters; |     private Map<String, String> parameters; | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Map of all associated attributes by attribute identifier. | ||||||
|  |      */ | ||||||
|  |     private Map<String, String> attributes; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * The count of currently active connections using this connection. |      * The count of currently active connections using this connection. | ||||||
|      */ |      */ | ||||||
| @@ -92,6 +99,9 @@ public class APIConnection { | |||||||
|         GuacamoleConfiguration configuration = connection.getConfiguration(); |         GuacamoleConfiguration configuration = connection.getConfiguration(); | ||||||
|         this.protocol = configuration.getProtocol(); |         this.protocol = configuration.getProtocol(); | ||||||
|  |  | ||||||
|  |         // Associate any attributes | ||||||
|  |         this.attributes = connection.getAttributes(); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -195,5 +205,29 @@ public class APIConnection { | |||||||
|     public void setActiveUsers(int activeConnections) { |     public void setActiveUsers(int activeConnections) { | ||||||
|         this.activeConnections = activeConnections; |         this.activeConnections = activeConnections; | ||||||
|     } |     } | ||||||
|      |  | ||||||
|  |     /** | ||||||
|  |      * Returns a map of all attributes associated with this connection. Each | ||||||
|  |      * entry key is the attribute identifier, while each value is the attribute | ||||||
|  |      * value itself. | ||||||
|  |      * | ||||||
|  |      * @return | ||||||
|  |      *     The attribute map for this connection. | ||||||
|  |      */ | ||||||
|  |     public Map<String, String> getAttributes() { | ||||||
|  |         return attributes; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Sets the map of all attributes associated with this connection. Each | ||||||
|  |      * entry key is the attribute identifier, while each value is the attribute | ||||||
|  |      * value itself. | ||||||
|  |      * | ||||||
|  |      * @param attributes | ||||||
|  |      *     The attribute map for this connection. | ||||||
|  |      */ | ||||||
|  |     public void setAttributes(Map<String, String> attributes) { | ||||||
|  |         this.attributes = attributes; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -115,6 +115,16 @@ public class APIConnectionWrapper implements Connection { | |||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Map<String, String> getAttributes() { | ||||||
|  |         return apiConnection.getAttributes(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void setAttributes(Map<String, String> attributes) { | ||||||
|  |         apiConnection.setAttributes(attributes); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public GuacamoleTunnel connect(GuacamoleClientInformation info) throws GuacamoleException { |     public GuacamoleTunnel connect(GuacamoleClientInformation info) throws GuacamoleException { | ||||||
|         throw new UnsupportedOperationException("Operation not supported."); |         throw new UnsupportedOperationException("Operation not supported."); | ||||||
|   | |||||||
| @@ -305,6 +305,7 @@ public class ConnectionRESTService { | |||||||
|         existingConnection.setConfiguration(config); |         existingConnection.setConfiguration(config); | ||||||
|         existingConnection.setParentIdentifier(connection.getParentIdentifier()); |         existingConnection.setParentIdentifier(connection.getParentIdentifier()); | ||||||
|         existingConnection.setName(connection.getName()); |         existingConnection.setName(connection.getName()); | ||||||
|  |         existingConnection.setAttributes(connection.getAttributes()); | ||||||
|         connectionDirectory.update(existingConnection); |         connectionDirectory.update(existingConnection); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -23,7 +23,9 @@ | |||||||
| package org.glyptodon.guacamole.net.basic.rest.connectiongroup; | package org.glyptodon.guacamole.net.basic.rest.connectiongroup; | ||||||
|  |  | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
|  | import java.util.Map; | ||||||
| import org.codehaus.jackson.annotate.JsonIgnoreProperties; | import org.codehaus.jackson.annotate.JsonIgnoreProperties; | ||||||
|  | import org.codehaus.jackson.map.annotate.JsonSerialize; | ||||||
| import org.glyptodon.guacamole.net.auth.ConnectionGroup; | import org.glyptodon.guacamole.net.auth.ConnectionGroup; | ||||||
| import org.glyptodon.guacamole.net.auth.ConnectionGroup.Type; | import org.glyptodon.guacamole.net.auth.ConnectionGroup.Type; | ||||||
| import org.glyptodon.guacamole.net.basic.rest.connection.APIConnection; | import org.glyptodon.guacamole.net.basic.rest.connection.APIConnection; | ||||||
| @@ -34,6 +36,7 @@ import org.glyptodon.guacamole.net.basic.rest.connection.APIConnection; | |||||||
|  * @author James Muehlner |  * @author James Muehlner | ||||||
|  */ |  */ | ||||||
| @JsonIgnoreProperties(ignoreUnknown = true) | @JsonIgnoreProperties(ignoreUnknown = true) | ||||||
|  | @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) | ||||||
| public class APIConnectionGroup { | public class APIConnectionGroup { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -78,6 +81,11 @@ public class APIConnectionGroup { | |||||||
|      */ |      */ | ||||||
|     private Collection<APIConnection> childConnections; |     private Collection<APIConnection> childConnections; | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Map of all associated attributes by attribute identifier. | ||||||
|  |      */ | ||||||
|  |     private Map<String, String> attributes; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Create an empty APIConnectionGroup. |      * Create an empty APIConnectionGroup. | ||||||
|      */ |      */ | ||||||
| @@ -91,13 +99,16 @@ public class APIConnectionGroup { | |||||||
|      */ |      */ | ||||||
|     public APIConnectionGroup(ConnectionGroup connectionGroup) { |     public APIConnectionGroup(ConnectionGroup connectionGroup) { | ||||||
|  |  | ||||||
|  |         // Set connection group information | ||||||
|         this.identifier = connectionGroup.getIdentifier(); |         this.identifier = connectionGroup.getIdentifier(); | ||||||
|         this.parentIdentifier = connectionGroup.getParentIdentifier(); |         this.parentIdentifier = connectionGroup.getParentIdentifier(); | ||||||
|  |  | ||||||
|         this.name = connectionGroup.getName(); |         this.name = connectionGroup.getName(); | ||||||
|         this.type = connectionGroup.getType(); |         this.type = connectionGroup.getType(); | ||||||
|         this.activeConnections = connectionGroup.getActiveConnections(); |         this.activeConnections = connectionGroup.getActiveConnections(); | ||||||
|  |  | ||||||
|  |         // Associate any attributes | ||||||
|  |         this.attributes = connectionGroup.getAttributes(); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -233,5 +244,29 @@ public class APIConnectionGroup { | |||||||
|     public void setActiveUsers(int activeConnections) { |     public void setActiveUsers(int activeConnections) { | ||||||
|         this.activeConnections = activeConnections; |         this.activeConnections = activeConnections; | ||||||
|     } |     } | ||||||
|      |  | ||||||
|  |     /** | ||||||
|  |      * Returns a map of all attributes associated with this connection group. | ||||||
|  |      * Each entry key is the attribute identifier, while each value is the | ||||||
|  |      * attribute value itself. | ||||||
|  |      * | ||||||
|  |      * @return | ||||||
|  |      *     The attribute map for this connection group. | ||||||
|  |      */ | ||||||
|  |     public Map<String, String> getAttributes() { | ||||||
|  |         return attributes; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Sets the map of all attributes associated with this connection group. | ||||||
|  |      * Each entry key is the attribute identifier, while each value is the | ||||||
|  |      * attribute value itself. | ||||||
|  |      * | ||||||
|  |      * @param attributes | ||||||
|  |      *     The attribute map for this connection group. | ||||||
|  |      */ | ||||||
|  |     public void setAttributes(Map<String, String> attributes) { | ||||||
|  |         this.attributes = attributes; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ | |||||||
|  |  | ||||||
| package org.glyptodon.guacamole.net.basic.rest.connectiongroup; | package org.glyptodon.guacamole.net.basic.rest.connectiongroup; | ||||||
|  |  | ||||||
|  | import java.util.Map; | ||||||
| import java.util.Set; | import java.util.Set; | ||||||
| import org.glyptodon.guacamole.GuacamoleException; | import org.glyptodon.guacamole.GuacamoleException; | ||||||
| import org.glyptodon.guacamole.net.GuacamoleTunnel; | import org.glyptodon.guacamole.net.GuacamoleTunnel; | ||||||
| @@ -105,6 +106,16 @@ public class APIConnectionGroupWrapper implements ConnectionGroup { | |||||||
|         throw new UnsupportedOperationException("Operation not supported."); |         throw new UnsupportedOperationException("Operation not supported."); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Map<String, String> getAttributes() { | ||||||
|  |         return apiConnectionGroup.getAttributes(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void setAttributes(Map<String, String> attributes) { | ||||||
|  |         apiConnectionGroup.setAttributes(attributes); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public GuacamoleTunnel connect(GuacamoleClientInformation info) throws GuacamoleException { |     public GuacamoleTunnel connect(GuacamoleClientInformation info) throws GuacamoleException { | ||||||
|         throw new UnsupportedOperationException("Operation not supported."); |         throw new UnsupportedOperationException("Operation not supported."); | ||||||
|   | |||||||
| @@ -253,6 +253,7 @@ public class ConnectionGroupRESTService { | |||||||
|         existingConnectionGroup.setName(connectionGroup.getName()); |         existingConnectionGroup.setName(connectionGroup.getName()); | ||||||
|         existingConnectionGroup.setParentIdentifier(connectionGroup.getParentIdentifier()); |         existingConnectionGroup.setParentIdentifier(connectionGroup.getParentIdentifier()); | ||||||
|         existingConnectionGroup.setType(connectionGroup.getType()); |         existingConnectionGroup.setType(connectionGroup.getType()); | ||||||
|  |         existingConnectionGroup.setAttributes(connectionGroup.getAttributes()); | ||||||
|         connectionGroupDirectory.update(existingConnectionGroup); |         connectionGroupDirectory.update(existingConnectionGroup); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ | |||||||
|  |  | ||||||
| package org.glyptodon.guacamole.net.basic.rest.user; | package org.glyptodon.guacamole.net.basic.rest.user; | ||||||
|  |  | ||||||
|  | import java.util.Map; | ||||||
| import org.codehaus.jackson.annotate.JsonIgnoreProperties; | import org.codehaus.jackson.annotate.JsonIgnoreProperties; | ||||||
| import org.codehaus.jackson.map.annotate.JsonSerialize; | import org.codehaus.jackson.map.annotate.JsonSerialize; | ||||||
| import org.glyptodon.guacamole.net.auth.User; | import org.glyptodon.guacamole.net.auth.User; | ||||||
| @@ -45,6 +46,11 @@ public class APIUser { | |||||||
|      */ |      */ | ||||||
|     private String password; |     private String password; | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Map of all associated attributes by attribute identifier. | ||||||
|  |      */ | ||||||
|  |     private Map<String, String> attributes; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Construct a new empty APIUser. |      * Construct a new empty APIUser. | ||||||
|      */ |      */ | ||||||
| @@ -55,8 +61,14 @@ public class APIUser { | |||||||
|      * @param user The User to construct the APIUser from. |      * @param user The User to construct the APIUser from. | ||||||
|      */ |      */ | ||||||
|     public APIUser(User user) { |     public APIUser(User user) { | ||||||
|  |  | ||||||
|  |         // Set user information | ||||||
|         this.username = user.getIdentifier(); |         this.username = user.getIdentifier(); | ||||||
|         this.password = user.getPassword(); |         this.password = user.getPassword(); | ||||||
|  |  | ||||||
|  |         // Associate any attributes | ||||||
|  |         this.attributes = user.getAttributes(); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -91,4 +103,28 @@ public class APIUser { | |||||||
|         this.password = password; |         this.password = password; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Returns a map of all attributes associated with this user. Each entry | ||||||
|  |      * key is the attribute identifier, while each value is the attribute | ||||||
|  |      * value itself. | ||||||
|  |      * | ||||||
|  |      * @return | ||||||
|  |      *     The attribute map for this user. | ||||||
|  |      */ | ||||||
|  |     public Map<String, String> getAttributes() { | ||||||
|  |         return attributes; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Sets the map of all attributes associated with this user. Each entry key | ||||||
|  |      * is the attribute identifier, while each value is the attribute value | ||||||
|  |      * itself. | ||||||
|  |      * | ||||||
|  |      * @param attributes | ||||||
|  |      *     The attribute map for this user. | ||||||
|  |      */ | ||||||
|  |     public void setAttributes(Map<String, String> attributes) { | ||||||
|  |         this.attributes = attributes; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ | |||||||
|  |  | ||||||
| package org.glyptodon.guacamole.net.basic.rest.user; | package org.glyptodon.guacamole.net.basic.rest.user; | ||||||
|  |  | ||||||
|  | import java.util.Map; | ||||||
| import org.glyptodon.guacamole.GuacamoleException; | import org.glyptodon.guacamole.GuacamoleException; | ||||||
| import org.glyptodon.guacamole.GuacamoleUnsupportedException; | import org.glyptodon.guacamole.GuacamoleUnsupportedException; | ||||||
| import org.glyptodon.guacamole.net.auth.User; | import org.glyptodon.guacamole.net.auth.User; | ||||||
| @@ -71,6 +72,16 @@ public class APIUserWrapper implements User { | |||||||
|         apiUser.setPassword(password); |         apiUser.setPassword(password); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Map<String, String> getAttributes() { | ||||||
|  |         return apiUser.getAttributes(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void setAttributes(Map<String, String> attributes) { | ||||||
|  |         apiUser.setAttributes(attributes); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public SystemPermissionSet getSystemPermissions() |     public SystemPermissionSet getSystemPermissions() | ||||||
|             throws GuacamoleException { |             throws GuacamoleException { | ||||||
|   | |||||||
| @@ -291,6 +291,9 @@ public class UserRESTService { | |||||||
|         if (user.getPassword() != null) |         if (user.getPassword() != null) | ||||||
|             existingUser.setPassword(user.getPassword()); |             existingUser.setPassword(user.getPassword()); | ||||||
|  |  | ||||||
|  |         // Update user attributes | ||||||
|  |         existingUser.setAttributes(user.getAttributes()); | ||||||
|  |  | ||||||
|         // Update the user |         // Update the user | ||||||
|         userDirectory.update(existingUser); |         userDirectory.update(existingUser); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -79,7 +79,16 @@ angular.module('rest').factory('Connection', [function defineConnection() { | |||||||
|          * @type Object.<String, String> |          * @type Object.<String, String> | ||||||
|          */ |          */ | ||||||
|         this.parameters = template.parameters; |         this.parameters = template.parameters; | ||||||
|          |  | ||||||
|  |         /** | ||||||
|  |          * Arbitrary name/value pairs which further describe this connection. | ||||||
|  |          * The semantics and validity of these attributes are dictated by the | ||||||
|  |          * extension which defines them. | ||||||
|  |          * | ||||||
|  |          * @type Object.<String, String> | ||||||
|  |          */ | ||||||
|  |         this.attributes = {}; | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * The count of currently active connections using this connection. |          * The count of currently active connections using this connection. | ||||||
|          * This field will be returned from the REST API during a get |          * This field will be returned from the REST API during a get | ||||||
|   | |||||||
| @@ -91,6 +91,15 @@ angular.module('rest').factory('ConnectionGroup', [function defineConnectionGrou | |||||||
|          */ |          */ | ||||||
|         this.childConnectionGroups = template.childConnectionGroups; |         this.childConnectionGroups = template.childConnectionGroups; | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Arbitrary name/value pairs which further describe this connection | ||||||
|  |          * group. The semantics and validity of these attributes are dictated | ||||||
|  |          * by the extension which defines them. | ||||||
|  |          * | ||||||
|  |          * @type Object.<String, String> | ||||||
|  |          */ | ||||||
|  |         this.attributes = {}; | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * The count of currently active connections using this connection |          * The count of currently active connections using this connection | ||||||
|          * group. This field will be returned from the REST API during a get |          * group. This field will be returned from the REST API during a get | ||||||
|   | |||||||
| @@ -56,6 +56,15 @@ angular.module('rest').factory('User', [function defineUser() { | |||||||
|          */ |          */ | ||||||
|         this.password = template.password; |         this.password = template.password; | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Arbitrary name/value pairs which further describe this user. The | ||||||
|  |          * semantics and validity of these attributes are dictated by the | ||||||
|  |          * extension which defines them. | ||||||
|  |          * | ||||||
|  |          * @type Object.<String, String> | ||||||
|  |          */ | ||||||
|  |         this.attributes = {}; | ||||||
|  |  | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     return User; |     return User; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user