From c559f4ae3318be9ba42ea425ef7203118a73ba07 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 14 Aug 2011 19:38:05 -0700 Subject: [PATCH] Added UserConfiguration, refactored auth into own package. --- .../net/auth/AuthenticationProvider.java | 10 +++++++ .../guacamole/net/auth/UserConfiguration.java | 13 +++++++++ .../net/basic/AuthenticationProvider.java | 11 ------- .../BasicFileAuthenticationProvider.java | 26 +++++++++++------ .../basic/BasicGuacamoleTunnelServlet.java | 13 ++++----- .../guacamole/net/basic/BasicLogin.java | 20 +++++-------- .../net/basic/BasicUserConfiguration.java | 29 +++++++++++++++++++ .../net/basic/ConfigurationList.java | 19 ++++++------ .../AuthenticationProviderProperty.java | 2 +- 9 files changed, 93 insertions(+), 50 deletions(-) create mode 100644 guacamole/src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java create mode 100644 guacamole/src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java delete mode 100644 guacamole/src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java create mode 100644 guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java new file mode 100644 index 000000000..baf2db9d2 --- /dev/null +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java @@ -0,0 +1,10 @@ + +package net.sourceforge.guacamole.net.auth; + +import net.sourceforge.guacamole.GuacamoleException; + +public interface AuthenticationProvider { + + public UserConfiguration getUserConfiguration(String username, String password) throws GuacamoleException; + +} diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java new file mode 100644 index 000000000..705cf524e --- /dev/null +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java @@ -0,0 +1,13 @@ + +package net.sourceforge.guacamole.net.auth; + +import java.util.Collection; +import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; + +public interface UserConfiguration { + + public GuacamoleConfiguration getConfiguration(String id); + + public Collection listConfigurations(); + +} diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java deleted file mode 100644 index 19a622837..000000000 --- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java +++ /dev/null @@ -1,11 +0,0 @@ - -package net.sourceforge.guacamole.net.basic; - -import net.sourceforge.guacamole.GuacamoleException; -import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; - -public interface AuthenticationProvider { - - public GuacamoleConfiguration getAuthorizedConfiguration(String username, String password) throws GuacamoleException; - -} diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java index a00d6eeb2..1d4010706 100644 --- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java @@ -19,6 +19,7 @@ package net.sourceforge.guacamole.net.basic; * along with this program. If not, see . */ +import net.sourceforge.guacamole.net.auth.AuthenticationProvider; import java.io.File; import java.io.IOException; import java.security.MessageDigest; @@ -27,9 +28,10 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import net.sourceforge.guacamole.GuacamoleException; +import net.sourceforge.guacamole.net.auth.UserConfiguration; import net.sourceforge.guacamole.net.basic.properties.BasicGuacamoleProperties; -import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; import net.sourceforge.guacamole.properties.GuacamoleProperties; +import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.Attributes; @@ -84,7 +86,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider { } @Override - public GuacamoleConfiguration getAuthorizedConfiguration(String username, String password) throws GuacamoleException { + public UserConfiguration getUserConfiguration(String username, String password) throws GuacamoleException { // Check mapping file mod time File userMappingFile = getUserMappingFile(); @@ -107,7 +109,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider { // Validate and return info for given user and pass AuthInfo info = mapping.get(username); if (info != null && info.validate(username, password)) - return info.getConfiguration(); + return info.getUserConfiguration(); return null; @@ -115,6 +117,8 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider { public static class AuthInfo { + protected static final String CONFIG_ID = "DEFAULT"; + public static enum Encoding { PLAIN_TEXT, MD5 @@ -124,14 +128,16 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider { private String auth_password; private Encoding auth_encoding; - private GuacamoleConfiguration config; + private BasicUserConfiguration userConfig; public AuthInfo(String auth_username, String auth_password, Encoding auth_encoding) { this.auth_username = auth_username; this.auth_password = auth_password; this.auth_encoding = auth_encoding; - config = new GuacamoleConfiguration(); + userConfig = new BasicUserConfiguration(); + userConfig.setConfiguration(CONFIG_ID, new GuacamoleConfiguration()); + } private static final char HEX_CHARS[] = { @@ -187,8 +193,8 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider { } - public GuacamoleConfiguration getConfiguration() { - return config; + public BasicUserConfiguration getUserConfiguration() { + return userConfig; } } @@ -348,11 +354,13 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider { switch (state) { case PROTOCOL: - current.getConfiguration().setProtocol(str); + current.getUserConfiguration().getConfiguration(AuthInfo.CONFIG_ID) + .setProtocol(str); return; case PARAMETER: - current.getConfiguration().setParameter(currentParameter, str); + current.getUserConfiguration().getConfiguration(AuthInfo.CONFIG_ID) + .setParameter(currentParameter, str); return; } diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicGuacamoleTunnelServlet.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicGuacamoleTunnelServlet.java index d23f631cf..59c096947 100644 --- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicGuacamoleTunnelServlet.java +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicGuacamoleTunnelServlet.java @@ -18,10 +18,9 @@ package net.sourceforge.guacamole.net.basic; * along with this program. If not, see . */ -import java.util.Map; +import net.sourceforge.guacamole.net.auth.AuthenticationProvider; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sourceforge.guacamole.GuacamoleException; import net.sourceforge.guacamole.net.InetGuacamoleSocket; @@ -30,6 +29,7 @@ import net.sourceforge.guacamole.properties.GuacamoleProperties; import net.sourceforge.guacamole.net.GuacamoleSocket; import net.sourceforge.guacamole.servlet.GuacamoleSession; import net.sourceforge.guacamole.net.GuacamoleTunnel; +import net.sourceforge.guacamole.net.auth.UserConfiguration; import net.sourceforge.guacamole.net.basic.properties.BasicGuacamoleProperties; import net.sourceforge.guacamole.protocol.ConfiguredGuacamoleSocket; import net.sourceforge.guacamole.servlet.GuacamoleTunnelServlet; @@ -65,16 +65,15 @@ public class BasicGuacamoleTunnelServlet extends GuacamoleTunnelServlet { String id = request.getParameter("id"); // Get authorized configs - Map configs = - (Map) - httpSession.getAttribute("GUAC_AUTH_CONFIGS"); + UserConfiguration userConfig = (UserConfiguration) + httpSession.getAttribute("GUAC_USER_CONFIG"); // If no configs in session, not authorized - if (configs == null) + if (userConfig == null) throw new GuacamoleException("No authorized configurations."); // Get authorized config - GuacamoleConfiguration config = configs.get(id); + GuacamoleConfiguration config = userConfig.getConfiguration(id); if (config == null) { logger.error("Error retrieving authorized configuration id={}.", id); throw new GuacamoleException("Unknown configuration ID."); diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java index 0884f4698..669c7de43 100644 --- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java @@ -18,16 +18,15 @@ package net.sourceforge.guacamole.net.basic; * along with this program. If not, see . */ +import net.sourceforge.guacamole.net.auth.UserConfiguration; +import net.sourceforge.guacamole.net.auth.AuthenticationProvider; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sourceforge.guacamole.GuacamoleException; -import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; import net.sourceforge.guacamole.properties.GuacamoleProperties; import net.sourceforge.guacamole.net.basic.properties.BasicGuacamoleProperties; import org.slf4j.Logger; @@ -63,13 +62,13 @@ public class BasicLogin extends HttpServlet { String username = request.getParameter("username"); String password = request.getParameter("password"); - // Get authorized config - GuacamoleConfiguration config; + // Get authorized configs + UserConfiguration config; try { - config = authProvider.getAuthorizedConfiguration(username, password); + config = authProvider.getUserConfiguration(username, password); } catch (GuacamoleException e) { - logger.error("Error retrieving authorized configuration for user {}.", username); + logger.error("Error retrieving configuration for user {}.", username); response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -82,11 +81,8 @@ public class BasicLogin extends HttpServlet { logger.info("Successful login from {} for user \"{}\".", request.getRemoteAddr(), username); - // Build map of authorized configs - Map configs = new HashMap(); - configs.put("TEST-UID", config); - - httpSession.setAttribute("GUAC_AUTH_CONFIGS", configs); + // Associate configs with session + httpSession.setAttribute("GUAC_USER_CONFIG", config); } diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java new file mode 100644 index 000000000..c54a94b32 --- /dev/null +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java @@ -0,0 +1,29 @@ + +package net.sourceforge.guacamole.net.basic; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import net.sourceforge.guacamole.net.auth.UserConfiguration; +import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; + +public class BasicUserConfiguration implements UserConfiguration { + + private Map configs = + new HashMap(); + + @Override + public GuacamoleConfiguration getConfiguration(String id) { + return configs.get(id); + } + + @Override + public Collection listConfigurations() { + return configs.keySet(); + } + + protected void setConfiguration(String id, GuacamoleConfiguration config) { + configs.put(id, config); + } + +} diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java index b3dae6e60..b290f728b 100644 --- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java @@ -20,12 +20,12 @@ package net.sourceforge.guacamole.net.basic; import java.io.IOException; import java.io.PrintWriter; -import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import net.sourceforge.guacamole.net.auth.UserConfiguration; import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,13 +40,12 @@ public class ConfigurationList extends HttpServlet { HttpSession httpSession = request.getSession(true); - // Get authorized configs - Map configs = - (Map) - httpSession.getAttribute("GUAC_AUTH_CONFIGS"); + // Get user configuration + UserConfiguration userConfig = (UserConfiguration) + httpSession.getAttribute("GUAC_USER_CONFIG"); - // If no configs in session, not authorized - if (configs == null) { + // If no userConfig in session, not authorized + if (userConfig == null) { response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -56,13 +55,13 @@ public class ConfigurationList extends HttpServlet { PrintWriter out = response.getWriter(); out.println(""); - for (Entry entry : configs.entrySet()) { + for (String id : userConfig.listConfigurations()) { - GuacamoleConfiguration config = entry.getValue(); + GuacamoleConfiguration config = userConfig.getConfiguration(id); // Write config out.print(""); diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/properties/AuthenticationProviderProperty.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/properties/AuthenticationProviderProperty.java index 203bdf1cd..2b0ce0d08 100644 --- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/properties/AuthenticationProviderProperty.java +++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/properties/AuthenticationProviderProperty.java @@ -20,7 +20,7 @@ package net.sourceforge.guacamole.net.basic.properties; import java.lang.reflect.InvocationTargetException; import net.sourceforge.guacamole.GuacamoleException; -import net.sourceforge.guacamole.net.basic.AuthenticationProvider; +import net.sourceforge.guacamole.net.auth.AuthenticationProvider; import net.sourceforge.guacamole.properties.GuacamoleProperty; public abstract class AuthenticationProviderProperty implements GuacamoleProperty {