mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	Add tag handlers for tags within the user mapping XML.
This commit is contained in:
		| @@ -0,0 +1,143 @@ | ||||
| package net.sourceforge.guacamole.net.basic.xml.user_mapping; | ||||
|  | ||||
| /* | ||||
|  *  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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| import net.sourceforge.guacamole.net.basic.auth.Authorization; | ||||
| import net.sourceforge.guacamole.net.basic.xml.TagHandler; | ||||
| import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; | ||||
| import org.xml.sax.Attributes; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| /** | ||||
|  * TagHandler for the "authorize" element. | ||||
|  *  | ||||
|  * @author Mike Jumper  | ||||
|  */ | ||||
| public class AuthorizeTagHandler implements TagHandler { | ||||
|  | ||||
|     /** | ||||
|      * The Authorization corresponding to the "authorize" tag being handled | ||||
|      * by this tag handler. The data of this Authorization will be populated | ||||
|      * as the tag is parsed. | ||||
|      */ | ||||
|     private Authorization authorization = new Authorization(); | ||||
|  | ||||
|     /** | ||||
|      * The default GuacamoleConfiguration to use if "param" or "protocol" | ||||
|      * tags occur outside a "connection" tag. | ||||
|      */ | ||||
|     private GuacamoleConfiguration default_config = null; | ||||
|      | ||||
|     /** | ||||
|      * Creates a new handler for an "authorize" tag having the given | ||||
|      * attributes. | ||||
|      *  | ||||
|      * @param attributes The attributes of the "authorize" tag. | ||||
|      * @throws SAXException If the attributes given are not valid. | ||||
|      */ | ||||
|     public AuthorizeTagHandler(Attributes attributes) throws SAXException { | ||||
|  | ||||
|         // Init username and password | ||||
|         authorization.setUsername(attributes.getValue("username")); | ||||
|         authorization.setPassword(attributes.getValue("password")); | ||||
|  | ||||
|         // Get encoding | ||||
|         String encoding = attributes.getValue("encoding"); | ||||
|         if (encoding != null) { | ||||
|  | ||||
|             // If "md5", use MD5 encoding | ||||
|             if (encoding.equals("md5")) | ||||
|                 authorization.setEncoding(Authorization.Encoding.MD5); | ||||
|  | ||||
|             // If "plain", use plain text | ||||
|             else if (encoding.equals("plain")) | ||||
|                 authorization.setEncoding(Authorization.Encoding.PLAIN_TEXT); | ||||
|  | ||||
|             // Otherwise, bad encoding | ||||
|             else | ||||
|                 throw new SAXException( | ||||
|                         "Invalid encoding: '" + encoding + "'"); | ||||
|              | ||||
|         } | ||||
|          | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public TagHandler childElement(String localName, Attributes attributes) throws SAXException { | ||||
|  | ||||
|         // "connection" tag | ||||
|         if (localName.equals("connection")) { | ||||
|  | ||||
|             // Get tag handler for connection tag | ||||
|             ConnectionTagHandler tagHandler = new ConnectionTagHandler(attributes); | ||||
|  | ||||
|             // Store configuration stub | ||||
|             GuacamoleConfiguration config_stub = tagHandler.asGuacamoleConfiguration(); | ||||
|             authorization.addConfiguration(tagHandler.getName(), config_stub); | ||||
|              | ||||
|             return tagHandler; | ||||
|         } | ||||
|  | ||||
|         // "param" tag | ||||
|         if (localName.equals("param")) { | ||||
|  | ||||
|             // Create default config if it doesn't exist | ||||
|             if (default_config == null) { | ||||
|                 default_config = new GuacamoleConfiguration(); | ||||
|                 authorization.addConfiguration("DEFAULT", default_config); | ||||
|             } | ||||
|  | ||||
|             return new ParamTagHandler(default_config, attributes); | ||||
|         } | ||||
|  | ||||
|         // "protocol" tag | ||||
|         if (localName.equals("protocol")) { | ||||
|  | ||||
|             // Create default config if it doesn't exist | ||||
|             if (default_config == null) { | ||||
|                 default_config = new GuacamoleConfiguration(); | ||||
|                 authorization.addConfiguration("DEFAULT", default_config); | ||||
|             } | ||||
|  | ||||
|             return new ProtocolTagHandler(default_config); | ||||
|         } | ||||
|  | ||||
|         return null; | ||||
|          | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void complete(String textContent) throws SAXException { | ||||
|         // Do nothing | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns an Authorization backed by the data of this authorize tag | ||||
|      * handler. This Authorization is guaranteed to at least have the username, | ||||
|      * password, and encoding available. Any associated configurations will be | ||||
|      * added dynamically as the authorize tag is parsed. | ||||
|      *  | ||||
|      * @return An Authorization backed by the data of this authorize tag | ||||
|      *         handler. | ||||
|      */ | ||||
|     public Authorization asAuthorization() { | ||||
|         return authorization; | ||||
|     } | ||||
|      | ||||
| } | ||||
| @@ -0,0 +1,94 @@ | ||||
| package net.sourceforge.guacamole.net.basic.xml.user_mapping; | ||||
|  | ||||
| /* | ||||
|  *  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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| import net.sourceforge.guacamole.net.basic.xml.TagHandler; | ||||
| import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; | ||||
| import org.xml.sax.Attributes; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| /** | ||||
|  * TagHandler for the "connection" element. | ||||
|  *  | ||||
|  * @author Mike Jumper  | ||||
|  */ | ||||
| public class ConnectionTagHandler implements TagHandler { | ||||
|  | ||||
|     /** | ||||
|      * The GuacamoleConfiguration backing this tag handler. | ||||
|      */ | ||||
|     private GuacamoleConfiguration config = new GuacamoleConfiguration(); | ||||
|      | ||||
|     /** | ||||
|      * The name associated with the connection being parsed. | ||||
|      */ | ||||
|     private String name; | ||||
|      | ||||
|     /** | ||||
|      * Creates a new handler for an "connection" tag having the given | ||||
|      * attributes. | ||||
|      *  | ||||
|      * @param attributes The attributes of the "connection" tag. | ||||
|      * @throws SAXException If the attributes given are not valid. | ||||
|      */ | ||||
|     public ConnectionTagHandler(Attributes attributes) throws SAXException { | ||||
|         name = attributes.getValue("name"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public TagHandler childElement(String localName, Attributes attributes) throws SAXException { | ||||
|  | ||||
|         if (localName.equals("param")) | ||||
|             return new ParamTagHandler(config, attributes); | ||||
|  | ||||
|         if (localName.equals("protocol")) | ||||
|             return new ProtocolTagHandler(config); | ||||
|  | ||||
|         return null; | ||||
|          | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void complete(String textContent) throws SAXException { | ||||
|         // Do nothing | ||||
|     } | ||||
|    | ||||
|     /** | ||||
|      * Returns a GuacamoleConfiguration whose contents are populated from data | ||||
|      * within this connection element and child elements. This | ||||
|      * GuacamoleConfiguration will continue to be modified as the user mapping | ||||
|      * is parsed. | ||||
|      *  | ||||
|      * @return A GuacamoleConfiguration whose contents are populated from data | ||||
|      *         within this connection element. | ||||
|      */ | ||||
|     public GuacamoleConfiguration asGuacamoleConfiguration() { | ||||
|         return config; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns the name associated with this connection. | ||||
|      *  | ||||
|      * @return The name associated with this connection. | ||||
|      */ | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|      | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| package net.sourceforge.guacamole.net.basic.xml.user_mapping; | ||||
|  | ||||
| /* | ||||
|  *  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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| import net.sourceforge.guacamole.net.basic.xml.TagHandler; | ||||
| import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; | ||||
| import org.xml.sax.Attributes; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| /** | ||||
|  * TagHandler for the "param" element. | ||||
|  *  | ||||
|  * @author Mike Jumper  | ||||
|  */ | ||||
| public class ParamTagHandler implements TagHandler { | ||||
|  | ||||
|     /** | ||||
|      * The GuacamoleConfiguration which will be populated with data from | ||||
|      * the tag handled by this tag handler. | ||||
|      */ | ||||
|     private GuacamoleConfiguration config; | ||||
|      | ||||
|     /** | ||||
|      * Creates a new handler for an "param" tag having the given | ||||
|      * attributes. | ||||
|      *  | ||||
|      * @param config The GuacamoleConfiguration to update with the data parsed | ||||
|      *               from the "protocol" tag. | ||||
|      * @param attributes The attributes of the "param" tag. | ||||
|      * @throws SAXException If the attributes given are not valid. | ||||
|      */ | ||||
|     public ParamTagHandler(GuacamoleConfiguration config, | ||||
|             Attributes attributes) throws SAXException { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public TagHandler childElement(String localName, Attributes attributes) throws SAXException { | ||||
|         throw new SAXException("The 'param' tag can contain no elements."); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void complete(String textContent) throws SAXException { | ||||
|         // Do nothing | ||||
|     } | ||||
|     | ||||
| } | ||||
| @@ -0,0 +1,61 @@ | ||||
| package net.sourceforge.guacamole.net.basic.xml.user_mapping; | ||||
|  | ||||
| /* | ||||
|  *  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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| import net.sourceforge.guacamole.net.basic.xml.TagHandler; | ||||
| import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; | ||||
| import org.xml.sax.Attributes; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| /** | ||||
|  * TagHandler for the "protocol" element. | ||||
|  *  | ||||
|  * @author Mike Jumper  | ||||
|  */ | ||||
| public class ProtocolTagHandler implements TagHandler { | ||||
|  | ||||
|     /** | ||||
|      * The GuacamoleConfiguration which will be populated with data from | ||||
|      * the tag handled by this tag handler. | ||||
|      */ | ||||
|     private GuacamoleConfiguration config; | ||||
|      | ||||
|     /** | ||||
|      * Creates a new handler for a "protocol" tag having the given | ||||
|      * attributes. | ||||
|      *  | ||||
|      * @param config The GuacamoleConfiguration to update with the data parsed | ||||
|      *               from the "protocol" tag. | ||||
|      * @throws SAXException If the attributes given are not valid. | ||||
|      */ | ||||
|     public ProtocolTagHandler(GuacamoleConfiguration config) throws SAXException { | ||||
|         this.config = config; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public TagHandler childElement(String localName, Attributes attributes) throws SAXException { | ||||
|         throw new SAXException("The 'protocol' tag can contain no elements."); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void complete(String textContent) throws SAXException { | ||||
|         config.setProtocol(textContent); | ||||
|     } | ||||
|     | ||||
| } | ||||
| @@ -0,0 +1,81 @@ | ||||
| package net.sourceforge.guacamole.net.basic.xml.user_mapping; | ||||
|  | ||||
| /* | ||||
|  *  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 <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| import net.sourceforge.guacamole.net.basic.auth.Authorization; | ||||
| import net.sourceforge.guacamole.net.basic.auth.UserMapping; | ||||
| import net.sourceforge.guacamole.net.basic.xml.TagHandler; | ||||
| import org.xml.sax.Attributes; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| /** | ||||
|  * TagHandler for the "user-mapping" element. | ||||
|  *  | ||||
|  * @author Mike Jumper  | ||||
|  */ | ||||
| public class UserMappingTagHandler implements TagHandler { | ||||
|  | ||||
|     /** | ||||
|      * The UserMapping which will contain all data parsed by this tag handler. | ||||
|      */ | ||||
|     private UserMapping user_mapping = new UserMapping(); | ||||
|      | ||||
|     @Override | ||||
|     public TagHandler childElement(String localName, Attributes attributes) throws SAXException { | ||||
|  | ||||
|         // Start parsing of authorize tags, add to list of all authorizations | ||||
|         if (localName.equals("authorize")) { | ||||
|             | ||||
|             // Get tag handler for authorize tag | ||||
|             AuthorizeTagHandler tagHandler = | ||||
|                     new AuthorizeTagHandler(attributes); | ||||
|  | ||||
|             // Store authorization stub in map of authorizations | ||||
|             Authorization auth_stub = tagHandler.asAuthorization(); | ||||
|             user_mapping.addAuthorization(auth_stub); | ||||
|              | ||||
|             return tagHandler; | ||||
|              | ||||
|         } | ||||
|  | ||||
|         return null; | ||||
|          | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void complete(String textContent) throws SAXException { | ||||
|         // Do nothing | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns a user mapping containing all authorizations and configurations | ||||
|      * parsed so far. This user mapping will be backed by the data being parsed, | ||||
|      * thus any additional authorizations or configurations will be available | ||||
|      * in the object returned by this function even after this function has | ||||
|      * returned, once the data corresponding to those authorizations or | ||||
|      * configurations has been parsed. | ||||
|      *  | ||||
|      * @return A user mapping containing all authorizations and configurations | ||||
|      *         parsed so far. | ||||
|      */ | ||||
|     public UserMapping asUserMapping() { | ||||
|         return user_mapping; | ||||
|     } | ||||
|      | ||||
| } | ||||
		Reference in New Issue
	
	Block a user