GUAC-800: Use Forms for attributes, not just Fields.

This commit is contained in:
Michael Jumper
2015-05-26 14:42:39 -07:00
parent c3558a3ae9
commit e7574c0276
8 changed files with 63 additions and 50 deletions

View File

@@ -38,6 +38,7 @@ import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionGroupPermissionSer
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionService; import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionService;
import org.glyptodon.guacamole.auth.jdbc.permission.UserPermissionService; import org.glyptodon.guacamole.auth.jdbc.permission.UserPermissionService;
import org.glyptodon.guacamole.form.Field; import org.glyptodon.guacamole.form.Field;
import org.glyptodon.guacamole.form.Form;
import org.glyptodon.guacamole.net.auth.User; import org.glyptodon.guacamole.net.auth.User;
import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet; import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet;
import org.glyptodon.guacamole.net.auth.permission.SystemPermission; import org.glyptodon.guacamole.net.auth.permission.SystemPermission;
@@ -58,15 +59,19 @@ public class ModeledUser extends ModeledDirectoryObject<UserModel> implements Us
public static final String DISABLED_ATTRIBUTE_NAME = "disabled"; public static final String DISABLED_ATTRIBUTE_NAME = "disabled";
/** /**
* A typed field corresponding to the disabled attribute of a user. * All attributes related to restricting user accounts, within a logical
* form.
*/ */
public static final Field DISABLED_ATTRIBUTE = new Field(DISABLED_ATTRIBUTE_NAME, "Disabled", "true"); public static final Form ACCOUNT_RESTRICTIONS = new Form("restrictions", "Account Restrictions", Arrays.asList(
new Field(DISABLED_ATTRIBUTE_NAME, "Disabled", "true")
));
/** /**
* All possible attributes of user objects. * All possible attributes of user objects organized as individual,
* logical forms.
*/ */
public static final Collection<Field> ATTRIBUTES = Collections.unmodifiableCollection(Arrays.asList( public static final Collection<Form> ATTRIBUTES = Collections.unmodifiableCollection(Arrays.asList(
DISABLED_ATTRIBUTE ACCOUNT_RESTRICTIONS
)); ));
/** /**

View File

@@ -33,7 +33,7 @@ import java.util.Collections;
import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.GuacamoleException;
import org.glyptodon.guacamole.auth.jdbc.base.RestrictedObject; import org.glyptodon.guacamole.auth.jdbc.base.RestrictedObject;
import org.glyptodon.guacamole.auth.jdbc.activeconnection.ActiveConnectionDirectory; import org.glyptodon.guacamole.auth.jdbc.activeconnection.ActiveConnectionDirectory;
import org.glyptodon.guacamole.form.Field; import org.glyptodon.guacamole.form.Form;
import org.glyptodon.guacamole.net.auth.ActiveConnection; import org.glyptodon.guacamole.net.auth.ActiveConnection;
import org.glyptodon.guacamole.net.auth.Connection; import org.glyptodon.guacamole.net.auth.Connection;
import org.glyptodon.guacamole.net.auth.ConnectionGroup; import org.glyptodon.guacamole.net.auth.ConnectionGroup;
@@ -134,18 +134,18 @@ public class UserContext extends RestrictedObject
} }
@Override @Override
public Collection<Field> getUserAttributes() { public Collection<Form> getUserAttributes() {
return ModeledUser.ATTRIBUTES; return ModeledUser.ATTRIBUTES;
} }
@Override @Override
public Collection<Field> getConnectionAttributes() { public Collection<Form> getConnectionAttributes() {
return Collections.<Field>emptyList(); return Collections.<Form>emptyList();
} }
@Override @Override
public Collection<Field> getConnectionGroupAttributes() { public Collection<Form> getConnectionGroupAttributes() {
return Collections.<Field>emptyList(); return Collections.<Form>emptyList();
} }
} }

View File

@@ -1,5 +1,9 @@
{ {
"USER_ATTRIBUTES" : { "USER_ATTRIBUTES" : {
"FIELD_HEADER_DISABLED" : "Disabled:"
"FIELD_HEADER_DISABLED" : "Login disabled:",
"SECTION_HEADER_RESTRICTIONS" : "Account Restrictions"
} }
} }

View File

@@ -24,7 +24,7 @@ package org.glyptodon.guacamole.net.auth;
import java.util.Collection; import java.util.Collection;
import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.GuacamoleException;
import org.glyptodon.guacamole.form.Field; import org.glyptodon.guacamole.form.Form;
/** /**
* The context of an active user. The functions of this class enforce all * The context of an active user. The functions of this class enforce all
@@ -121,7 +121,7 @@ public interface UserContext {
* @return * @return
* A collection of all attributes applicable to users. * A collection of all attributes applicable to users.
*/ */
Collection<Field> getUserAttributes(); Collection<Form> getUserAttributes();
/** /**
* Retrieves a collection of all attributes applicable to connections. This * Retrieves a collection of all attributes applicable to connections. This
@@ -132,7 +132,7 @@ public interface UserContext {
* @return * @return
* A collection of all attributes applicable to connections. * A collection of all attributes applicable to connections.
*/ */
Collection<Field> getConnectionAttributes(); Collection<Form> getConnectionAttributes();
/** /**
* Retrieves a collection of all attributes applicable to connection * Retrieves a collection of all attributes applicable to connection
@@ -143,6 +143,6 @@ public interface UserContext {
* @return * @return
* A collection of all attributes applicable to connection groups. * A collection of all attributes applicable to connection groups.
*/ */
Collection<Field> getConnectionGroupAttributes(); Collection<Form> getConnectionGroupAttributes();
} }

View File

@@ -28,7 +28,7 @@ import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.GuacamoleException;
import org.glyptodon.guacamole.form.Field; import org.glyptodon.guacamole.form.Form;
import org.glyptodon.guacamole.net.auth.ActiveConnection; import org.glyptodon.guacamole.net.auth.ActiveConnection;
import org.glyptodon.guacamole.net.auth.Connection; import org.glyptodon.guacamole.net.auth.Connection;
import org.glyptodon.guacamole.net.auth.ConnectionGroup; import org.glyptodon.guacamole.net.auth.ConnectionGroup;
@@ -176,18 +176,18 @@ public class SimpleUserContext implements UserContext {
} }
@Override @Override
public Collection<Field> getUserAttributes() { public Collection<Form> getUserAttributes() {
return Collections.<Field>emptyList(); return Collections.<Form>emptyList();
} }
@Override @Override
public Collection<Field> getConnectionAttributes() { public Collection<Form> getConnectionAttributes() {
return Collections.<Field>emptyList(); return Collections.<Form>emptyList();
} }
@Override @Override
public Collection<Field> getConnectionGroupAttributes() { public Collection<Form> getConnectionGroupAttributes() {
return Collections.<Field>emptyList(); return Collections.<Form>emptyList();
} }
} }

View File

@@ -34,7 +34,7 @@ import javax.ws.rs.core.MediaType;
import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.GuacamoleException;
import org.glyptodon.guacamole.environment.Environment; import org.glyptodon.guacamole.environment.Environment;
import org.glyptodon.guacamole.environment.LocalEnvironment; import org.glyptodon.guacamole.environment.LocalEnvironment;
import org.glyptodon.guacamole.form.Field; import org.glyptodon.guacamole.form.Form;
import org.glyptodon.guacamole.net.auth.UserContext; import org.glyptodon.guacamole.net.auth.UserContext;
import org.glyptodon.guacamole.net.basic.rest.AuthProviderRESTExposure; import org.glyptodon.guacamole.net.basic.rest.AuthProviderRESTExposure;
import org.glyptodon.guacamole.net.basic.rest.auth.AuthenticationService; import org.glyptodon.guacamole.net.basic.rest.auth.AuthenticationService;
@@ -65,8 +65,8 @@ public class SchemaRESTService {
* performing the operation. * performing the operation.
* *
* @return * @return
* A collection of form fields which describe the possible attributes * A collection of forms which describe the possible attributes of a
* of a user object. * user object.
* *
* @throws GuacamoleException * @throws GuacamoleException
* If an error occurs while retrieving the possible attributes. * If an error occurs while retrieving the possible attributes.
@@ -74,7 +74,7 @@ public class SchemaRESTService {
@GET @GET
@Path("/users/attributes") @Path("/users/attributes")
@AuthProviderRESTExposure @AuthProviderRESTExposure
public Collection<Field> getUserAttributes(@QueryParam("token") String authToken) throws GuacamoleException { public Collection<Form> getUserAttributes(@QueryParam("token") String authToken) throws GuacamoleException {
// Retrieve all possible user attributes // Retrieve all possible user attributes
UserContext userContext = authenticationService.getUserContext(authToken); UserContext userContext = authenticationService.getUserContext(authToken);
@@ -90,8 +90,8 @@ public class SchemaRESTService {
* performing the operation. * performing the operation.
* *
* @return * @return
* A collection of form fields which describe the possible attributes * A collection of forms which describe the possible attributes of a
* of a connection object. * connection object.
* *
* @throws GuacamoleException * @throws GuacamoleException
* If an error occurs while retrieving the possible attributes. * If an error occurs while retrieving the possible attributes.
@@ -99,7 +99,7 @@ public class SchemaRESTService {
@GET @GET
@Path("/connections/attributes") @Path("/connections/attributes")
@AuthProviderRESTExposure @AuthProviderRESTExposure
public Collection<Field> getConnectionAttributes(@QueryParam("token") String authToken) throws GuacamoleException { public Collection<Form> getConnectionAttributes(@QueryParam("token") String authToken) throws GuacamoleException {
// Retrieve all possible connection attributes // Retrieve all possible connection attributes
UserContext userContext = authenticationService.getUserContext(authToken); UserContext userContext = authenticationService.getUserContext(authToken);
@@ -115,8 +115,8 @@ public class SchemaRESTService {
* performing the operation. * performing the operation.
* *
* @return * @return
* A collection of form fields which describe the possible attributes * A collection of forms which describe the possible attributes of a
* of a connection group object. * connection group object.
* *
* @throws GuacamoleException * @throws GuacamoleException
* If an error occurs while retrieving the possible attributes. * If an error occurs while retrieving the possible attributes.
@@ -124,7 +124,7 @@ public class SchemaRESTService {
@GET @GET
@Path("/connectionGroups/attributes") @Path("/connectionGroups/attributes")
@AuthProviderRESTExposure @AuthProviderRESTExposure
public Collection<Field> getConnectionGroupAttributes(@QueryParam("token") String authToken) throws GuacamoleException { public Collection<Form> getConnectionGroupAttributes(@QueryParam("token") String authToken) throws GuacamoleException {
// Retrieve all possible connection group attributes // Retrieve all possible connection group attributes
UserContext userContext = authenticationService.getUserContext(authToken); UserContext userContext = authenticationService.getUserContext(authToken);

View File

@@ -105,9 +105,10 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
/** /**
* All available user attributes. This is only the set of attribute * All available user attributes. This is only the set of attribute
* definitions, not attribute values. * definitions, organized as logical groupings of attributes, not attribute
* values.
* *
* @type Field[] * @type Form[]
*/ */
$scope.attributes = null; $scope.attributes = null;

View File

@@ -36,12 +36,13 @@ angular.module('rest').factory('schemaService', ['$injector',
/** /**
* Makes a request to the REST API to get the list of available attributes * Makes a request to the REST API to get the list of available attributes
* for user objects, returning a promise that provides an array of * for user objects, returning a promise that provides an array of
* @link{Field} objects if successful. Each element of the array describes * @link{Form} objects if successful. Each element of the array describes
* a possible attribute. * a logical grouping of possible attributes.
* *
* @returns {Promise.<Field[]>} * @returns {Promise.<Form[]>}
* A promise which will resolve with an array of @link{Field} * A promise which will resolve with an array of @link{Form}
* objects, where each @link{Field} describes a possible attribute. * objects, where each @link{Form} describes a logical grouping of
* possible attributes.
*/ */
service.getUserAttributes = function getUserAttributes() { service.getUserAttributes = function getUserAttributes() {
@@ -63,12 +64,13 @@ angular.module('rest').factory('schemaService', ['$injector',
/** /**
* Makes a request to the REST API to get the list of available attributes * Makes a request to the REST API to get the list of available attributes
* for connection objects, returning a promise that provides an array of * for connection objects, returning a promise that provides an array of
* @link{Field} objects if successful. Each element of the array describes * @link{Form} objects if successful. Each element of the array describes
* a possible attribute. * a logical grouping of possible attributes.
* *
* @returns {Promise.<Field[]>} * @returns {Promise.<Form[]>}
* A promise which will resolve with an array of @link{Field} * A promise which will resolve with an array of @link{Form}
* objects, where each @link{Field} describes a possible attribute. * objects, where each @link{Form} describes a logical grouping of
* possible attributes.
*/ */
service.getConnectionAttributes = function getConnectionAttributes() { service.getConnectionAttributes = function getConnectionAttributes() {
@@ -90,12 +92,13 @@ angular.module('rest').factory('schemaService', ['$injector',
/** /**
* Makes a request to the REST API to get the list of available attributes * Makes a request to the REST API to get the list of available attributes
* for connection group objects, returning a promise that provides an array * for connection group objects, returning a promise that provides an array
* of @link{Field} objects if successful. Each element of the array * of @link{Form} objects if successful. Each element of the array
* describes a possible attribute. * a logical grouping of possible attributes.
* *
* @returns {Promise.<Field[]>} * @returns {Promise.<Form[]>}
* A promise which will resolve with an array of @link{Field} * A promise which will resolve with an array of @link{Form}
* objects, where each @link{Field} describes a possible attribute. * objects, where each @link{Form} describes a logical grouping of
* possible attributes.
*/ */
service.getConnectionGroupAttributes = function getConnectionGroupAttributes() { service.getConnectionGroupAttributes = function getConnectionGroupAttributes() {