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 1b45c9521..b1d486518 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 @@ -53,7 +53,7 @@ public class LocalEnvironment implements Environment { * Array of all known protocol names. */ private static final String[] KNOWN_PROTOCOLS = new String[]{ - "vnc", "rdp", "ssh", "telnet"}; + "vnc", "rdp", "ssh", "telnet", "kubernetes"}; /** * The hostname to use when connecting to guacd if no hostname is provided diff --git a/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/kubernetes.json b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/kubernetes.json new file mode 100644 index 000000000..94ec7381c --- /dev/null +++ b/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/kubernetes.json @@ -0,0 +1,174 @@ +{ + "name" : "kubernetes", + + "connectionForms" : [ + + { + "name" : "network", + "fields" : [ + { + "name" : "hostname", + "type" : "TEXT" + }, + { + "name" : "port", + "type" : "NUMERIC" + }, + { + "name" : "use-ssl", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "ignore-cert", + "type" : "BOOLEAN", + "options" : [ "true" ] + }, + { + "name" : "ca-cert", + "type" : "MULTILINE" + } + ] + }, + + { + "name" : "container", + "fields" : [ + { + "name" : "namespace", + "type" : "TEXT" + }, + { + "name" : "pod", + "type" : "TEXT" + }, + { + "name" : "container", + "type" : "TEXT" + } + ] + }, + + { + "name" : "authentication", + "fields" : [ + { + "name" : "client-cert", + "type" : "MULTILINE" + }, + { + "name" : "client-key", + "type" : "MULTILINE" + } + ] + }, + + { + "name" : "display", + "fields" : [ + { + "name" : "color-scheme", + "type" : "TEXT", + "options" : [ "", "black-white", "gray-black", "green-black", "white-black" ] + }, + { + "name" : "font-name", + "type" : "TEXT" + }, + { + "name" : "font-size", + "type" : "ENUM", + "options" : [ "", "8", "9", "10", "11", "12", "14", "18", "24", "30", "36", "48", "60", "72", "96" ] + }, + { + "name" : "scrollback", + "type" : "NUMERIC" + }, + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + }, + + { + "name" : "behavior", + "fields" : [ + { + "name" : "backspace", + "type" : "ENUM", + "options" : [ "", "127", "8" ] + } + ] + }, + + { + "name" : "typescript", + "fields" : [ + { + "name" : "typescript-path", + "type" : "TEXT" + }, + { + "name" : "typescript-name", + "type" : "TEXT" + }, + { + "name" : "create-typescript-path", + "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" ] + } + ] + } + + ], + "sharingProfileForms" : [ + + { + "name" : "display", + "fields" : [ + { + "name" : "read-only", + "type" : "BOOLEAN", + "options" : [ "true" ] + } + ] + } + + ] +} diff --git a/guacamole/src/main/webapp/app/index/styles/ui.css b/guacamole/src/main/webapp/app/index/styles/ui.css index 58406ebc6..b90e271c9 100644 --- a/guacamole/src/main/webapp/app/index/styles/ui.css +++ b/guacamole/src/main/webapp/app/index/styles/ui.css @@ -198,6 +198,7 @@ div.section { background-image: url('images/protocol-icons/guac-plug.png'); } +.connection .icon.kubernetes, .connection .icon.ssh, .connection .icon.telnet { background-image: url('images/protocol-icons/guac-text.png'); diff --git a/guacamole/src/main/webapp/translations/en.json b/guacamole/src/main/webapp/translations/en.json index adbae7a57..0c1d23f58 100644 --- a/guacamole/src/main/webapp/translations/en.json +++ b/guacamole/src/main/webapp/translations/en.json @@ -364,7 +364,73 @@ "TEXT_CONFIRM_DELETE" : "Groups cannot be restored after they have been deleted. Are you sure you want to delete this group?" }, - + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", + "FIELD_HEADER_CA_CERT" : "Certificate authority certificate:", + "FIELD_HEADER_CLIENT_CERT" : "Client certificate:", + "FIELD_HEADER_CLIENT_KEY" : "Client key:", + "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", + "FIELD_HEADER_CONTAINER" : "Container name:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", + "FIELD_HEADER_FONT_NAME" : "Font name:", + "FIELD_HEADER_FONT_SIZE" : "Font size:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_IGNORE_CERT" : "Ignore server certificate:", + "FIELD_HEADER_NAMESPACE" : "Namespace:", + "FIELD_HEADER_POD" : "Pod name:", + "FIELD_HEADER_PORT" : "Port:", + "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_SCROLLBACK" : "Maximum scrollback size:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", + "FIELD_HEADER_USE_SSL" : "Use SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", + "SECTION_HEADER_CONTAINER" : "Container", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", + "SECTION_HEADER_NETWORK" : "Network" + + }, + "PROTOCOL_RDP" : { "FIELD_HEADER_CLIENT_NAME" : "Client name:",