From 7aa53c676f5154922e5e224878935f5bd4f8c304 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 16 Aug 2011 19:00:00 -0700 Subject: [PATCH] Auth API improvements, logout link. --- .../net/basic/BasicFileAuthenticationProvider.java | 25 +++++------ .../net/basic/BasicGuacamoleTunnelServlet.java | 10 ++--- .../guacamole/net/basic/BasicLogin.java | 13 +++--- .../guacamole/net/basic/BasicLogout.java | 44 ++++++++++++++++++++ .../net/basic/BasicUserConfiguration.java | 29 ------------- .../guacamole/net/basic/ConfigurationList.java | 17 ++++---- src/main/webapp/WEB-INF/web.xml | 11 +++++ src/main/webapp/client.xhtml | 2 +- src/main/webapp/index.xhtml | 4 ++ 9 files changed, 92 insertions(+), 63 deletions(-) create mode 100644 src/main/java/net/sourceforge/guacamole/net/basic/BasicLogout.java delete mode 100644 src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java diff --git a/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java b/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java index 8597595..4f77930 100644 --- a/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java +++ b/src/main/java/net/sourceforge/guacamole/net/basic/BasicFileAuthenticationProvider.java @@ -28,7 +28,6 @@ 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.auth.UsernamePassword; import net.sourceforge.guacamole.net.basic.properties.BasicGuacamoleProperties; import net.sourceforge.guacamole.properties.GuacamoleProperties; @@ -87,7 +86,7 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider getAuthorizedConfigurations(UsernamePassword credentials) throws GuacamoleException { // Check mapping file mod time File userMappingFile = getUserMappingFile(); @@ -107,19 +106,19 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider configs = new HashMap(); + // Validate and return info for given user and pass AuthInfo info = mapping.get(credentials.getUsername()); if (info != null && info.validate(credentials.getUsername(), credentials.getPassword())) - return info.getUserConfiguration(); + configs.put("DEFAULT", info.getConfiguration()); - return null; + return configs; } public static class AuthInfo { - protected static final String CONFIG_ID = "DEFAULT"; - public static enum Encoding { PLAIN_TEXT, MD5 @@ -129,16 +128,14 @@ public class BasicFileAuthenticationProvider implements AuthenticationProvider. */ +import java.util.Map; import net.sourceforge.guacamole.net.auth.AuthenticationProvider; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -29,7 +30,6 @@ 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,15 +65,15 @@ public class BasicGuacamoleTunnelServlet extends GuacamoleTunnelServlet { String id = request.getParameter("id"); // Get authorized configs - UserConfiguration userConfig = (UserConfiguration) - httpSession.getAttribute("GUAC_USER_CONFIG"); + Map configs = (Map) + httpSession.getAttribute("GUAC_CONFIGS"); // If no configs in session, not authorized - if (userConfig == null) + if (configs == null) throw new GuacamoleException("No authorized configurations."); // Get authorized config - GuacamoleConfiguration config = userConfig.getConfiguration(id); + GuacamoleConfiguration config = configs.get(id); if (config == null) { logger.error("Error retrieving authorized configuration id={}.", id); throw new GuacamoleException("Unknown configuration ID."); diff --git a/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java b/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java index 6574d02..34a72e7 100644 --- a/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java +++ b/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogin.java @@ -18,9 +18,9 @@ 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.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -30,6 +30,7 @@ import net.sourceforge.guacamole.GuacamoleException; import net.sourceforge.guacamole.net.auth.UsernamePassword; import net.sourceforge.guacamole.properties.GuacamoleProperties; import net.sourceforge.guacamole.net.basic.properties.BasicGuacamoleProperties; +import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,17 +69,17 @@ public class BasicLogin extends HttpServlet { credentials.setPassword(password); // Get authorized configs - UserConfiguration config; + Map configs; try { - config = authProvider.getUserConfiguration(credentials); + configs = authProvider.getAuthorizedConfigurations(credentials); } catch (GuacamoleException e) { - logger.error("Error retrieving configuration for user {}.", username); + logger.error("Error retrieving configuration(s) for user {}.", username); response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } - if (config == null) { + if (configs == null) { logger.warn("Failed login from {} for user \"{}\".", request.getRemoteAddr(), username); response.sendError(HttpServletResponse.SC_FORBIDDEN); return; @@ -87,7 +88,7 @@ public class BasicLogin extends HttpServlet { logger.info("Successful login from {} for user \"{}\".", request.getRemoteAddr(), username); // Associate configs with session - httpSession.setAttribute("GUAC_USER_CONFIG", config); + httpSession.setAttribute("GUAC_CONFIGS", configs); } diff --git a/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogout.java b/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogout.java new file mode 100644 index 0000000..e978a0e --- /dev/null +++ b/src/main/java/net/sourceforge/guacamole/net/basic/BasicLogout.java @@ -0,0 +1,44 @@ +package net.sourceforge.guacamole.net.basic; + +/* + * Guacamole - Clientless Remote Desktop + * Copyright (C) 2010 Michael Jumper + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import java.io.IOException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +public class BasicLogout extends HttpServlet { + + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) + throws IOException { + + // Invalidate session, if any + HttpSession httpSession = request.getSession(false); + if (httpSession != null) + httpSession.invalidate(); + + // Redirect to index + response.sendRedirect("index.xhtml"); + + } + +} + diff --git a/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java b/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java deleted file mode 100644 index c54a94b..0000000 --- a/src/main/java/net/sourceforge/guacamole/net/basic/BasicUserConfiguration.java +++ /dev/null @@ -1,29 +0,0 @@ - -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/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java b/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java index b290f72..fc45474 100644 --- a/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java +++ b/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; @@ -41,11 +41,12 @@ public class ConfigurationList extends HttpServlet { HttpSession httpSession = request.getSession(true); // Get user configuration - UserConfiguration userConfig = (UserConfiguration) - httpSession.getAttribute("GUAC_USER_CONFIG"); + // Get authorized configs + Map configs = (Map) + httpSession.getAttribute("GUAC_CONFIGS"); - // If no userConfig in session, not authorized - if (userConfig == null) { + // If no configs in session, not authorized + if (configs == null) { response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -55,13 +56,13 @@ public class ConfigurationList extends HttpServlet { PrintWriter out = response.getWriter(); out.println(""); - for (String id : userConfig.listConfigurations()) { + for (Entry entry : configs.entrySet()) { - GuacamoleConfiguration config = userConfig.getConfiguration(id); + GuacamoleConfiguration config = entry.getValue(); // Write config out.print(""); diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 2b64e11..041e82c 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -39,6 +39,17 @@ /login + + + Logout servlet. + Logout + net.sourceforge.guacamole.net.basic.BasicLogout + + + Logout + /logout + + Configuration list servlet. diff --git a/src/main/webapp/client.xhtml b/src/main/webapp/client.xhtml index 58529bd..370803b 100644 --- a/src/main/webapp/client.xhtml +++ b/src/main/webapp/client.xhtml @@ -50,7 +50,7 @@ - AGPLv3 + Logout diff --git a/src/main/webapp/index.xhtml b/src/main/webapp/index.xhtml index 2640d05..1ad1026 100644 --- a/src/main/webapp/index.xhtml +++ b/src/main/webapp/index.xhtml @@ -71,6 +71,10 @@ Available Connections +
+ Logout +
+ -- 1.7.10.4