Added UserConfiguration, refactored auth into own package.
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Mon, 15 Aug 2011 02:38:05 +0000 (19:38 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Mon, 15 Aug 2011 02:38:05 +0000 (19:38 -0700)
src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java [new file with mode: 0644]
src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java [new file with mode: 0644]
src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java [deleted file]
src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java
src/main/java/net/sourceforge/guacamole/net/basic/BasicGuacamoleTunnelServlet.java
src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java
src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java [new file with mode: 0644]
src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java
src/main/java/net/sourceforge/guacamole/net/basic/properties/AuthenticationProviderProperty.java

diff --git a/src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java b/src/main/java/net/sourceforge/guacamole/net/auth/AuthenticationProvider.java
new file mode 100644 (file)
index 0000000..baf2db9
--- /dev/null
@@ -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/src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java b/src/main/java/net/sourceforge/guacamole/net/auth/UserConfiguration.java
new file mode 100644 (file)
index 0000000..705cf52
--- /dev/null
@@ -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<String> listConfigurations();
+    
+}
diff --git a/src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java b/src/main/java/net/sourceforge/guacamole/net/basic/AuthenticationProvider.java
deleted file mode 100644 (file)
index 19a6228..0000000
+++ /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;
-
-}
index a00d6ee..1d40107 100644 (file)
@@ -19,6 +19,7 @@ package net.sourceforge.guacamole.net.basic;
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+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;
                 
             }
index d23f631..59c0969 100644 (file)
@@ -18,10 +18,9 @@ package net.sourceforge.guacamole.net.basic;
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-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<String, GuacamoleConfiguration> configs =
-                (Map<String, GuacamoleConfiguration>)
-                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.");
index 0884f46..669c7de 100644 (file)
@@ -18,16 +18,15 @@ package net.sourceforge.guacamole.net.basic;
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+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<String, GuacamoleConfiguration> configs = new HashMap<String, GuacamoleConfiguration>();
-        configs.put("TEST-UID", config);
-        
-        httpSession.setAttribute("GUAC_AUTH_CONFIGS", configs);
+        // Associate configs with session
+        httpSession.setAttribute("GUAC_USER_CONFIG", config);
 
     }
 
diff --git a/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java b/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java
new file mode 100644 (file)
index 0000000..c54a94b
--- /dev/null
@@ -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<String, GuacamoleConfiguration> configs =
+            new HashMap<String, GuacamoleConfiguration>();
+
+    @Override
+    public GuacamoleConfiguration getConfiguration(String id) {
+        return configs.get(id);
+    }
+
+    @Override
+    public Collection<String> listConfigurations() {
+        return configs.keySet();
+    }
+    
+    protected void setConfiguration(String id, GuacamoleConfiguration config) {
+        configs.put(id, config);
+    }
+    
+}
index b3dae6e..b290f72 100644 (file)
@@ -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<String, GuacamoleConfiguration> configs =
-                (Map<String, GuacamoleConfiguration>)
-                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("<configs>");
         
-        for (Entry<String, GuacamoleConfiguration> entry : configs.entrySet()) {
+        for (String id : userConfig.listConfigurations()) {
 
-            GuacamoleConfiguration config = entry.getValue();
+            GuacamoleConfiguration config = userConfig.getConfiguration(id);
 
             // Write config
             out.print("<config id=\"");
-            out.print(entry.getKey());
+            out.print(id);
             out.print("\" protocol=\"");
             out.print(config.getProtocol());
             out.println("\"/>");
index 203bdf1..2b0ce0d 100644 (file)
@@ -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<AuthenticationProvider> {