mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	Migrated to improved API.
This commit is contained in:
		| @@ -27,6 +27,7 @@ import java.util.Collections; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import net.sourceforge.guacamole.GuacamoleException; | ||||
| import net.sourceforge.guacamole.net.Configuration; | ||||
| import net.sourceforge.guacamole.net.GuacamoleProperties; | ||||
| import org.xml.sax.Attributes; | ||||
| import org.xml.sax.SAXException; | ||||
| @@ -80,7 +81,7 @@ public class BasicFileAuthenticationProvider implements BasicLogin.Authenticatio | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public BasicLogin.AuthorizedConfiguration getAuthorizedConfiguration(String username, String password) throws GuacamoleException { | ||||
|     public Configuration getAuthorizedConfiguration(String username, String password) throws GuacamoleException { | ||||
|  | ||||
|         // Check mapping file mod time | ||||
|         File userMappingFile = getUserMappingFile(); | ||||
| @@ -95,13 +96,19 @@ public class BasicFileAuthenticationProvider implements BasicLogin.Authenticatio | ||||
|         } | ||||
|  | ||||
|         AuthInfo info = mapping.get(username); | ||||
|         if (info != null && info.validate(username, password)) | ||||
|             return new BasicLogin.AuthorizedConfiguration( | ||||
|                 info.getProtocol(), | ||||
|                 info.getHostname(), | ||||
|                 info.getPort(), | ||||
|                 info.getPassword() | ||||
|             ); | ||||
|         if (info != null && info.validate(username, password)) { | ||||
|  | ||||
|             Configuration config = new Configuration(); | ||||
|  | ||||
|             // TODO: Migrate user-mapping to general form | ||||
|             config.setProtocol(info.getProtocol()); | ||||
|             config.setParameter("hostname", info.getHostname()); | ||||
|             config.setParameter("port", Integer.toString(info.getPort())); | ||||
|             config.setParameter("password", info.getPassword()); | ||||
|  | ||||
|             return config; | ||||
|  | ||||
|         } | ||||
|  | ||||
|         return null; | ||||
|  | ||||
|   | ||||
| @@ -2,9 +2,11 @@ | ||||
| package net.sourceforge.guacamole.net.authentication.basic; | ||||
| 
 | ||||
| import javax.servlet.http.HttpSession; | ||||
| import net.sourceforge.guacamole.GuacamoleClient; | ||||
| import net.sourceforge.guacamole.GuacamoleException; | ||||
| import net.sourceforge.guacamole.net.Configuration; | ||||
| import net.sourceforge.guacamole.net.GuacamoleSession; | ||||
| import net.sourceforge.guacamole.net.authentication.GuacamoleSessionProvider; | ||||
| import net.sourceforge.guacamole.net.authentication.GuacamoleClientProvider; | ||||
| 
 | ||||
| /* | ||||
|  *  Guacamole - Clientless Remote Desktop | ||||
| @@ -24,26 +26,25 @@ import net.sourceforge.guacamole.net.authentication.GuacamoleSessionProvider; | ||||
|  *  along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| 
 | ||||
| public class BasicGuacamoleSessionProvider implements GuacamoleSessionProvider { | ||||
| public class BasicGuacamoleClientProvider implements GuacamoleClientProvider { | ||||
| 
 | ||||
|     public GuacamoleSession createSession(HttpSession session) throws GuacamoleException { | ||||
|     public GuacamoleClient createClient(HttpSession session) throws GuacamoleException { | ||||
| 
 | ||||
|         // Retrieve authorized config data from session | ||||
|         BasicLogin.AuthorizedConfiguration config = (BasicLogin.AuthorizedConfiguration) | ||||
|                 session.getAttribute("BASIC-LOGIN-AUTH"); | ||||
|         Configuration config = (Configuration) session.getAttribute("BASIC-LOGIN-AUTH"); | ||||
| 
 | ||||
|         // If no data, not authorized | ||||
|         if (config == null) | ||||
|             throw new GuacamoleException("Unauthorized"); | ||||
| 
 | ||||
|         // Configure session from authorized config info | ||||
|         GuacamoleSession guacSession = new GuacamoleSession(session); | ||||
|         guacSession.setConnection(config.getProtocol(), config.getHostname(), config.getPort()); | ||||
|         if (config.getPassword() != null) | ||||
|             guacSession.setPassword(config.getPassword()); | ||||
|         GuacamoleClient client = new GuacamoleClient("localhost", 4822); | ||||
| 
 | ||||
|         // TODO: Send "select" and "connect" messages in client connect function (based on config) ... to be implemented. | ||||
|         char[] initMessages = "select:vnc;connect:localhost,5901,potato;".toCharArray(); | ||||
|         client.write(initMessages, 0, initMessages.length); | ||||
| 
 | ||||
|         // Return authorized session | ||||
|         return guacSession; | ||||
|         return client; | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| @@ -28,99 +28,50 @@ import javax.servlet.http.HttpServletResponse; | ||||
| import javax.servlet.http.HttpSession; | ||||
| import net.sourceforge.guacamole.GuacamoleException; | ||||
| import net.sourceforge.guacamole.net.Configuration; | ||||
| import net.sourceforge.guacamole.net.GuacamoleProperties; | ||||
|  | ||||
| public class BasicLogin extends HttpServlet { | ||||
|  | ||||
|     private Config config; | ||||
|     private AuthenticationProvider authProvider; | ||||
|  | ||||
|     @Override | ||||
|     public void init() throws ServletException { | ||||
|  | ||||
|         // Get auth provider instance | ||||
|         try { | ||||
|             config = new Config(); | ||||
|             String authProviderClassName = GuacamoleProperties.getProperty("auth-provider"); | ||||
|             Object obj = Class.forName(authProviderClassName).getConstructor().newInstance(); | ||||
|             if (!(obj instanceof AuthenticationProvider)) | ||||
|                 throw new ServletException("Specified authentication provider class is not a AuthenticationProvider."); | ||||
|  | ||||
|             authProvider = (AuthenticationProvider) obj; | ||||
|         } | ||||
|         catch (GuacamoleException e) { | ||||
|             throw new ServletException(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private class Config extends Configuration { | ||||
|  | ||||
|         private AuthenticationProvider authProvider; | ||||
|  | ||||
|         public Config() throws GuacamoleException { | ||||
|  | ||||
|             // Get auth provider instance | ||||
|             try { | ||||
|                 String authProviderClassName = readParameter("auth-provider"); | ||||
|                 Object obj = Class.forName(authProviderClassName).getConstructor().newInstance(); | ||||
|                 if (!(obj instanceof AuthenticationProvider)) | ||||
|                     throw new GuacamoleException("Specified session provider class is not a GuacamoleSessionProvider"); | ||||
|  | ||||
|                 authProvider = (AuthenticationProvider) obj; | ||||
|             } | ||||
|             catch (ClassNotFoundException e) { | ||||
|                 throw new GuacamoleException("Session provider class not found", e); | ||||
|             } | ||||
|             catch (NoSuchMethodException e) { | ||||
|                 throw new GuacamoleException("Default constructor for session provider not present", e); | ||||
|             } | ||||
|             catch (SecurityException e) { | ||||
|                 throw new GuacamoleException("Creation of session provider disallowed; check your security settings", e); | ||||
|             } | ||||
|             catch (InstantiationException e) { | ||||
|                 throw new GuacamoleException("Unable to instantiate session provider", e); | ||||
|             } | ||||
|             catch (IllegalAccessException e) { | ||||
|                 throw new GuacamoleException("Unable to access default constructor of session provider", e); | ||||
|             } | ||||
|             catch (InvocationTargetException e) { | ||||
|                 throw new GuacamoleException("Internal error in constructor of session provider", e.getTargetException()); | ||||
|             } | ||||
|  | ||||
|         catch (ClassNotFoundException e) { | ||||
|             throw new ServletException("Authentication provider class not found", e); | ||||
|         } | ||||
|  | ||||
|         public AuthenticationProvider getAuthenticationProvider() { | ||||
|             return authProvider; | ||||
|         catch (NoSuchMethodException e) { | ||||
|             throw new ServletException("Default constructor for authentication provider not present", e); | ||||
|         } | ||||
|         catch (SecurityException e) { | ||||
|             throw new ServletException("Creation of authentication provider disallowed; check your security settings", e); | ||||
|         } | ||||
|         catch (InstantiationException e) { | ||||
|             throw new ServletException("Unable to instantiate authentication provider", e); | ||||
|         } | ||||
|         catch (IllegalAccessException e) { | ||||
|             throw new ServletException("Unable to access default constructor of authentication provider", e); | ||||
|         } | ||||
|         catch (InvocationTargetException e) { | ||||
|             throw new ServletException("Internal error in constructor of authentication provider", e.getTargetException()); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public static interface AuthenticationProvider { | ||||
|         public AuthorizedConfiguration getAuthorizedConfiguration(String username, String password) throws GuacamoleException; | ||||
|     } | ||||
|  | ||||
|     // Added to session when session validated | ||||
|     public static class AuthorizedConfiguration { | ||||
|  | ||||
|         private String protocol; | ||||
|         private String hostname; | ||||
|         private int port; | ||||
|         private String password; | ||||
|  | ||||
|         public AuthorizedConfiguration(String protocol, String hostname, int port, String password) { | ||||
|             this.protocol = protocol; | ||||
|             this.hostname = hostname; | ||||
|             this.port = port; | ||||
|             this.password = password; | ||||
|         } | ||||
|  | ||||
|         public String getHostname() { | ||||
|             return hostname; | ||||
|         } | ||||
|  | ||||
|         public String getPassword() { | ||||
|             return password; | ||||
|         } | ||||
|  | ||||
|         public int getPort() { | ||||
|             return port; | ||||
|         } | ||||
|  | ||||
|         public String getProtocol() { | ||||
|             return protocol; | ||||
|         } | ||||
|  | ||||
|         public Configuration getAuthorizedConfiguration(String username, String password) throws GuacamoleException; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -133,14 +84,14 @@ public class BasicLogin extends HttpServlet { | ||||
|         // Validate username and password | ||||
|         try { | ||||
|  | ||||
|             AuthorizedConfiguration info = config.getAuthenticationProvider().getAuthorizedConfiguration(username, password); | ||||
|             if (info != null) { | ||||
|             Configuration config = authProvider.getAuthorizedConfiguration(username, password); | ||||
|             if (config != null) { | ||||
|  | ||||
|                 // Store authorized configuration | ||||
|                 HttpSession session = req.getSession(true); | ||||
|                 session.setAttribute( | ||||
|                     "BASIC-LOGIN-AUTH", | ||||
|                     info | ||||
|                     config | ||||
|                 ); | ||||
|  | ||||
|                 // Success | ||||
|   | ||||
		Reference in New Issue
	
	Block a user