From 59886fcdc2e63624598c0892f0c0750cafbd3165 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 29 Jan 2013 11:35:59 -0800 Subject: [PATCH] Implement templates (for configuration interface construction). --- .../auth/GuacamoleConfigurationDirectory.java | 12 ++ .../auth/GuacamoleConfigurationTemplate.java | 124 ++++++++++++++++++ ...SimpleGuacamoleConfigurationDirectory.java | 7 + 3 files changed, 143 insertions(+) create mode 100644 guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationTemplate.java diff --git a/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationDirectory.java b/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationDirectory.java index 64e1bc89c..8765068e5 100644 --- a/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationDirectory.java +++ b/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationDirectory.java @@ -61,6 +61,18 @@ public interface GuacamoleConfigurationDirectory { Map getConfigurations() throws GuacamoleException; + /** + * Returns a Map containing GuacamoleConfigurationTemplates which describe + * legal parameters and value. These templates are expected to be used as + * the blueprints for new connections. + * + * @return A Map of configuration templates. + * @throws GuacamoleException If an error occurs while retrieving the + * templates. + */ + Map getTemplates() + throws GuacamoleException; + /** * Adds the given GuacamoleConfiguration to the overall set of available * GuacamoleConfigurations, using the given unique identifier. diff --git a/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationTemplate.java b/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationTemplate.java new file mode 100644 index 000000000..fd5d9935c --- /dev/null +++ b/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/GuacamoleConfigurationTemplate.java @@ -0,0 +1,124 @@ + +package net.sourceforge.guacamole.net.auth; + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is guacamole-ext. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +import java.util.Collection; + + +/** + * A template which describes legal parameters and their values such that + * a new configuration for a Guacamole connection can be created. A + * GuacamoleConfigurationTemplate would normally be used to construct a + * meaningful interface for a user, such that creating a new configuration + * does not require reading the low-level documentation for a protocol. + * + * @author Michael Jumper + */ +public interface GuacamoleConfigurationTemplate { + + /** + * A field corresponding to a parameter of a GuacamoleConfiguration. + */ + public interface Field { + + /** + * The type of a field, dictating the data accepted and possibly the + * manner of that field's presentation. + */ + public enum Type { + + /** + * A field whose values are arbitrary strings. + */ + TEXT, + + /** + * A field whose legal values are either "true" or "false". + */ + BOOLEAN, + + /** + * A field which can only have numeric values. + */ + NUMERIC, + + /** + * A field whose values are arbitrary, sensitive strings. + */ + PASSWORD + + } + + /** + * Returns the type of this field. + * @return The type of this field. + */ + Type getType(); + + /** + * Returns a human-readable description of the field. + * @return A human-readable description of the field. + */ + String getDescription(); + + /** + * Returns the set of all possible legal values for this field. + * @return The set of all possible legal values for this field, or null + * if this field can have any value. + */ + Collection getDefaultValues(); + + } + + /** + * Returns the protocol that will be used by any configuration created + * using this template. + * + * @return The protocol that will be used by any configuration created + * using this template. + */ + String getProtocol(); + + /** + * Returns the set of all available fields. + * + * @return The set of all available fields. + */ + Collection getFields(); + +} diff --git a/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/simple/SimpleGuacamoleConfigurationDirectory.java b/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/simple/SimpleGuacamoleConfigurationDirectory.java index 28057d2fd..fa0c74b0a 100644 --- a/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/simple/SimpleGuacamoleConfigurationDirectory.java +++ b/guacamole-ext/src/main/java/net/sourceforge/guacamole/net/auth/simple/SimpleGuacamoleConfigurationDirectory.java @@ -41,6 +41,7 @@ import java.util.Map; import net.sourceforge.guacamole.GuacamoleException; import net.sourceforge.guacamole.GuacamoleSecurityException; import net.sourceforge.guacamole.net.auth.GuacamoleConfigurationDirectory; +import net.sourceforge.guacamole.net.auth.GuacamoleConfigurationTemplate; import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; @@ -76,6 +77,12 @@ public class SimpleGuacamoleConfigurationDirectory return configs; } + @Override + public Map getTemplates() + throws GuacamoleException { + throw new GuacamoleSecurityException("Permission denied."); + } + @Override public void addConfiguration(String identifier, GuacamoleConfiguration config) throws GuacamoleException {