mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Added UserConfiguration, refactored auth into own package.
This commit is contained in:
@@ -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;
|
||||
|
||||
}
|
@@ -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();
|
||||
|
||||
}
|
@@ -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;
|
||||
|
||||
}
|
@@ -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;
|
||||
|
||||
}
|
||||
|
@@ -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.");
|
||||
|
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
@@ -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("\"/>");
|
||||
|
@@ -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> {
|
||||
|
Reference in New Issue
Block a user