As described in the discussion surrounding the original pull request:
* An extension throws `GuacamoleInsufficientCredentialsException`
specifically to indicate tentative acceptance of the credentials
passed thus far.
* Just as such an extension that fully accepts credentials takes
priority over an extension that refuses to accept the same, it makes
sense to allow an extension that *tentatively* accepts those credentials
to also take priority.
With the above perspective, authentication result priorities are as
follows, with ties broken by the inherent order of the auth providers:
1. Acceptance (returning an `AuthenticedUser` instance).
2. Tentative acceptance (throwing
`GuacamoleInvalidCredentialsException`).
3. Complete refusal (any other subclass of
`GuacamoleCredentialsException`).
4. Neither refusal nor acceptance (returning `null`).
See: https://github.com/apache/guacamole-client/pull/352
Enclosing the entire field within the <label> results in problems when
the field is large and when the field contains multiple interactive
elements. Clicking within interactive elements of a complex field
triggers the <label>, refocusing the first input element. If the field
is large, the <label> will contain empty space which also refocuses the
input field upon being clicked, despite appearing to be the background
of the page.
$evalAsync() does not necessarily guarantee execution within a timer;
the provided function may well execute after the current $digest loop
without control returning to the browser. If we need a timer to ensure
focus() behaves reliably, we should explicitly use one via $timeout.
There is an unassignable expression in the form directive that was being assinged a value by the guacFocus directive. The part that deals with this assigning is removed since no part of the app is relying upon this feature.
Commit f92bf9c moved the getClientIdentifier() function to the
GroupListItem class, thus making the function available as
item.getClientIdentifier() within the connection or connection group
templates referenced by an instance of the guacGroupList directive.
This change correctly updated all but the connection group template for
the home screen, which was incorrectly updated to reference the
function as if it were directly on the scope. As such a function
doesn't exist, AngularJS didn't substitute any value, resulting in a
non-functional link.