From 42c88142f119fa7a84d78b7357cd602367cb0f81 Mon Sep 17 00:00:00 2001 From: Virtually Nick Date: Sat, 2 Jan 2021 17:14:47 -0500 Subject: [PATCH] GUACAMOLE-261: Add client-side support for SPICE protocol. --- .../environment/LocalEnvironment.java | 1 + .../org/apache/guacamole/protocols/spice.json | 275 ++++++++++++++++++ .../main/frontend/src/translations/en.json | 98 +++++++ 3 files changed, 374 insertions(+) create mode 100644 guacamole-ext/src/main/resources/org/apache/guacamole/protocols/spice.json diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/environment/LocalEnvironment.java b/guacamole-ext/src/main/java/org/apache/guacamole/environment/LocalEnvironment.java index caf1c418e9..039cb9d349 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/environment/LocalEnvironment.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/environment/LocalEnvironment.java @@ -59,6 +59,7 @@ public class LocalEnvironment implements Environment { private static final String[] KNOWN_PROTOCOLS = new String[] { "kubernetes", "rdp", + "spice", "ssh", "telnet", "vnc", diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/spice.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/spice.json new file mode 100644 index 0000000000..8fd170d0ca --- /dev/null +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/spice.json @@ -0,0 +1,275 @@ +{ + "name" : "spice", + "connectionForms" : [ + + { + "name" : "network", + "fields" : [ + { + "name" : "hostname", + "type" : "TEXT" + }, + { + "name" : "port", + "type" : "NUMERIC" + }, + { + "name" : "tls", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "tls-verify", + "type" : "ENUM", + "options" : [ "", "hostname", "pubkey", "subject" ] + }, + { + "name" : "ca", + "type" : "MULTILINE" + }, + { + "name" : "ca-file", + "type" : "TEXT" + }, + { + "name" : "pubkey", + "type" : "MULTILINE" + }, + { + "name" : "proxy", + "type" : "TEXT" + } + ] + }, + + { + "name" : "authentication", + "fields" : [ + { + "name" : "username", + "type" : "USERNAME" + }, + { + "name" : "password", + "type" : "PASSWORD" + } + ] + }, + + { + "name" : "basic-parameters", + "fields" : [ + { + "name" : "server-layout", + "type" : "ENUM", + "options" : [ + "", + "de-ch-qwertz", + "de-de-qwertz", + "en-gb-qwerty", + "en-us-qwerty", + "es-es-qwerty", + "es-latam-qwerty", + "failsafe", + "fr-be-azerty", + "fr-fr-azerty", + "fr-ca-qwerty", + "fr-ch-qwertz", + "hu-hu-qwertz", + "it-it-qwerty", + "ja-jp-qwerty", + "no-no-qwerty", + "pl-pl-qwerty", + "pt-br-qwerty", + "sv-se-qwerty", + "da-dk-qwerty", + "tr-tr-qwerty" + ] + } + ] + }, + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "color-depth", + "type" : "ENUM", + "options" : [ "", "8", "16", "24", "32" ] + } + ] + }, + + { + "name" : "clipboard", + "fields" : [ + { + "name" : "clipboard-encoding", + "type" : "ENUM", + "options" : [ "", "ISO8859-1", "UTF-8", "UTF-16", "CP1252" ] + }, + { + "name" : "disable-copy", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "disable-paste", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + }, + + { + "name" : "audio", + "fields" : [ + { + "name" : "enable-audio", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "enable-audio-input", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + }, + + { + "name" : "file", + "fields" : [ + { + "name" : "file-transfer", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "file-directory", + "type" : "TEXT" + }, + { + "name" : "file-transfer-ro", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + }, + + { + "name" : "recording", + "fields" : [ + { + "name" : "recording-path", + "type" : "TEXT" + }, + { + "name" : "recording-name", + "type" : "TEXT" + }, + { + "name" : "recording-exclude-output", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "recording-exclude-mouse", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "recording-include-keys", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "create-recording-path", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + }, + + { + "name" : "sftp", + "fields" : [ + { + "name" : "enable-sftp", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "sftp-hostname", + "type" : "TEXT" + }, + { + "name" : "sftp-port", + "type" : "NUMERIC" + }, + { + "name" : "sftp-host-key", + "type" : "TEXT" + }, + { + "name" : "sftp-username", + "type" : "USERNAME" + }, + { + "name" : "sftp-password", + "type" : "PASSWORD" + }, + { + "name" : "sftp-private-key", + "type" : "MULTILINE" + }, + { + "name" : "sftp-passphrase", + "type" : "PASSWORD" + }, + { + "name" : "sftp-root-directory", + "type" : "TEXT" + }, + { + "name" : "sftp-directory", + "type" : "TEXT" + }, + { + "name" : "sftp-server-alive-interval", + "type" : "NUMERIC" + }, + { + "name" : "sftp-disable-download", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "sftp-disable-upload", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + + ], + "sharingProfileForms" : [ + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + + ] +} diff --git a/guacamole/src/main/frontend/src/translations/en.json b/guacamole/src/main/frontend/src/translations/en.json index e3423d7245..3a07742ce7 100644 --- a/guacamole/src/main/frontend/src/translations/en.json +++ b/guacamole/src/main/frontend/src/translations/en.json @@ -712,6 +712,104 @@ "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" }, + + "PROTOCOL_SPICE" : { + + "FIELD_HEADER_CA" : "CA certificates (Base64):", + "FIELD_HEADER_CA_FILE" : "Path to CA certificate(s):", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encoding:", + "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DISABLE_COPY" : "Disable copying from remote desktop:", + "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", + "FIELD_HEADER_ENABLE_AUDIO" : "Enable audio:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Enable audio input:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_FILE_DIRECTORY" : "Directory to share:", + "FIELD_HEADER_FILE_TRANSFER" : "Enable file share:", + "FIELD_HEADER_FILE_TRANSFER_RO" : "Share directory read-only:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_IGNORE_CERTIFICATES" : "Ignore server certificates:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PROXY" : "Proxy server:", + "FIELD_HEADER_PUBKEY" : "Public key:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", + "FIELD_HEADER_RECORDING_NAME" : "Recording name:", + "FIELD_HEADER_RECORDING_PATH" : "Recording path:", + "FIELD_HEADER_SERVER_LAYOUT" : "Keyboard layout:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Default upload directory:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Public host key (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive interval:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Password:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", + "FIELD_HEADER_SFTP_USERNAME" : "Username:", + "FIELD_HEADER_TLS" : "Enable TLS connection:", + "FIELD_HEADER_TLS_VERIFY" : "TLS verification mode:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Canadian French (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norwegian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", + + "FIELD_OPTION_TLS_VERIFY_EMPTY" : "", + "FIELD_OPTION_TLS_VERIFY_HOSTNAME" : "Hostname", + "FIELD_OPTION_TLS_VERIFY_PUBKEY" : "Public key", + "FIELD_OPTION_TLS_VERIFY_SUBJECT" : "Subject", + + "NAME" : "SPICE", + + "SECTION_HEADER_AUDIO" : "Audio", + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BASIC_PARAMETERS" : "Basic Parameters", + "SECTION_HEADER_CLIPBOARD" : "Clipboard", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_FILE" : "File transfer", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_SFTP" : "SFTP" + + }, "PROTOCOL_SSH" : {