Remove trailing whitespace.

This commit is contained in:
Michael Jumper
2012-08-09 11:08:20 -07:00
parent 917d532431
commit bdd0ab250f
12 changed files with 104 additions and 104 deletions

View File

@@ -27,32 +27,32 @@ import org.slf4j.LoggerFactory;
* Abstract servlet which provides an authenticatedService() function that
* is only called if the HTTP request is authenticated, or the current
* HTTP session has already been authenticated.
*
*
* Authorized configurations are retrieved using the authentication provider
* defined in guacamole.properties. The authentication provider has access
* to the request and session, in addition to any submitted username and
* password, in order to authenticate the user.
*
*
* All authorized configurations will be stored in the current HttpSession.
*
*
* Success and failure are logged.
*
*
* @author Michael Jumper
*/
public abstract class AuthenticatingHttpServlet extends HttpServlet {
private Logger logger = LoggerFactory.getLogger(AuthenticatingHttpServlet.class);
/**
* The session attribute holding the map of configurations.
*/
private static final String CONFIGURATIONS_ATTRIBUTE = "GUAC_CONFIGS";
/**
* The session attribute holding the credentials authorizing this session.
*/
private static final String CREDENTIALS_ATTRIBUTE = "GUAC_CREDS";
/**
* The AuthenticationProvider to use to authenticate all requests.
*/
@@ -75,16 +75,16 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
/**
* Notifies all listeners in the given collection that authentication has
* failed.
*
*
* @param listeners A collection of all listeners that should be notified.
* @param credentials The credentials associated with the authentication
* request that failed.
*/
private void notifyFailed(Collection listeners, Credentials credentials) {
// Build event for auth failure
AuthenticationFailureEvent event = new AuthenticationFailureEvent(credentials);
// Notify all listeners
for (Object listener : listeners) {
try {
@@ -95,13 +95,13 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
logger.error("Error notifying AuthenticationFailureListener.", e);
}
}
}
/**
* Notifies all listeners in the given collection that authentication was
* successful.
*
*
* @param listeners A collection of all listeners that should be notified.
* @param credentials The credentials associated with the authentication
* request that succeeded.
@@ -116,10 +116,10 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
*/
private boolean notifySuccess(Collection listeners, Credentials credentials)
throws GuacamoleException {
// Build event for auth success
AuthenticationSuccessEvent event = new AuthenticationSuccessEvent(credentials);
// Notify all listeners
for (Object listener : listeners) {
if (listener instanceof AuthenticationSuccessListener) {
@@ -127,28 +127,28 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
// Cancel immediately if hook returns false
if (!((AuthenticationSuccessListener) listener).authenticationSucceeded(event))
return false;
}
}
return true;
}
/**
* Sends a predefined, generic error message to the user, along with a
* "403 - Forbidden" HTTP status code in the response.
*
*
* @param response The response to send the error within.
* @throws IOException If an error occurs while sending the error.
*/
private void failAuthentication(HttpServletResponse response) throws IOException {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
}
/**
* Returns the credentials associated with the given session.
*
*
* @param session The session to retrieve credentials from.
* @return The credentials associated with the given session.
*/
@@ -158,14 +158,14 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
/**
* Returns the configurations associated with the given session.
*
*
* @param session The session to retrieve configurations from.
* @return The configurations associated with the given session.
*/
protected Map<String, GuacamoleConfiguration> getConfigurations(HttpSession session) {
return (Map<String, GuacamoleConfiguration>) session.getAttribute(CONFIGURATIONS_ATTRIBUTE);
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
@@ -188,7 +188,7 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
failAuthentication(response);
return;
}
// Retrieve username and password from parms
String username = request.getParameter("username");
String password = request.getParameter("password");
@@ -207,7 +207,7 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
/******** HANDLE FAILED AUTHENTICATION ********/
// If error retrieving configs, fail authentication, notify listeners
catch (GuacamoleException e) {
logger.error("Error retrieving configuration(s) for user \"{}\".",
@@ -217,12 +217,12 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
failAuthentication(response);
return;
}
// If no configs, fail authentication, notify listeners
if (configs == null) {
logger.warn("Authentication attempt from {} for user \"{}\" failed.",
request.getRemoteAddr(), credentials.getUsername());
notifyFailed(listeners, credentials);
failAuthentication(response);
return;
@@ -230,7 +230,7 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
/******** HANDLE SUCCESSFUL AUTHENTICATION ********/
try {
// Otherwise, authentication has been succesful
@@ -243,15 +243,15 @@ public abstract class AuthenticatingHttpServlet extends HttpServlet {
failAuthentication(response);
return;
}
}
catch (GuacamoleException e) {
// Cancel authentication success if hook throws exception
logger.error("Successful authentication canceled by error in hook.", e);
failAuthentication(response);
return;
}
// Associate configs and credentials with session

View File

@@ -48,13 +48,13 @@ import org.xml.sax.helpers.XMLReaderFactory;
* Authenticates users against a static list of username/password pairs.
* Each username/password may be associated with multiple configurations.
* This list is stored in an XML file which is reread if modified.
*
*
* @author Michael Jumper, Michal Kotas
*/
public class BasicFileAuthenticationProvider implements AuthenticationProvider {
private Logger logger = LoggerFactory.getLogger(BasicFileAuthenticationProvider.class);
private long mappingTime;
private Map<String, AuthInfo> mapping;
@@ -83,7 +83,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
throw new GuacamoleException("Missing \"basic-user-mapping\" parameter required for basic login.");
logger.info("Reading user mapping file: {}", mapFile);
// Parse document
try {
@@ -132,7 +132,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
// If no mapping available, report as such
if (mapping == null)
throw new GuacamoleException("User mapping could not be read.");
// Validate and return info for given user and pass
AuthInfo info = mapping.get(credentials.getUsername());
if (info != null && info.validate(credentials.getUsername(), credentials.getPassword()))
@@ -297,7 +297,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
}
break;
case CONNECTION:
if (localName.equals("connection")) {
@@ -305,7 +305,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
return;
}
break;
break;
case PROTOCOL:
@@ -400,7 +400,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
currentConnection = attributes.getValue("name");
if (currentConnection == null)
throw new SAXException("Attribute \"name\" required for connection tag.");
// Next state
state = State.CONNECTION;
return;
@@ -410,7 +410,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
// Associate protocol with default connection
currentConnection = "DEFAULT";
// Next state
state = State.DEFAULT_CONNECTION_PROTOCOL;
return;
@@ -420,7 +420,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
// Associate parameter with default connection
currentConnection = "DEFAULT";
currentParameter = attributes.getValue("name");
if (currentParameter == null)
throw new SAXException("Attribute \"name\" required for param tag.");
@@ -431,7 +431,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
}
break;
case CONNECTION:
if (localName.equals("protocol")) {
@@ -451,7 +451,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
return;
}
break;
break;
}
@@ -463,7 +463,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
public void characters(char[] ch, int start, int length) throws SAXException {
String str = new String(ch, start, length);
switch (state) {
case PROTOCOL:
@@ -479,7 +479,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider {
current.getConfiguration(currentConnection)
.setParameter(currentParameter, str);
return;
}
if (str.trim().length() != 0)

View File

@@ -46,7 +46,7 @@ import org.slf4j.LoggerFactory;
/**
* Connects users to a tunnel associated with the authorized configuration
* having the given ID.
*
*
* @author Michael Jumper
*/
public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
@@ -58,16 +58,16 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
Map<String, GuacamoleConfiguration> configs,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// If authenticated, respond as tunnel
tunnelServlet.service(request, response);
}
/**
* Notifies all listeners in the given collection that a tunnel has been
* connected.
*
*
* @param listeners A collection of all listeners that should be notified.
* @param credentials The credentials associated with the authentication
* request that connected the tunnel.
@@ -83,10 +83,10 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
private boolean notifyConnect(Collection listeners,
Credentials credentials, GuacamoleTunnel tunnel)
throws GuacamoleException {
// Build event for auth success
TunnelConnectEvent event = new TunnelConnectEvent(credentials, tunnel);
// Notify all listeners
for (Object listener : listeners) {
if (listener instanceof TunnelConnectListener) {
@@ -94,18 +94,18 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
// Cancel immediately if hook returns false
if (!((TunnelConnectListener) listener).tunnelConnected(event))
return false;
}
}
return true;
}
/**
* Notifies all listeners in the given collection that a tunnel has been
* closed.
*
*
* @param listeners A collection of all listeners that should be notified.
* @param credentials The credentials associated with the authentication
* request that closed the tunnel.
@@ -121,10 +121,10 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
private boolean notifyClose(Collection listeners,
Credentials credentials, GuacamoleTunnel tunnel)
throws GuacamoleException {
// Build event for auth success
TunnelCloseEvent event = new TunnelCloseEvent(credentials, tunnel);
// Notify all listeners
for (Object listener : listeners) {
if (listener instanceof TunnelCloseListener) {
@@ -132,12 +132,12 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
// Cancel immediately if hook returns false
if (!((TunnelCloseListener) listener).tunnelClosed(event))
return false;
}
}
return true;
}
/**
@@ -150,7 +150,7 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
protected GuacamoleTunnel doConnect(HttpServletRequest request) throws GuacamoleException {
HttpSession httpSession = request.getSession(true);
// Get listeners
final SessionListenerCollection listeners;
try {
@@ -163,10 +163,10 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
// Get ID of connection
String id = request.getParameter("id");
// Get credentials
final Credentials credentials = getCredentials(httpSession);
// Get authorized configs
Map<String, GuacamoleConfiguration> configs = getConfigurations(httpSession);
@@ -180,7 +180,7 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
logger.warn("Configuration id={} not found.", id);
throw new GuacamoleSecurityException("Requested configuration is not authorized.");
}
logger.info("Successful connection from {} to \"{}\".", request.getRemoteAddr(), id);
// Configure and connect socket
@@ -201,12 +201,12 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
// Only close if not canceled
if (!notifyClose(listeners, credentials, this))
throw new GuacamoleException("Tunnel close canceled by listener.");
// Close if no exception due to listener
super.close();
}
};
// Notify listeners about connection
@@ -214,7 +214,7 @@ public class BasicGuacamoleTunnelServlet extends AuthenticatingHttpServlet {
logger.info("Connection canceled by listener.");
return null;
}
return tunnel;
}

View File

@@ -29,13 +29,13 @@ import org.slf4j.LoggerFactory;
/**
* Simple dummy AuthenticatingHttpServlet which provides an endpoint for arbitrary
* authentication requests that do not expect a response.
*
*
* @author Michael Jumper
*/
public class BasicLogin extends AuthenticatingHttpServlet {
private Logger logger = LoggerFactory.getLogger(BasicLogin.class);
@Override
protected void authenticatedService(
Map<String, GuacamoleConfiguration> configs,

View File

@@ -27,7 +27,7 @@ import javax.servlet.http.HttpSession;
/**
* Logs out the current user by invalidating the associated HttpSession and
* redirecting the user to the login page.
*
*
* @author Michael Jumper
*/
public class BasicLogout extends HttpServlet {

View File

@@ -31,7 +31,7 @@ import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
/**
* Simple HttpServlet which outputs XML containing a list of all authorized
* configurations for the current user.
*
*
* @author Michael Jumper
*/
public class ConfigurationList extends AuthenticatingHttpServlet {
@@ -44,12 +44,12 @@ public class ConfigurationList extends AuthenticatingHttpServlet {
// Do not cache
response.setHeader("Cache-Control", "no-cache");
// Write XML
response.setHeader("Content-Type", "text/xml");
PrintWriter out = response.getWriter();
out.println("<configs>");
for (Entry<String, GuacamoleConfiguration> entry : configs.entrySet()) {
GuacamoleConfiguration config = entry.getValue();

View File

@@ -54,18 +54,18 @@ import net.sourceforge.guacamole.properties.GuacamoleProperties;
/**
* A ClassLoader implementation which finds classes within a configurable
* directory. This directory is set within guacamole.properties.
*
*
* @author Michael Jumper
*/
public class GuacamoleClassLoader extends ClassLoader {
private URLClassLoader classLoader = null;
private static GuacamoleException exception = null;
private static GuacamoleClassLoader instance = null;
static {
try {
// Attempt to create singleton classloader which loads classes from
// all .jar's in the lib directory defined in guacamole.properties
@@ -80,12 +80,12 @@ public class GuacamoleClassLoader extends ClassLoader {
});
}
catch (PrivilegedActionException e) {
// On error, record exception
exception = (GuacamoleException) e.getException();
}
}
private GuacamoleClassLoader(File libDirectory) throws GuacamoleException {
@@ -93,37 +93,37 @@ public class GuacamoleClassLoader extends ClassLoader {
// If no directory provided, just direct requests to parent classloader
if (libDirectory == null)
return;
// Validate directory is indeed a directory
if (!libDirectory.isDirectory())
throw new GuacamoleException(libDirectory + " is not a directory.");
// Get list of URLs for all .jar's in the lib directory
Collection<URL> jarURLs = new ArrayList<URL>();
for (File file : libDirectory.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// If it ends with .jar, accept the file
return name.endsWith(".jar");
}
})) {
try {
// Add URL for the .jar to the jar URL list
jarURLs.add(file.toURI().toURL());
}
catch (MalformedURLException e) {
throw new GuacamoleException(e);
}
}
// Set delegate classloader to new URLClassLoader which loads from the
// .jars found above.
@@ -132,22 +132,22 @@ public class GuacamoleClassLoader extends ClassLoader {
jarURLs.toArray(urls),
getClass().getClassLoader()
);
}
/**
* Returns an instance of a GuacamoleClassLoader which finds classes
* within the directory configured in guacamole.properties.
*
*
* @return An instance of a GuacamoleClassLoader.
* @throws GuacamoleException If no instance could be returned due to an
* error.
*/
public static GuacamoleClassLoader getInstance() throws GuacamoleException {
// If instance could not be created, rethrow original exception
if (exception != null) throw exception;
return instance;
}
@@ -158,7 +158,7 @@ public class GuacamoleClassLoader extends ClassLoader {
// If no classloader, use default loader
if (classLoader == null)
return Class.forName(name);
// Otherwise, delegate
return classLoader.loadClass(name);

View File

@@ -32,11 +32,11 @@ import org.slf4j.LoggerFactory;
* Simple ServletContextListener which loads a WebSocket tunnel implementation
* if available, using the Servlet 3.0 API to dynamically load and install
* the tunnel servlet.
*
*
* Note that because Guacamole depends on the Servlet 2.5 API, and 3.0 may
* not be available or needed if WebSocket is not desired, the 3.0 API is
* detected and invoked dynamically via reflection.
*
*
* @author Michael Jumper
*/
public class WebSocketSupportLoader implements ServletContextListener {
@@ -55,7 +55,7 @@ public class WebSocketSupportLoader implements ServletContextListener {
// Attempt to find WebSocket servlet
Class<Servlet> servlet = (Class<Servlet>) GuacamoleClassLoader.getInstance().findClass(
"net.sourceforge.guacamole.net.basic.BasicGuacamoleWebSocketTunnelServlet"
);
);
// Dynamically add servlet IF SERVLET 3.0 API AVAILABLE!
try {

View File

@@ -17,7 +17,7 @@ import net.sourceforge.guacamole.properties.GuacamoleProperties;
* collection is stored within the HttpSession, and will be reused if available.
* Each listener is instantiated once per session. Listeners are singleton
* classes within the session, but not globally.
*
*
* @author Michael Jumper
*/
public class SessionListenerCollection extends AbstractCollection {
@@ -33,19 +33,19 @@ public class SessionListenerCollection extends AbstractCollection {
* session.
*/
private Collection listeners;
/**
* Creates a new SessionListenerCollection which stores all listeners
* defined in guacamole.properties in the provided session. If listeners
* are already stored in the provided session, those listeners are used
* instead.
*
*
* @param session The HttpSession to store listeners within.
* @throws GuacamoleException If an error occurs while instantiating new
* listeners.
*/
public SessionListenerCollection(HttpSession session) throws GuacamoleException {
// Pull cached listeners from session
listeners = (Collection) session.getAttribute(SESSION_ATTRIBUTE);
@@ -96,11 +96,11 @@ public class SessionListenerCollection extends AbstractCollection {
// Store listeners for next time
session.setAttribute(SESSION_ATTRIBUTE, listeners);
}
}
@Override
public Iterator iterator() {
return listeners.iterator();
@@ -110,5 +110,5 @@ public class SessionListenerCollection extends AbstractCollection {
public int size() {
return listeners.size();
}
}

View File

@@ -27,7 +27,7 @@ import net.sourceforge.guacamole.properties.GuacamoleProperty;
/**
* A GuacamoleProperty whose value is the name of a class to use to
* authenticate users. This class must implement AuthenticationProvider.
*
*
* @author Michael Jumper
*/
public abstract class AuthenticationProviderProperty implements GuacamoleProperty<AuthenticationProvider> {

View File

@@ -23,7 +23,7 @@ import net.sourceforge.guacamole.properties.FileGuacamoleProperty;
/**
* Properties used by the default Guacamole web application.
*
*
* @author Michael Jumper
*/
public class BasicGuacamoleProperties {

View File

@@ -27,7 +27,7 @@ import net.sourceforge.guacamole.properties.GuacamoleProperty;
/**
* A GuacamoleProperty whose value is a comma-separated list of class names,
* where each class will be used as a listener for events.
*
*
* @author Michael Jumper
*/
public abstract class EventListenersProperty implements GuacamoleProperty<Collection<Class>> {
@@ -41,7 +41,7 @@ public abstract class EventListenersProperty implements GuacamoleProperty<Collec
// Parse list
String[] classNames = classNameList.split(",[\\s]*");
// Fill list of classes
Collection<Class> listeners = new ArrayList<Class>();
try {