Hello,
I’m currently trying to write a simple extension for guacamole that allows for
push notifications through web hooks. The extension of course relies a lot on
guacamole's event listeners. The documentation shows a very simple example
(TutorialListener.java) of these event listeners which I have added to the
`guacamole-client/extensions/` folder, compiled and then added the extension
jar to the extensions folder of my guacamole instance. This example runs just
fine and produces debugging output as expected. But when I try to extend the
functionality, even just to store a copy of the `AuthenticationProvider` object
from the event after including the `import
org.apache.guacamole.net.auth.AuthenticationProvider;` line at the top of the
file, I am able to compile the extension but then at runtime I get the
following: `Unexpected internal error:
'org.apache.guacamole.net.auth.AuthenticationProvider
org.apache.guacamole.net.event.AuthenticationFailureEvent.getAuthenticationProvider()'`.
I started looking through the code and I have found that there is a
`.getAuthenticationProvider()` function in the
`AuthenticationFailureEvent.java` file so I know that I’m using the write
function. I also found similar instances of the `AuthenticationFailureEvent`
being used in the `EventLoggingListener.java` file and tried to replicate the
imports and logic used for the guacamole-client. Do I need to do something
special to get proper access to the object types?
I have included the tutorial example with the problematic line notated. That
line is the only one added from the off-the-shelf tutorial. If I comment it
out, it runs perfectly fine. If I uncomment it, it throws the error mentioned
above.
Thanks!
Code:
package org.apache.guacamole.event;
import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.net.auth.AuthenticationProvider;
import org.apache.guacamole.net.event.AuthenticationFailureEvent;
import org.apache.guacamole.net.event.AuthenticationSuccessEvent;
import org.apache.guacamole.net.event.listener.Listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A Listener that logs authentication success and failure events.
*/
public class Notifier implements Listener {
private static final Logger logger =
LoggerFactory.getLogger(Notifier.class);
@Override
public void handleEvent(Object event) throws GuacamoleException {
if (event instanceof AuthenticationSuccessEvent) {
logger.info("successful authentication for user {}",
((AuthenticationSuccessEvent) event)
.getCredentials().getUsername());
} else if (event instanceof AuthenticationFailureEvent) {
logger.info("failed authentication for user {}",
((AuthenticationFailureEvent) event)
.getCredentials().getUsername());
// Problematic line:
AuthenticationProvider authProvider = ((AuthenticationFailureEvent)
event).getAuthenticationProvider();
}
}
}