Add tag handlers for tags within the user mapping XML.

This commit is contained in:
Michael Jumper
2012-12-24 18:13:41 -08:00
parent 22386faa62
commit fe91db50d6
5 changed files with 441 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}