<?xml version="1.0" encoding="UTF-8"?>
<chapter xml:id="guacamole-ext" xmlns="http://docbook.org/ns/docbook"
    version="5.0" xml:lang="en" xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xi="http://www.w3.org/2001/XInclude">
    <title>guacamole-ext</title>
    <indexterm>
        <primary>API</primary>
        <secondary>Java</secondary>
    </indexterm>
    <indexterm>
        <primary>guacamole-ext</primary>
    </indexterm>
    <para>While not strictly part of the Java API provided by the Guacamole project, guacamole-ext
        is an API exposed by the Guacamole web application within a separate project such that
        extensions, specifically authentication providers, can be written to tweak Guacamole to fit
        well in existing deployments.</para>
    <para>Extensions to Guacamole can:</para>
    <orderedlist>
        <listitem>
            <para>Provide alternative authentication methods and sources of connection/user
                data.</para>
        </listitem>
        <listitem>
            <para>Provide event listeners that will be notified as Guacamole performs tasks such
                as authentication and tunnel connection.</para>
        </listitem>
        <listitem>
            <para>Theme or brand Guacamole through additional CSS files and static resources.</para>
        </listitem>
        <listitem>
            <para>Extend Guacamole's JavaScript code by providing JavaScript that will be loaded
                automatically.</para>
        </listitem>
        <listitem>
            <para>Add additional display languages, or alter the translation strings of existing
                languages.</para>
        </listitem>
    </orderedlist>
    <section xml:id="ext-file-format">
        <title>Guacamole extension format</title>
        <para>Guacamole extensions are standard Java <filename>.jar</filename> files which contain
            all classes and resources required by the extension, as well as the Guacamole extension
            manifest. There is no set structure to an extension except that the manifest must be in
            the root of the archive. Java classes and packages, if any, will be read from the
                <filename>.jar</filename> relative to the root, as well.</para>
        <para>Beyond this, the semantics and locations associated with all other resources within
            the extension are determined by the extension manifest alone.</para>
        <section xml:id="ext-manifest">
            <title>Extension manifest</title>
            <para>The Guacamole extension manifest is a single JSON file,
                    <filename>guac-manifest.json</filename>, which describes the location of each
                resource, the type of each resource, and the version of Guacamole that the extension
                was built for. The manifest can contain the following properties:</para>
            <informaltable frame="all">
                <tgroup cols="2">
                    <colspec colname="c1" colnum="1" colwidth="1*"/>
                    <colspec colname="c2" colnum="2" colwidth="3*"/>
                    <thead>
                        <row>
                            <entry>Property</entry>
                            <entry>Description</entry>
                        </row>
                    </thead>
                    <tbody>
                        <row>
                            <entry><property>guacamoleVersion</property></entry>
                            <entry>
                                <para>The version string of the Guacamole release that this
                                    extension is written for. <emphasis>This property is required
                                        for all extensions.</emphasis> The special version string
                                        <code>"*"</code> can be used if the extension does not
                                    depend on a particular version of Guacamole, but be careful -
                                    this will bypass version compatibility checks, and should never
                                    be used if the extension does more than basic theming or
                                    branding.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>name</property></entry>
                            <entry>
                                <para>A human-readable name for the extension. <emphasis>This
                                        property is required for all extensions.</emphasis> When
                                    your extension is successfully loaded, a message acknowledging
                                    the successful loading of your extension by name will be
                                    logged.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>namespace</property></entry>
                            <entry>
                                <para>A unique string which identifies your extension.
                                        <emphasis>This property is required for all
                                        extensions.</emphasis> This string should be unique enough
                                    that it is unlikely to collide with the namespace of any other
                                    extension.</para>
                                <para>If your extension contains static resources, those resources
                                    will be served at a path derived from the namespace provided
                                    here.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>authProviders</property></entry>
                            <entry>
                                <para>An array of the classnames of all
                                        <classname>AuthenticationProvider</classname> subclasses
                                    provided by this extension.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>listeners</property></entry>
                            <entry>
                                <para>An array of the classnames of all
                                        <classname>Listener</classname> subclasses
                                    provided by this extension.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>js</property></entry>
                            <entry>
                                <para>An array of all JavaScript files within the extension. All
                                    paths within this array must be relative paths, and will be
                                    interpreted relative to the root of the archive.</para>
                                <para>JavaScript files declared here will be automatically loaded
                                    when the web application loads within the user's browser.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>css</property></entry>
                            <entry>
                                <para>An array of all CSS files within the extension. All paths
                                    within this array must be relative paths, and will be
                                    interpreted relative to the root of the archive.</para>
                                <para>CSS files declared here will be automatically applied when the
                                    web application loads within the user's browser.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>html</property></entry>
                            <entry>
                                <para>An array of all HTML files within the extension that should be
                                    used to update or replace existing HTML within the Guacamole
                                    interface. All paths within this array must be relative paths,
                                    and will be interpreted relative to the root of the
                                    archive.</para>
                                <para>HTML files declared here will be automatically applied to
                                    other HTML within the Guacamole interface when the web
                                    application loads within the user's browser. The manner in which
                                    the files are applied is dictated by <tag>&lt;meta ...></tag>
                                    within those same files.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>translations</property></entry>
                            <entry>
                                <para>An array of all translation files within the extension. All
                                    paths within this array must be relative paths, and will be
                                    interpreted relative to the root of the archive.</para>
                                <para>Translation files declared here will be automatically added to
                                    the available languages. If a translation file provides a
                                    language that already exists within Guacamole, its strings will
                                    override the strings of the existing translation.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>resources</property></entry>
                            <entry>
                                <para>An object where each property name is the name of a web
                                    resource file, and each value is the mimetype for that resource.
                                    All paths within this object must be relative paths, and will be
                                    interpreted relative to the root of the archive.</para>
                                <para>Web resources declared here will be made available to the
                                    application at
                                            <filename>app/ext/<replaceable>NAMESPACE</replaceable>/<replaceable>PATH</replaceable></filename>,
                                    where <replaceable>NAMESPACE</replaceable> is the value of the
                                        <property>namespace</property> property, and
                                        <replaceable>PATH</replaceable> is the declared web resource
                                    filename.</para>
                            </entry>
                        </row>
                    </tbody>
                </tgroup>
            </informaltable>
            <para>The only absolutely required properties are <property>guacamoleVersion</property>,
                    <property>name</property>, and <property>namespace</property>, as they are used
                to identify the extension and for compatibility checks. The most minimal
                    <filename>guac-manifest.json</filename> will look something like this:</para>
            <informalexample>
                <programlisting>{
    "guacamoleVersion" : "1.3.0",
    "name" : "My Extension",
    "namespace" : "my-extension"
}</programlisting>
            </informalexample>
            <para>This will allow the extension to load, but does absolutely nothing otherwise.
                Lacking the semantic information provided by the other properties, no other files
                within the extension will be used. A typical <filename>guac-manifest.json</filename>
                for an extension providing theming or branding would be more involved:</para>
            <informalexample>
                <programlisting>{

    "guacamoleVersion" : "1.3.0",

    "name"      : "My Extension",
    "namespace" : "my-extension",

    "css" : [ "theme.css" ],

    "html" : [ "loginDisclaimer.html" ],

    "resources" : {
        "images/logo.png"   : "image/png",
        "images/cancel.png" : "image/png",
        "images/delete.png" : "image/png"
    }

}</programlisting>
            </informalexample>
        </section>
        <section xml:id="ext-patch-html">
            <title>Updating existing HTML</title>
            <para>The existing HTML structure of Guacamole's interface can be modified by extensions
                through special "patch" HTML files declared by the <property>html</property>
                property in <filename>guac-manifest.json</filename>. These files are HTML fragments
                and are identical to any other HTML file except that they contain Guacamole-specific
                    <tag>meta</tag> tags that instruct Guacamole to modify its own HTML in a
                particular way. Each <tag>meta</tag> tag takes the following form:</para>
            <informalexample>
                <programlisting>&lt;meta name="<replaceable>NAME</replaceable>" content="<replaceable>SELECTOR</replaceable>"></programlisting>
            </informalexample>
            <para>where <replaceable>SELECTOR</replaceable> is a CSS selector that matches the
                elements within the Guacamole interface that serve as a basis for the modification,
                and <replaceable>NAME</replaceable> is any one of the following defined
                modifications:</para>
            <informaltable frame="all">
                <tgroup cols="2">
                    <colspec colname="c1" colnum="1" colwidth="1*"/>
                    <colspec colname="c2" colnum="2" colwidth="4*"/>
                    <thead>
                        <row>
                            <entry>Name</entry>
                            <entry>Description</entry>
                        </row>
                    </thead>
                    <tbody>
                        <row>
                            <entry><property>before</property></entry>
                            <entry>
                                <para>Inserts the specified HTML immediately before any element
                                    matching the CSS selector.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>after</property></entry>
                            <entry>
                                <para>Inserts the specified HTML immediately after any element
                                    matching the CSS selector.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>replace</property></entry>
                            <entry>
                                <para>Replaces any element matching the CSS selector with the
                                    specified HTML.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>before-children</property></entry>
                            <entry>
                                <para>Inserts the specified HTML immediately before the first child
                                    (if any) of any element matching the CSS selector. If a matching
                                    element has no children, the HTML simply becomes the entire
                                    contents of the matching element.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>after-children</property></entry>
                            <entry>
                                <para>Inserts the specified HTML immediately after the last child
                                    (if any) of any element matching the CSS selector. If a matching
                                    element has no children, the HTML simply becomes the entire
                                    contents of the matching element.</para>
                            </entry>
                        </row>
                        <row>
                            <entry><property>replace-children</property></entry>
                            <entry>
                                <para>Replaces the entire contents of any element matching the CSS
                                    selector with the specified HTML.</para>
                            </entry>
                        </row>
                    </tbody>
                </tgroup>
            </informaltable>
            <para>For example, to add a welcome message and link to some corporate privacy policy (a
                fairly common need), you would add an HTML file like the following:</para>
            <informalexample>
                <programlisting>&lt;meta name="after" content=".login-ui .login-dialog">

&lt;div class="welcome">
    &lt;h2>Welcome to our Guacamole server!&lt;/h2>
    &lt;p>
        Please be sure to read our &lt;a href="/path/to/some/privacy.html">privacy
        policy&lt;/a> before continuing.
    &lt;/p>
&lt;/div></programlisting>
            </informalexample>
            <para>After the extension is installed and Guacamole is restarted, the "welcome" div and
                its contents will automatically be inserted directly below the login dialog (the
                only element that would match <code>.login-ui .login-dialog</code>) as if they were
                part of Guacamole's HTML in the first place.</para>
            <para>An example of an extension that modifies style and HTML components for the purpose
                of providing custom "branding" of the Guacamole interface can be found in the
                <filename>doc/guacamole-branding-example</filename> directory of the guacamole-client
                source code, which can be found here: <link
                    xlink:href="https://github.com/apache/guacamole-client/tree/master/doc/guacamole-branding-example"                                     >https://github.com/apache/guacamole-client/tree/master/doc/guacamole-branding-example</link>.</para>
        </section>
    </section>
    <section xml:id="ext-environment">
        <title>Accessing the server configuration</title>
        <para>The configuration of the Guacamole server is exposed through the
                <classname>Environment</classname> interface, specifically the
                <classname>LocalEnvironment</classname> implementation of this interface. Through
                <classname>Environment</classname>, you can access all properties declared within
                <filename>guacamole.properties</filename>, determine the proper hostname/port of
                <package>guacd</package>, and access the contents of
                <varname>GUACAMOLE_HOME</varname>.</para>
        <section xml:id="ext-simple-config">
            <title>Custom properties</title>
            <para>If your extension requires generic, unstructured configuration parameters,
                    <filename>guacamole.properties</filename> is a reasonable and simple location
                for them. The <classname>Environment</classname> interface provides direct access to
                    <filename>guacamole.properties</filename> and simple mechanisms for reading and
                parsing the properties therein. The value of a property can be retrieved calling
                    <methodname>getProperty()</methodname>, which will return
                    <constant>null</constant> or a default value for undefined properties, or
                    <methodname>getRequiredProperty()</methodname>, which will throw an exception
                for undefined properties.</para>
            <para>For convenience, guacamole-ext contains several pre-defined property base classes
                for common types:</para>
            <informaltable frame="all">
                <tgroup cols="3">
                    <colspec colname="c1" colnum="1" colwidth="2*"/>
                    <colspec colname="c2" colnum="2" colwidth="1*"/>
                    <colspec colname="c3" colnum="3" colwidth="4*"/>
                    <thead>
                        <row>
                            <entry>Class Name</entry>
                            <entry>Value Type</entry>
                            <entry>Interpretation</entry>
                        </row>
                    </thead>
                    <tbody>
                        <row>
                            <entry><classname>BooleanGuacamoleProperty</classname></entry>
                            <entry><classname>Boolean</classname></entry>
                            <entry>The values "true" and "false" are parsed as their corresponding
                                    <classname>Boolean</classname> values. Any other value results
                                in a parse error.</entry>
                        </row>
                        <row>
                            <entry><classname>IntegerGuacamoleProperty</classname></entry>
                            <entry><classname>Integer</classname></entry>
                            <entry>Numeric strings are parsed as <classname>Integer</classname>
                                values. Non-numeric strings will result in a parse error.</entry>
                        </row>
                        <row>
                            <entry><classname>LongGuacamoleProperty</classname></entry>
                            <entry><classname>Long</classname></entry>
                            <entry>Numeric strings are parsed as <classname>Long</classname> values.
                                Non-numeric strings will result in a parse error.</entry>
                        </row>
                        <row>
                            <entry><classname>StringGuacamoleProperty</classname></entry>
                            <entry><classname>String</classname></entry>
                            <entry>The property value is returned as an untouched
                                    <classname>String</classname>. No parsing is performed, and
                                parse errors cannot occur.</entry>
                        </row>
                        <row>
                            <entry><classname>FileGuacamoleProperty</classname></entry>
                            <entry><classname>File</classname></entry>
                            <entry>The property is interpreted as a filename, and a new
                                    <classname>File</classname> pointing to that filename is
                                returned. If the filename is invalid, a parse error will be thrown.
                                Note that the file need not exist or be accessible for the filename
                                to be valid.</entry>
                        </row>
                    </tbody>
                </tgroup>
            </informaltable>
            <para>To use these types, you must extend the base class, implementing the
                    <methodname>getName()</methodname> function to identify your property.
                Typically, you would declare these properties as static members of some class
                containing all properties relevant to your extension:</para>
            <informalexample>
                <programlisting>public class MyProperties {

    public static <replaceable>MY_PROPERTY</replaceable> = new IntegerGuacamoleProperty() {

        @Override
        public String getName() { return "<replaceable>my-property</replaceable>"; }

    };

}</programlisting>
            </informalexample>
            <para>Your property can then be retrieved with <methodname>getProperty()</methodname> or
                    <methodname>getRequiredProperty()</methodname>:</para>
            <informalexample>
                <programlisting>Integer value = environment.getProperty(<replaceable>MyProperties.MY_PROPERTY</replaceable>);</programlisting>
            </informalexample>
            <para>If you need more sophisticated parsing, you can also implement your own property
                types by implementing the <classname>GuacamoleProperty</classname> interface. The
                only functions to implement are <methodname>getName()</methodname>, which returns
                the name of the property, and <methodname>parseValue()</methodname>, which parses a
                given string and returns its value.</para>
        </section>
        <section xml:id="ext-advanced-config">
            <title>Advanced configuration</title>
            <para>If you need more structured data than provided by simple properties, you can place
                completely arbitrary files in a hierarchy of your choosing anywhere within
                    <varname>GUACAMOLE_HOME</varname> as long as you avoid placing your files in
                directories reserved for other purposes as described above.</para>
            <para>The Environment interface exposes the location of
                    <varname>GUACAMOLE_HOME</varname> through the
                    <methodname>getGuacamoleHome()</methodname> function. This function returns a
                standard Java <classname>File</classname> which can then be used to locate other
                files or directories within <varname>GUACAMOLE_HOME</varname>:</para>
            <informalexample>
                <programlisting>File myConfigFile = new File(environment.getGuacamoleHome(), "my-config.xml");</programlisting>
                <para>There is no guarantee that <varname>GUACAMOLE_HOME</varname> or your file will
                    exist, and you should verify this before proceeding further in your extension's
                    configuration process, but once this is done you can simply parse your file as
                    you see fit.</para>
            </informalexample>
        </section>
    </section>
    <section xml:id="ext-auth-providers">
        <title>Authentication providers</title>
        <para>Guacamole's authentication system is driven by authentication providers, which are
            classes which implement the <classname>AuthenticationProvider</classname> interface
            defined by guacamole-ext. When any page within Guacamole is visited, the following
            process occurs:</para>
        <orderedlist>
            <listitem>
                <para>All currently installed extensions are polled, in lexicographic order of their
                    filenames, by invoking the <methodname>getAuthenticatedUser()</methodname>
                    function with a <classname>Credentials</classname> object constructed with the
                    contents of the HTTP request.</para>
                <para>The credentials given are abstract. While the Credentials object provides
                    convenience access to a traditional username and password,
                        <emphasis>implementations are not required to use usernames and
                        passwords</emphasis>. The entire contents of the HTTP request is at your
                    disposal, including parameters, cookies, and SSL information.</para>
            </listitem>
            <listitem>
                <para>If an authentication attempt fails, the extension throws either a
                        <classname>GuacamoleInsufficientCredentialsException</classname> (if more
                    credentials are needed before validity can be determined) or
                        <classname>GuacamoleInvalidCredentialsException</classname> (if the
                    credentials are technically sufficient, but are invalid as provided). If all
                    extensions fail to authenticate the user, the contents of the exception thrown
                    by the first extension to fail are used to produce the user login prompt.</para>
                <para><emphasis>Note that this means there is no "login screen" in Guacamole per se;
                        the prompt for credentials for unauthenticated users is determined purely
                        based on the needs of the extension as declared within the authentication
                        failure itself.</emphasis></para>
                <para>If an authentication attempt succeeds, the extension returns an instance of
                        <classname>AuthenticatedUser</classname> describing the identity of the user
                    that just authenticated, and no further extensions are polled.</para>
            </listitem>
            <listitem>
                <para>If authentication has succeeded, and thus an
                        <classname>AuthenticatedUser</classname> is available, that
                        <classname>AuthenticatedUser</classname> is passed to the
                        <methodname>getUserContext()</methodname> function of all extensions'
                    authentication providers. Each extension now has the opportunity to provide
                    access to data for a user, even if that extension did not originally
                    authenticate the user. If no <classname>UserContext</classname> is returned for
                    the given <classname>AuthenticatedUser</classname>, then that extension has
                    simply refused to provide data for that user.</para>
                <para>The Guacamole interface will transparently unify the data from each extension,
                    providing the user with a view of all available connections. If the user has
                    permission to modify or administer any objects associated with an extension,
                    access to the administrative interface will be exposed as well, again with a
                    unified view of all applicable objects.</para>
            </listitem>
        </orderedlist>
        <important>
            <para>Because authentication is decoupled from data storage/access, <emphasis>you do not
                    need to implement full-blown data storage if you only wish to provide an
                    additional authentication mechanism</emphasis>. You can instead implement only
                the authentication portion of an <classname>AuthenticationProvider</classname>, and
                otherwise rely on the storage and features provided by other extensions, such as the
                    <link xmlns:xlink="http://www.w3.org/1999/xlink" linkend="jdbc-auth">database
                    authentication extension</link>.</para>
        </important>
        <para>The Guacamole web application includes a basic authentication provider implementation
            which parses an XML file to determine which users exist, their corresponding passwords,
            and what configurations those users have access to. This is the part of Guacamole that
            reads the <filename>user-mapping.xml</filename> file. If you use a custom authentication
            provider for your authentication, this file will probably not be required.</para>
        <para>The community has implemented authentication providers which access databases, use
            LDAP, or even perform no authentication at all, redirecting all users to a single
            configuration specified in <filename>guacamole.properties</filename>.</para>
        <para>A minimal authentication provider is implemented in the tutorials later, and the
            upstream authentication provider implemented within Guacamole, as well as the
            authentication providers implemented by the community, are good examples for how
            authentication can be extended without having to implement a whole new web
            application.</para>
        <section xml:id="ext-simple-auth">
            <title><classname>SimpleAuthenticationProvider</classname></title>
            <para>The <classname>SimpleAuthenticationProvider</classname> class provides a much
                simpler means of implementing authentication when you do not require the ability to
                add and remove users and connections. It is an abstract class and requires only one
                function implementation:
                <methodname>getAuthorizedConfigurations()</methodname>.</para>
            <para>This function is required to return a <classname>Map</classname> of unique IDs to
                configurations, where these configurations are all configurations accessible with
                the provided credentials. As before, the credentials given are abstract. You are not
                required to use usernames and passwords.</para>
            <para>The configurations referred to by the function name are instances of
                    <classname>GuacamoleConfiguration</classname> (part of guacamole-common), which
                is just a wrapper around a protocol name and set of parameter name/value pairs. The
                name of the protocol to use and a set of parameters is the minimum information
                required for other parts of the Guacamole API to complete the handshake required by
                the Guacamole protocol.</para>
            <para>When a class that extends <classname>SimpleAuthenticationProvider</classname> is
                asked for more advanced operations by the web application,
                    <classname>SimpleAuthenticationProvider</classname> simply returns that there is
                no permission to do so. This effectively disables all administrative functionality
                within the web interface.</para>
            <para>If you choose to go the simple route, most of the rest of this chapter is
                irrelevant. Permissions, security model, and various classes will be discussed that
                are all handled for you automatically by
                    <classname>SimpleAuthenticationProvider</classname>.</para>
        </section>
    </section>
    <section xml:id="ext-user-context">
        <title>The <classname>UserContext</classname></title>
        <para>The <classname>UserContext</classname> is the root of all data-related operations. It
            is used to list, create, modify, or delete users and connections, as well as to query
            available permissions. If an extension is going to provide access to data of any sort,
            it must do so through the <classname>UserContext</classname>.</para>
        <para>The Guacamole web application uses permissions queries against the
                <classname>UserContext</classname> to determine what operations to present, but
                <emphasis>beware that it is up to the <classname>UserContext</classname> to actually
                enforce these restrictions</emphasis>. The Guacamole web application will not
            enforce restrictions on behalf of the <classname>UserContext</classname>.</para>
        <para>The <classname>UserContext</classname> is the sole means of entry and the sole means
            of modification available to a logged-in user. If the <classname>UserContext</classname>
            refuses to perform an operation (by throwing an exception), the user cannot perform the
            operation at all.</para>
    </section>
    <section xml:id="ext-object-directories">
        <title><classname>Directory</classname> classes</title>
        <para>Access to objects beneath the <classname>UserContext</classname> is given through
                <classname>Directory</classname> classes. These <classname>Directory</classname>
            classes are similar to Java collections, but they also embody update and batching
            semantics. Objects can be retrieved from a <classname>Directory</classname> using its
                <methodname>get()</methodname> function and added or removed with
                <methodname>add()</methodname> and <methodname>remove()</methodname> respectively,
            but objects already in the set can also be updated by passing an updated object to its
                <methodname>update()</methodname> function.</para>
        <para>An implementation of a <classname>Directory</classname> can rely on these functions to
            define the semantics surrounding all operations. The <methodname>add()</methodname>
            function is called only when creating new objects, the <methodname>update()</methodname>
            function is called only when updating an object previously retrieved with
                <methodname>get()</methodname>, and <methodname>remove()</methodname> is called only
            when removing an existing object by its identifier.</para>
        <para>When implementing an <classname>AuthenticationProvider</classname>, you must ensure
            that the <classname>UserContext</classname> will only return
                <classname>Directory</classname> classes that automatically enforce the permissions
            associated with all objects and the associated user.</para>
    </section>
    <section xml:id="ext-rest-resources">
        <title>REST resources</title>
        <para>Arbitrary REST resources may be exposed by extensions at the
                <classname>AuthenticationProvider</classname> level, if the resource does not
            require an associated authenticated user, or at the <classname>UserContext</classname>
            level, if the resource should be available to authenticated users only. In both cases,
            the REST resource is provided through implementing the
                <function>getResource()</function> function, returning an object which is annotated
            with JAX-RS annotations (JSR 311).</para>
        <para>The resource returned by <function>getResource()</function> functions as the root
            resource, providing access to other resources beneath itself. The root resource for the
                <classname>AuthenticationProvider</classname> is exposed at
                    <uri><replaceable>PATH</replaceable>/api/ext/<replaceable>IDENTIFIER</replaceable></uri>,
            and the root resource for the <classname>UserContext</classname> is exposed at
                    <uri><replaceable>PATH</replaceable>/api/session/ext/<replaceable>IDENTIFIER</replaceable></uri>,
            where <replaceable>PATH</replaceable> is the path to which Guacamole has been deployed
            (typically <uri>/guacamole/</uri>) and <replaceable>IDENTIFIER</replaceable> is the
            unique identifier for the <classname>AuthenticationProvider</classname>, as returned by
                <function>getIdentifier()</function>.</para>
        <para>The behavior of extension REST resources is generally left entirely to the
            implementation, with the exception that the "token" request parameter is reserved for
            use by Guacamole. This parameter contains the user's authentication token when the user
            is logged in, and must be present on all requests which require authentication. Though
            not relevant to REST resources exposed at the
                <classname>AuthenticationProvider</classname> level, resources exposed at the
                <classname>UserContext</classname> level inherently require the "token" parameter to
            be present, as it is the sole means of locating the user's session.</para>
    </section>
    <section xml:id="ext-permissions">
        <title>Permissions</title>
        <para>The permissions system within guacamole-ext is an advisory system. It is the means by
            which an authentication module describes to the web application what a user is allowed
            to do. The body of permissions granted to a user describes which objects that user can
            see and what they can do to those objects, and thus suggests how the Guacamole interface
            should appear to that user.</para>
        <para><emphasis>Permissions are not the means by which access is restricted</emphasis>; they
            are purely a means of describing access level. An implementation may internally use the
            permission objects to define restrictions, but this is not required. It is up to the
            implementation to enforce its own restrictions by throwing exceptions when an operation
            is not allowed, and to correctly communicate the abilities of individual users through
            these permissions.</para>
        <para>The permissions available to a user are exposed through the
                <classname>SystemPermissionSet</classname> and
                <classname>ObjectPermissionSet</classname> classes which are accessible through the
                <classname>UserContext</classname>. These classes also serve as the means for
            manipulating the permissions granted to a user.</para>
        <section>
            <title xml:id="ext-system-permissions">System permissions</title>
            <para>System permissions describe access to operations that manipulate the system as a
                whole, rather than specific objects. This includes the creation of new objects, as
                object creation directly affects the system, and per-object controls cannot exist
                before the object is actually created.</para>
            <variablelist>
                <varlistentry>
                    <term><constant>ADMINISTER</constant></term>
                    <listitem>
                        <para>The user is a super-user - the Guacamole equivalent of root. They are
                            allowed to manipulate of system-level permissions and all other objects.
                            This permission implies all others.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>CREATE_CONNECTION</constant></term>
                    <listitem>
                        <para>The user is allowed to create new connections. If a user has this
                            permission, the management interface will display components related to
                            connection creation.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>CREATE_CONNECTION_GROUP</constant></term>
                    <listitem>
                        <para>The user is allowed to create new connection groups. If a user has
                            this permission, the management interface will display components
                            related to connection group creation.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>CREATE_SHARING_PROFILE</constant></term>
                    <listitem>
                        <para>The user is allowed to create new sharing profiles. If a user has this
                            permission, the management interface will display components related to
                            sharing profile creation.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>CREATE_USER</constant></term>
                    <listitem>
                        <para>The user is allowed to create other users. If a user has this
                            permission, the management interface will display components related to
                            user creation.</para>
                    </listitem>
                </varlistentry>
            </variablelist>
        </section>
        <section>
            <title xml:id="ext-object-permissions">Object permissions</title>
            <para>Object permissions describe access to operations that affect a particular object.
                Guacamole currently defines four types of objects which can be associated with
                permissions: users, connections, connection groups, and sharing profiles. Each
                object permission associates a single user with an action that may be performed on a
                single object.</para>
            <variablelist>
                <varlistentry>
                    <term><constant>ADMINISTER</constant></term>
                    <listitem>
                        <para>The user may grant or revoke permissions involving this object.
                            "Involving", in this case, refers to either side of the permission
                            association, and includes both the user to whom the permission is
                            granted and the object the permission affects.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>DELETE</constant></term>
                    <listitem>
                        <para>The user may delete this object. This is distinct from the
                                <constant>ADMINISTER</constant> permission which deals only with
                            permissions. A user with this permission will see the "Delete" button
                            when applicable.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>READ</constant></term>
                    <listitem>
                        <para>The user may see that this object exists and read the properties of
                            that object.</para>
                        <para>Note that the implementation is <emphasis>not required to divulge the
                                true underlying properties of any object</emphasis>. The parameters
                            of a connection or sharing profile, the type or contents of a connection
                            group, the password of a user, etc. all need not be exposed.</para>
                        <para>This is particularly important from the perspective of security when
                            it comes to connections, as the parameters of a connection are only
                            truly needed when a connection is being modified, and likely should not
                            be exposed otherwise. The actual connection operation is always
                            performed internally by the authentication provider, and thus does not
                            require client-side knowledge of anything beyond the connection's
                            existence.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><constant>UPDATE</constant></term>
                    <listitem>
                        <para>The user may change the properties of this object.</para>
                        <para>In the case of users, this means the user's password can be altered.
                                <emphasis>Permissions are not considered properties of a
                                user</emphasis>, nor objects in their own right, but rather
                            associations between a user and an action which may involve another
                            object.</para>
                        <para>The properties of a connection include its name, protocol, parent
                            connection group, and parameters. The properties of a connection group
                            include its name, type, parent connection group, and children. The
                            properties of a sharing profile include its name, primary connection,
                            and parameters.</para>
                    </listitem>
                </varlistentry>
            </variablelist>
        </section>
    </section>
    <section xml:id="ext-connections">
        <title>Connections</title>
        <para>Guacamole connections are organized in a hierarchy made up of connection groups, which
            each act as folders organizing the connections themselves. The hierarchy is accessed
            through the root-level connection group, exposed by
                <methodname>getRootConnectionGroup()</methodname> by the
                <classname>UserContext</classname>. The connections and connection groups exposed
            beneath the root connection group must also be accessible directly through the
            connection and connection group directories exposed by
                <methodname>getConnectionDirectory()</methodname> and
                <methodname>getConnectionGroupDirectory()</methodname> of the
                <classname>UserContext</classname>.</para>
        <para>When a user attempts to use a connection the <methodname>connect()</methodname> of the
            associated <classname>Connection</classname> object will be invoked. It is then up to
            the implementation of this function to establish the TCP connection to guacd, perform
            the connection handshake (most likely via an <classname>InetGuacamoleSocket</classname>
            wrapped within a <classname>ConfiguredGuacamoleSocket</classname>), and then return a
                <classname>GuacamoleTunnel</classname> which controls access to the established
            socket.</para>
        <para>Extensions may maintain historical record of connection use via
                <classname>ConnectionRecord</classname> objects, which are exposed both at the
                <classname>Connection</classname> level and across all connections via the
                <classname>UserContext</classname>. Such record maintenance is optional, and it is
            expected that most implementations will simply return empty lists.</para>
        <important>
            <para>If connection state will not be tracked by the extension, and the parameters
                associated with the connection will be known at the time the connection object is
                created, the <classname>SimpleConnection</classname> implementation of
                    <classname>Connection</classname> can be used to make life easier.</para>
        </important>
    </section>
    <section xml:id="ext-active-connections">
        <title>Managing/sharing active connections</title>
        <para>After a connection has been established, its underlying
                <classname>GuacamoleTunnel</classname> can be exposed by a
                <classname>UserContext</classname> through the <classname>Directory</classname>
            returned by <methodname>getActiveConnectionDirectory()</methodname>. The
                <classname>ActiveConnection</classname> objects accessible through this
                <classname>Directory</classname> are the means by which an administrator may monitor
            or forcibly terminate another user's connection, ultimately resulting in Guacamole
            invoking the <methodname>close()</methodname> function of the underlying
                <classname>GuacamoleTunnel</classname>, and also serve as the basis for screen
            sharing.</para>
        <para>Screen sharing is implemented through the use of <classname>SharingProfile</classname>
            objects, exposed through yet another <classname>Directory</classname> beneath the
                <classname>UserContext</classname>. Each sharing profile is associated with a single
            connection that it can be used to share, referred to as the "primary connection". If a
            user has read access to a sharing profile associated with their current connection, that
            sharing profile will be displayed as an option within <link
                xmlns:xlink="http://www.w3.org/1999/xlink" linkend="client-share-menu">the share
                menu of the Guacamole menu</link>.</para>
        <para>The overall sharing process is as follows:</para>
        <orderedlist>
            <listitem>
                <para>A user, having access to a sharing profile associated with their current
                    active connection, clicks its option within the <link
                        xmlns:xlink="http://www.w3.org/1999/xlink" linkend="client-share-menu">share
                        menu</link>.</para>
            </listitem>
            <listitem>
                <para>Guacamole locates the <classname>ActiveConnection</classname> and invokes its
                        <methodname>getSharingCredentials()</methodname> function with the
                    identifier of the sharing profile. The contents of the returned
                        <classname>UserCredentials</classname> object is used by Guacamole to
                    generate a sharing link which can be given to other users.</para>
            </listitem>
            <listitem>
                <para>When another user visits the sharing link, the credentials embedded in the
                    link are passed to the authentication providers associated with each installed
                    extension. <emphasis>It is up to the extension that originally provided those
                        credentials to authenticate the user and provide them with access to the
                        shared connection.</emphasis></para>
            </listitem>
            <listitem>
                <para>When the user attempts to connect to the shared connection, the extension
                    establishes the connection using the ID of the connection being joined.
                        <emphasis>This is not the connection identifier as dictated by
                        guacamole-ext, but rather <link xmlns:xlink="http://www.w3.org/1999/xlink"
                            linkend="guacamole-protocol-joining">the unique ID assigned by guacd as
                            required by the Guacamole protocol</link>.</emphasis> This ID can be
                    retrieved from a <methodname>ConfiguredGuacamoleSocket</methodname> via
                        <methodname>getConnectionID()</methodname>, and can be passed through a
                        <methodname>GuacamoleConfiguration</methodname> through
                        <methodname>setConnectionID()</methodname> (instead of specifying a
                    protocol, as would be done for a brand new connection).</para>
            </listitem>
        </orderedlist>
    </section>
</chapter>
