On Wed, Jul 6, 2022 at 11:30 AM David Haukeness <[email protected]> wrote:

> Hello,
>     I'm working through the documentation and have worked through the
> "adding new protocols" section that covers guacd, however there's no
> guidance on what/where needs to be modified on guacamole-client to get the
> new protocols to show up in the "Add new connection" screen, or demo the
> connection.
>     Is there a resource available that explains this part somewhere?
> alternatively is there someone willing to offer guidance, and i'm willing
> to write it up and PR the manual?
>

The existence of a protocol and its parameters are defined by JSON files
that separate each parameter into a typed field within a named group of
fields called a form. Built-in definitions can be found here:

https://github.com/apache/guacamole-client/tree/e348d3f89ab6488ab874aace78a5006279e2907e/guacamole-ext/src/main/resources/org/apache/guacamole/protocols
https://github.com/apache/guacamole-client/blob/e348d3f89ab6488ab874aace78a5006279e2907e/guacamole-ext/src/main/java/org/apache/guacamole/environment/LocalEnvironment.java#L56-L65

The built-in field types correspond to the types defined within
guacamole-ext and the webapp itself:

https://guacamole.apache.org/doc/guacamole-ext/org/apache/guacamole/form/package-summary.html
https://github.com/apache/guacamole-client/blob/e348d3f89ab6488ab874aace78a5006279e2907e/guacamole/src/main/frontend/src/app/form/services/formService.js#L33-L210

Extensions can define their own field types if needed. In practice, this
most often happens for authentication extensions (the Duo, TOTP, and SAML
extensions all do this), but can be also used for protocol definitions.

Additional, third-party definitions can be added by creating the same sort
of JSON files within "GUACAMOLE_HOME/protocols/". If JSON for a built-in
protocol is found within this directory, that JSON takes precedence over
the built-in copy.

The human-readable text for the name of the protocol and for each parameter
and form are defined with translation strings. Each of these strings will
be derived from the protocol name and parameter name, canonicalized to
UPPERCASE_WITH_UNDERSCORES. For example:

https://github.com/apache/guacamole-client/blob/e348d3f89ab6488ab874aace78a5006279e2907e/guacamole/src/main/frontend/src/translations/en.json#L789-L860

In the above, the protocol ("vnc") determines the name of the namespace
containing the relevant strings ("PROTOCOL_VNC"). Within that namespace,
each parameter (like "audio-servername") is transformed to the translation
string for the field header ("FIELD_HEADER_AUDIO_SERVERNAME"), and each
form (like "authentication") is transformed to the translation string for
the section header ("SECTION_HEADER_AUTHENTICATION").

- Mike

Reply via email to