From 14365ff72ec6490ae876d5c6c5c63a5a7f070620 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 7 Aug 2016 22:50:26 -0700 Subject: [PATCH 1/2] GUACAMOLE-5: Define connection and sharing profile parameters separately. --- .../guacamole/protocols/ProtocolInfo.java | 115 ++++++++++++++---- .../org/apache/guacamole/protocols/rdp.json | 2 +- .../org/apache/guacamole/protocols/ssh.json | 2 +- .../apache/guacamole/protocols/telnet.json | 2 +- .../org/apache/guacamole/protocols/vnc.json | 2 +- .../manage/templates/manageConnection.html | 2 +- .../main/webapp/app/rest/types/Protocol.js | 16 ++- 7 files changed, 108 insertions(+), 33 deletions(-) diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/protocols/ProtocolInfo.java b/guacamole-ext/src/main/java/org/apache/guacamole/protocols/ProtocolInfo.java index ec3323189..a5a8aa617 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/protocols/ProtocolInfo.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/protocols/ProtocolInfo.java @@ -24,9 +24,10 @@ import java.util.Collection; import org.apache.guacamole.form.Form; /** - * Describes a protocol and all forms associated with it, as required by - * a protocol plugin for guacd. This class allows known forms for a - * protocol to be exposed to the user as friendly fields. + * Describes a protocol and all parameters associated with it, as required by + * a protocol plugin for guacd. Each parameter is described with a Form, which + * allows the parameters of a protocol to be exposed to the user as friendly + * groupings of fields. * * @author Michael Jumper */ @@ -38,15 +39,45 @@ public class ProtocolInfo { private String name; /** - * A collection of all associated protocol forms. + * A collection of forms describing all known parameters for a connection + * using this protocol. */ - private Collection
forms; + private Collection connectionForms; + + /** + * A collection of forms describing all known parameters relevant to a + * sharing profile whose primary connection uses this protocol. + */ + private Collection sharingProfileForms; + + /** + * Creates a new ProtocolInfo having the given name and forms. The given + * collections of forms are used to describe the parameters for connections + * and sharing profiles respectively. + * + * @param name + * The unique name associated with the protocol. + * + * @param connectionForms + * A collection of forms describing all known parameters for a + * connection using this protocol. + * + * @param sharingProfileForms + * A collection of forms describing all known parameters relevant to a + * sharing profile whose primary connection uses this protocol. + */ + public ProtocolInfo(String name, Collection connectionForms, + Collection sharingProfileForms) { + this.name = name; + this.connectionForms = connectionForms; + this.sharingProfileForms = sharingProfileForms; + } /** * Creates a new ProtocolInfo with no associated name or forms. */ public ProtocolInfo() { - this.forms = new ArrayList(); + this(null); } /** @@ -56,22 +87,24 @@ public class ProtocolInfo { * The unique name associated with the protocol. */ public ProtocolInfo(String name) { - this.name = name; - this.forms = new ArrayList(); + this(name, new ArrayList()); } /** - * Creates a new ProtocolInfo having the given name and forms. + * Creates a new ProtocolInfo having the given name and forms. The given + * forms are used to describe the parameters for both connections and + * sharing profiles. * * @param name * The unique name associated with the protocol. * * @param forms - * The forms to associate with the protocol. + * A collection of forms describing all known parameters for this + * protocol, regardless of whether it is used in the context of a + * connection or a sharing profile. */ public ProtocolInfo(String name, Collection forms) { - this.name = name; - this.forms = forms; + this(name, forms, new ArrayList(forms)); } /** @@ -95,25 +128,57 @@ public class ProtocolInfo { } /** - * Returns a mutable collection of the protocol forms associated with - * this protocol. Changes to this collection affect the forms exposed - * to the user. + * Returns a mutable collection of forms describing all known parameters for + * a connection using this protocol. Changes to this collection affect the + * forms exposed to the user. * - * @return A mutable collection of protocol forms. + * @return + * A mutable collection of forms describing all known parameters for a + * connection using this protocol. */ - public Collection getForms() { - return forms; + public Collection getConnectionForms() { + return connectionForms; } /** - * Sets the collection of protocol forms associated with this - * protocol. + * Sets the collection of forms describing all known parameters for a + * connection using this protocol. The provided collection must be mutable. * - * @param forms - * The collection of forms to associate with this protocol. + * @param connectionForms + * A mutable collection of forms describing all known parameters for a + * connection using this protocol. */ - public void setForms(Collection forms) { - this.forms = forms; + public void setConnectionForms(Collection connectionForms) { + this.connectionForms = connectionForms; } - + + /** + * Returns a mutable collection of forms describing all known parameters + * relevant to a sharing profile whose primary connection uses this + * protocol. Changes to this collection affect the forms exposed to the + * user. + * + * @return + * A mutable collection of forms describing all known parameters + * relevant to a sharing profile whose primary connection uses this + * protocol. + */ + public Collection getSharingProfileForms() { + return sharingProfileForms; + } + + /** + * Sets the collection of forms describing all known parameters relevant to + * a sharing profile whose primary connection uses this protocol. The + * provided collection must be mutable. + * + * @param sharingProfileForms + * A mutable collection of forms describing all known parameters + * relevant to a sharing profile whose primary connection uses this + * protocol. + */ + public void setSharingProfileForms(Collection sharingProfileForms) { + this.sharingProfileForms = sharingProfileForms; + } + } diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json index c768d5059..9ff5d512f 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json @@ -1,6 +1,6 @@ { "name" : "rdp", - "forms" : [ + "connectionForms" : [ { "name" : "network", diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json index 1f75db20a..36e3a0e64 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json @@ -1,6 +1,6 @@ { "name" : "ssh", - "forms" : [ + "connectionForms" : [ { "name" : "network", diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json index b33a28962..2a4f9dde3 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json @@ -1,6 +1,6 @@ { "name" : "telnet", - "forms" : [ + "connectionForms" : [ { "name" : "network", diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json index 5a9a572ac..76222e834 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json @@ -1,6 +1,6 @@ { "name" : "vnc", - "forms" : [ + "connectionForms" : [ { "name" : "network", diff --git a/guacamole/src/main/webapp/app/manage/templates/manageConnection.html b/guacamole/src/main/webapp/app/manage/templates/manageConnection.html index 2bf0fad43..336530d87 100644 --- a/guacamole/src/main/webapp/app/manage/templates/manageConnection.html +++ b/guacamole/src/main/webapp/app/manage/templates/manageConnection.html @@ -47,7 +47,7 @@

{{'MANAGE_CONNECTION.SECTION_HEADER_PARAMETERS' | translate}}

diff --git a/guacamole/src/main/webapp/app/rest/types/Protocol.js b/guacamole/src/main/webapp/app/rest/types/Protocol.js index cf1298a2d..cfb26f02d 100644 --- a/guacamole/src/main/webapp/app/rest/types/Protocol.js +++ b/guacamole/src/main/webapp/app/rest/types/Protocol.js @@ -44,13 +44,23 @@ angular.module('rest').factory('Protocol', [function defineProtocol() { this.name = template.name; /** - * An array of forms containing all known parameters for this protocol, - * their types, and other information. + * An array of forms describing all known parameters for a connection + * using this protocol, including their types and other information. * * @type Form[] * @default [] */ - this.forms = template.forms || []; + this.connectionForms = template.connectionForms || []; + + /** + * An array of forms describing all known parameters relevant to a + * sharing profile whose primary connection uses this protocol, + * including their types, and other information. + * + * @type Form[] + * @default [] + */ + this.sharingProfileForms = template.sharingProfileForms || []; }; From 94ce151f69a7cbe5b98f86d9f7997c498955bb6c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 7 Aug 2016 21:21:57 -0700 Subject: [PATCH 2/2] GUACAMOLE-5: Add "read-only" parameter to all protocols. --- .../org/apache/guacamole/protocols/rdp.json | 19 +++++++++++++++++++ .../org/apache/guacamole/protocols/ssh.json | 19 +++++++++++++++++++ .../apache/guacamole/protocols/telnet.json | 19 +++++++++++++++++++ .../org/apache/guacamole/protocols/vnc.json | 14 ++++++++++++++ .../src/main/webapp/translations/de.json | 3 +++ .../src/main/webapp/translations/en.json | 3 +++ .../src/main/webapp/translations/fr.json | 3 +++ .../src/main/webapp/translations/nl.json | 3 +++ .../src/main/webapp/translations/ru.json | 3 +++ 9 files changed, 86 insertions(+) diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json index 9ff5d512f..cfe51d646 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json @@ -106,6 +106,11 @@ "name" : "resize-method", "type" : "ENUM", "options" : [ "", "reconnect", "display-update" ] + }, + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] } ] }, @@ -280,5 +285,19 @@ ] } + ], + "sharingProfileForms" : [ + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + ] } diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json index 36e3a0e64..93cef92b6 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/ssh.json @@ -54,6 +54,11 @@ "name" : "font-size", "type" : "ENUM", "options" : [ "", "8", "9", "10", "11", "12", "14", "18", "24", "30", "36", "48", "60", "72", "96" ] + }, + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] } ] }, @@ -117,5 +122,19 @@ ] } + ], + "sharingProfileForms" : [ + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + ] } \ No newline at end of file diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json index 2a4f9dde3..ea9c9fadf 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/telnet.json @@ -50,6 +50,11 @@ "name" : "font-size", "type" : "ENUM", "options" : [ "", "8", "9", "10", "11", "12", "14", "18", "24", "30", "36", "48", "60", "72", "96" ] + }, + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] } ] }, @@ -92,5 +97,19 @@ ] } + ], + "sharingProfileForms" : [ + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + ] } diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json index 76222e834..4d42f55bc 100644 --- a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/vnc.json @@ -150,5 +150,19 @@ ] } + ], + "sharingProfileForms" : [ + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + ] } diff --git a/guacamole/src/main/webapp/translations/de.json b/guacamole/src/main/webapp/translations/de.json index fd3003077..67c8a1519 100644 --- a/guacamole/src/main/webapp/translations/de.json +++ b/guacamole/src/main/webapp/translations/de.json @@ -292,6 +292,7 @@ "FIELD_HEADER_INITIAL_PROGRAM" : "Startprogramm:", "FIELD_HEADER_PASSWORD" : "Passwort:", "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameter:", "FIELD_HEADER_REMOTE_APP_DIR" : "Arbeitsverzeichnis:", "FIELD_HEADER_REMOTE_APP" : "Programm:", @@ -354,6 +355,7 @@ "FIELD_HEADER_PASSPHRASE" : "Passphrase:", "FIELD_HEADER_PORT" : "Port:", "FIELD_HEADER_PRIVATE_KEY" : "Privater Schlüssel:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", @@ -397,6 +399,7 @@ "FIELD_HEADER_PASSWORD" : "Passwort:", "FIELD_HEADER_PASSWORD_REGEX" : "Reguläre Passwortersetzungen:", "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", diff --git a/guacamole/src/main/webapp/translations/en.json b/guacamole/src/main/webapp/translations/en.json index e9914368c..01f332e18 100644 --- a/guacamole/src/main/webapp/translations/en.json +++ b/guacamole/src/main/webapp/translations/en.json @@ -304,6 +304,7 @@ "FIELD_HEADER_PORT" : "Port:", "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", "FIELD_HEADER_PRECONNECTION_ID" : "RDP source ID:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", "FIELD_HEADER_RECORDING_NAME" : "Recording name:", "FIELD_HEADER_RECORDING_PATH" : "Recording path:", "FIELD_HEADER_RESIZE_METHOD" : "Resize method:", @@ -378,6 +379,7 @@ "FIELD_HEADER_PASSPHRASE" : "Passphrase:", "FIELD_HEADER_PORT" : "Port:", "FIELD_HEADER_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", "FIELD_HEADER_RECORDING_NAME" : "Recording name:", "FIELD_HEADER_RECORDING_PATH" : "Recording path:", "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", @@ -429,6 +431,7 @@ "FIELD_HEADER_PASSWORD" : "Password:", "FIELD_HEADER_PASSWORD_REGEX" : "Password regular expression:", "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", "FIELD_HEADER_RECORDING_NAME" : "Recording name:", "FIELD_HEADER_RECORDING_PATH" : "Recording path:", "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", diff --git a/guacamole/src/main/webapp/translations/fr.json b/guacamole/src/main/webapp/translations/fr.json index 2fc9abdcb..b2199979e 100644 --- a/guacamole/src/main/webapp/translations/fr.json +++ b/guacamole/src/main/webapp/translations/fr.json @@ -294,6 +294,7 @@ "FIELD_HEADER_PORT" : "Port:", "FIELD_HEADER_PRECONNECTION_BLOB" : "Pré-connexion BLOB (VM ID):", "FIELD_HEADER_PRECONNECTION_ID" : "Source RDP ID:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", "FIELD_HEADER_REMOTE_APP_ARGS" : "Paramètres:", "FIELD_HEADER_REMOTE_APP_DIR" : "Répertoire de travail:", "FIELD_HEADER_REMOTE_APP" : "Programme:", @@ -357,6 +358,7 @@ "FIELD_HEADER_PASSPHRASE" : "Phrase secrète:", "FIELD_HEADER_PORT" : "Port:", "FIELD_HEADER_PRIVATE_KEY" : "Clé privée:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", @@ -400,6 +402,7 @@ "FIELD_HEADER_PASSWORD" : "Mot de passe:", "FIELD_HEADER_PASSWORD_REGEX" : "Expression régulière Mot de passe:", "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", diff --git a/guacamole/src/main/webapp/translations/nl.json b/guacamole/src/main/webapp/translations/nl.json index 14381452d..413ebbd18 100644 --- a/guacamole/src/main/webapp/translations/nl.json +++ b/guacamole/src/main/webapp/translations/nl.json @@ -295,6 +295,7 @@ "FIELD_HEADER_PORT" : "Poort:", "FIELD_HEADER_PRECONNECTION_BLOB" : "Voor te bereiden BLOB (VM ID):", "FIELD_HEADER_PRECONNECTION_ID" : "RDP bron ID:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", "FIELD_HEADER_RECORDING_PATH" : "Opname map:", "FIELD_HEADER_RESIZE_METHOD" : "Schaal methode:", @@ -369,6 +370,7 @@ "FIELD_HEADER_PASSPHRASE" : "Wachtwoordzin:", "FIELD_HEADER_PORT" : "Poort:", "FIELD_HEADER_PRIVATE_KEY" : "Persoonlijke sleutel:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", "FIELD_HEADER_RECORDING_PATH" : "Opname map:", "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript naam:", @@ -420,6 +422,7 @@ "FIELD_HEADER_PASSWORD" : "Wachtwoord:", "FIELD_HEADER_PASSWORD_REGEX" : "Wachtwoord reguliere expressie:", "FIELD_HEADER_PORT" : "Poort:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", "FIELD_HEADER_RECORDING_PATH" : "Opname map:", "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript naam:", diff --git a/guacamole/src/main/webapp/translations/ru.json b/guacamole/src/main/webapp/translations/ru.json index a39124005..8f2ef69b0 100644 --- a/guacamole/src/main/webapp/translations/ru.json +++ b/guacamole/src/main/webapp/translations/ru.json @@ -271,6 +271,7 @@ "FIELD_HEADER_INITIAL_PROGRAM" : "Запуск программ при подключении:", "FIELD_HEADER_PASSWORD" : "Пароль:", "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", "FIELD_HEADER_REMOTE_APP_ARGS" : "Параметры RemoteApp:", "FIELD_HEADER_REMOTE_APP_DIR" : "Рабочий каталог RemoteApp:", "FIELD_HEADER_REMOTE_APP" : "Программы RemoteApp:", @@ -322,6 +323,7 @@ "FIELD_HEADER_PASSPHRASE" : "Секретная фраза:", "FIELD_HEADER_PORT" : "Порт:", "FIELD_HEADER_PRIVATE_KEY" : "Приватный ключ:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", "FIELD_OPTION_FONT_SIZE_8" : "8", "FIELD_OPTION_FONT_SIZE_9" : "9", @@ -352,6 +354,7 @@ "FIELD_HEADER_PASSWORD" : "Пароль:", "FIELD_HEADER_PASSWORD_REGEX" : "Регулярное выражение для пароля:", "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", "FIELD_OPTION_FONT_SIZE_8" : "8", "FIELD_OPTION_FONT_SIZE_9" : "9",