mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 13:41: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