diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/Attribute.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/Attribute.java new file mode 100644 index 000000000..446eb0c4e --- /dev/null +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/Attribute.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2015 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.attribute; + +import org.glyptodon.guacamole.net.auth.Identifiable; + +/** + * An arbitrary attribute. Each attribute associates an identifier with a + * value, essentially a key/value pair, where the type dictates the semantics + * and legal values of the attribute. + * + * @author Michael Jumper + */ +public interface Attribute extends Identifiable { + + /** + * Specific types of attributes. Each attribute type describes the kind of + * values the attribute can accept, and defines any semantics associated + * with those values. + */ + public enum Type { + + /** + * A text attribute, accepting arbitrary values. + */ + TEXT, + + /** + * A username attribute. This attribute type generally behaves + * identically to arbitrary text attributes, but has semantic + * differences. + */ + USERNAME, + + /** + * A password attribute, whose value is sensitive and must be hidden. + */ + PASSWORD, + + /** + * A numeric attribute, whose value must contain only digits. + */ + NUMERIC, + + /** + * A boolean attribute, whose value is either blank or "true". + */ + BOOLEAN, + + /** + * An enumerated attribute, whose legal values are fully enumerated + * by a provided, finite list. + */ + ENUM, + + /** + * A text attribute that can span more than one line. + */ + MULTILINE + + } + + /** + * Returns the type of this attribute. The attribute type dictates the kind + * of values the attribute can contain, and the semantics of the attribute + * as a whole. + * + * @return + * The type of this attribute. + */ + Type getType(); + + /** + * Sets the type of this attribute. Attribute type dictates the kind of + * values the attribute can contain, and the semantics of the attribute as + * a whole. + * + * @param type + * The type to associate with this attribute. + */ + void setType(Type type); + + /** + * Returns the value currently associated with this attribute, if any. The + * values acceptable by this attribute are dictated by the type. + * + * @return + * The value currently associated with this attribute, or null if no + * value is present. + */ + String getValue(); + + /** + * Sets the value currently associated with this attribute, if any. The + * values acceptable by this attribute are dictated by the type. + * + * @param value + * The value to associate with this attribute. + */ + void setValue(String value); + +} diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/AttributeSet.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/AttributeSet.java new file mode 100644 index 000000000..8b02b2cd8 --- /dev/null +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/AttributeSet.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2015 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.attribute; + +import java.util.Set; +import org.glyptodon.guacamole.GuacamoleException; + +/** + * An arbitrary set of attributes. + * + * @author Michael Jumper + * @param + * The type of attribute stored within this AttributeSet. + */ +public interface AttributeSet { + + /** + * Returns a Set which contains all attributes stored or storable within + * this attribute set. The value of each attribute, if any, is associated + * with the attribute object within the set. The set itself may not be + * mutable. + * + * @return + * A Set containing all attributes stored or storable within this + * attribute set, which may not be mutable. + * + * @throws GuacamoleException + * If an error occurs while retrieving the attributes, or if attributes + * cannot be retrieved due to lack of permissions to do so. + */ + Set getAttributes() throws GuacamoleException; + + /** + * Changes each of the given attributes. If a specified attribute is + * already set, the previous value will be overwritten with the new value. + * If the new value is null, the previous value will be unset. + * + * @param attributes + * The attributes to update. + * + * @throws GuacamoleException + * If an error occurs while updating the attributes, if permission to + * update attributes is denied, or if any one of the given attributes + * is invalid or malformed. + */ + void updateAttributes(Set attributes) + throws GuacamoleException; + +} diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/ObjectAttribute.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/ObjectAttribute.java new file mode 100644 index 000000000..820f9da90 --- /dev/null +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/ObjectAttribute.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2015 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.attribute; + +/** + * An attribute which applies to a specific object. + * + * @author Michael Jumper + */ +public class ObjectAttribute implements Attribute { + + /** + * The identifier of the object associated with the attribute. + */ + private String objectIdentifier; + + /** + * The type of value stored within this attribute. + */ + private Type type; + + /** + * A string which uniquely identifies this attribute. + */ + private String identifier; + + /** + * The value currently assigned to this attribute. + */ + private String value; + + /** + * Creates a new ObjectAttribute having the given identifier and type. + * The identifier must be unique with respect to other attributes that + * apply to the same kind of object. + * + * @param identifier + * The string which uniquely identifies this attribute. + * + * @param type + * The type of value stored within this attribute. + */ + public ObjectAttribute(String identifier, Type type) { + this.identifier = identifier; + this.type = type; + } + + /** + * Returns the identifier of the specific object associated with this + * attribute. + * + * @return + * The identifier of the specific object associated with this + * attribute. + */ + public String getObjectIdentifier() { + return objectIdentifier; + } + + /** + * Sets the identifier of the specific object associated with this + * attribute. + * + * @param objectIdentifier + * The identifier of the specific object associated with this + * attribute. + */ + public void setObjectIdentifier(String objectIdentifier) { + this.objectIdentifier = objectIdentifier; + } + + @Override + public Type getType() { + return type; + } + + @Override + public void setType(Type type) { + this.type = type; + } + + @Override + public String getIdentifier() { + return identifier; + } + + @Override + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + @Override + public String getValue() { + return value; + } + + @Override + public void setValue(String value) { + this.value = value; + } + + @Override + public int hashCode() { + + // The identifier always uniquely identifies an attribute + if (identifier != null) + return identifier.hashCode(); + + return 0; + + } + + @Override + public boolean equals(Object obj) { + + // Not equal if null or wrong type + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + final ObjectAttribute other = (ObjectAttribute) obj; + + // If null identifier, equality depends on whether other identifier + // is null + if (identifier == null) + return other.identifier == null; + + // Otherwise, equality depends entirely on identifier + return identifier.equals(other.identifier); + + } + +} diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/ObjectAttributeSet.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/ObjectAttributeSet.java new file mode 100644 index 000000000..57def7004 --- /dev/null +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/ObjectAttributeSet.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2015 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.attribute; + +/** + * A set of attributes associated with a particular object or group of objects. + * + * @author Michael Jumper + */ +public interface ObjectAttributeSet extends AttributeSet { +} diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/package-info.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/package-info.java new file mode 100644 index 000000000..e653cf71a --- /dev/null +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/net/auth/attribute/package-info.java @@ -0,0 +1,27 @@ +/* + * 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. + */ + +/** + * Provides classes which describe the various attributes that can be + * associated with Guacamole objects, such as a user or a connection. + */ +package org.glyptodon.guacamole.net.auth.attribute;