mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 05:07:41 +00:00
GUAC-340: Expose available protocols within Environment.
This commit is contained in:
@@ -23,11 +23,13 @@
|
||||
package org.glyptodon.guacamole.environment;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.properties.BooleanGuacamoleProperty;
|
||||
import org.glyptodon.guacamole.properties.GuacamoleProperty;
|
||||
import org.glyptodon.guacamole.properties.IntegerGuacamoleProperty;
|
||||
import org.glyptodon.guacamole.properties.StringGuacamoleProperty;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolInfo;
|
||||
|
||||
/**
|
||||
* The environment of an arbitrary Guacamole instance, describing available
|
||||
@@ -80,6 +82,24 @@ public interface Environment {
|
||||
*/
|
||||
public File getGuacamoleHome();
|
||||
|
||||
/**
|
||||
* Returns a map of all available protocols, where each key is the name of
|
||||
* that protocol as would be passed to guacd during connection.
|
||||
*
|
||||
* @return A map of all available protocols.
|
||||
*/
|
||||
public Map<String, ProtocolInfo> getProtocols();
|
||||
|
||||
/**
|
||||
* Returns the protocol having the given name. The name must be the
|
||||
* protocol name as would be passed to guacd during connection.
|
||||
*
|
||||
* @param name The name of the protocol.
|
||||
* @return The protocol having the given name, or null if no such
|
||||
* protocol is registered.
|
||||
*/
|
||||
public ProtocolInfo getProtocol(String name);
|
||||
|
||||
/**
|
||||
* Given a GuacamoleProperty, parses and returns the value set for that
|
||||
* property in guacamole.properties, if any.
|
||||
|
@@ -22,14 +22,27 @@
|
||||
|
||||
package org.glyptodon.guacamole.environment;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleServerException;
|
||||
import org.glyptodon.guacamole.properties.GuacamoleProperty;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolInfo;
|
||||
import org.glyptodon.guacamole.xml.DocumentHandler;
|
||||
import org.glyptodon.guacamole.xml.protocol.ProtocolTagHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.XMLReader;
|
||||
import org.xml.sax.helpers.XMLReaderFactory;
|
||||
|
||||
/**
|
||||
* The environment of the locally-running Guacamole instance, describing
|
||||
@@ -40,6 +53,17 @@ import org.glyptodon.guacamole.properties.GuacamoleProperty;
|
||||
*/
|
||||
public class LocalEnvironment implements Environment {
|
||||
|
||||
/**
|
||||
* Logger for this class.
|
||||
*/
|
||||
private static final Logger logger = LoggerFactory.getLogger(LocalEnvironment.class);
|
||||
|
||||
/**
|
||||
* Array of all known protocol names.
|
||||
*/
|
||||
private static final String[] KNOWN_PROTOCOLS = new String[]{
|
||||
"vnc", "rdp", "ssh", "telnet"};
|
||||
|
||||
/**
|
||||
* All properties read from guacamole.properties.
|
||||
*/
|
||||
@@ -50,6 +74,11 @@ public class LocalEnvironment implements Environment {
|
||||
*/
|
||||
private final File guacHome;
|
||||
|
||||
/**
|
||||
* The map of all available protocols.
|
||||
*/
|
||||
private final Map<String, ProtocolInfo> availableProtocols;
|
||||
|
||||
/**
|
||||
* Creates a new Environment, initializing that environment based on the
|
||||
* location of GUACAMOLE_HOME and the contents of guacamole.properties.
|
||||
@@ -59,9 +88,11 @@ public class LocalEnvironment implements Environment {
|
||||
*/
|
||||
public LocalEnvironment() throws GuacamoleException {
|
||||
|
||||
properties = new Properties();
|
||||
// Determine location of GUACAMOLE_HOME
|
||||
guacHome = findGuacamoleHome();
|
||||
|
||||
// Read properties
|
||||
properties = new Properties();
|
||||
try {
|
||||
|
||||
InputStream stream;
|
||||
@@ -92,6 +123,9 @@ public class LocalEnvironment implements Environment {
|
||||
throw new GuacamoleServerException("Error reading guacamole.properties", e);
|
||||
}
|
||||
|
||||
// Read all protocols
|
||||
availableProtocols = readProtocols();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,6 +161,130 @@ public class LocalEnvironment implements Environment {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the given XML file, returning the parsed ProtocolInfo.
|
||||
*
|
||||
* @param input An input stream containing XML describing the parameters
|
||||
* associated with a protocol supported by Guacamole.
|
||||
* @return A new ProtocolInfo object which contains the parameters described
|
||||
* by the XML file parsed.
|
||||
* @throws GuacamoleException If an error occurs while parsing the XML file.
|
||||
*/
|
||||
private ProtocolInfo readProtocol(InputStream input)
|
||||
throws GuacamoleException {
|
||||
|
||||
// Parse document
|
||||
try {
|
||||
|
||||
// Get handler for root element
|
||||
ProtocolTagHandler protocolTagHandler =
|
||||
new ProtocolTagHandler();
|
||||
|
||||
// Set up document handler
|
||||
DocumentHandler contentHandler = new DocumentHandler(
|
||||
"protocol", protocolTagHandler);
|
||||
|
||||
// Set up XML parser
|
||||
XMLReader parser = XMLReaderFactory.createXMLReader();
|
||||
parser.setContentHandler(contentHandler);
|
||||
|
||||
// Read and parse file
|
||||
InputStream xml = new BufferedInputStream(input);
|
||||
parser.parse(new InputSource(xml));
|
||||
xml.close();
|
||||
|
||||
// Return parsed protocol
|
||||
return protocolTagHandler.asProtocolInfo();
|
||||
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new GuacamoleException("Error reading basic user mapping file.", e);
|
||||
}
|
||||
catch (SAXException e) {
|
||||
throw new GuacamoleException("Error parsing basic user mapping XML.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads through all pre-defined protocols and any protocols within the
|
||||
* "protocols" subdirectory of GUACAMOLE_HOME, returning a map containing
|
||||
* each of these protocols. The key of each entry will be the name of that
|
||||
* protocol, as would be passed to guacd during connection.
|
||||
*
|
||||
* @return A map of all available protocols.
|
||||
* @throws GuacamoleException If an error occurs while reading the various
|
||||
* protocol XML files.
|
||||
*/
|
||||
private Map<String, ProtocolInfo> readProtocols() throws GuacamoleException {
|
||||
|
||||
// Map of all available protocols
|
||||
Map<String, ProtocolInfo> protocols = new HashMap<String, ProtocolInfo>();
|
||||
|
||||
// Get protcols directory
|
||||
File protocol_directory = new File(getGuacamoleHome(), "protocols");
|
||||
|
||||
// Read protocols from directory if it exists
|
||||
if (protocol_directory.isDirectory()) {
|
||||
|
||||
// Get all XML files
|
||||
File[] files = protocol_directory.listFiles(
|
||||
new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File file, String string) {
|
||||
return string.endsWith(".xml");
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
// Load each protocol from each file
|
||||
for (File file : files) {
|
||||
|
||||
try {
|
||||
|
||||
// Parse protocol
|
||||
FileInputStream stream = new FileInputStream(file);
|
||||
ProtocolInfo protocol = readProtocol(stream);
|
||||
stream.close();
|
||||
|
||||
// Store protocol
|
||||
protocols.put(protocol.getName(), protocol);
|
||||
|
||||
}
|
||||
catch (IOException e) {
|
||||
logger.error("Unable to read connection parameter information from \"{}\": {}", file.getAbsolutePath(), e.getMessage());
|
||||
logger.debug("Error reading protocol XML.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If known protocols are not already defined, read from classpath
|
||||
for (String protocol : KNOWN_PROTOCOLS) {
|
||||
|
||||
// If protocol not defined yet, attempt to load from classpath
|
||||
if (!protocols.containsKey(protocol)) {
|
||||
|
||||
InputStream stream = LocalEnvironment.class.getResourceAsStream(
|
||||
"/org/glyptodon/guacamole/protocols/"
|
||||
+ protocol + ".xml");
|
||||
|
||||
// Parse XML if available
|
||||
if (stream != null)
|
||||
protocols.put(protocol, readProtocol(stream));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Protocols map now fully populated
|
||||
return protocols;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getGuacamoleHome() {
|
||||
return guacHome;
|
||||
@@ -161,4 +319,14 @@ public class LocalEnvironment implements Environment {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, ProtocolInfo> getProtocols() {
|
||||
return availableProtocols;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProtocolInfo getProtocol(String name) {
|
||||
return availableProtocols.get(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -20,7 +20,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic;
|
||||
package org.glyptodon.guacamole.protocols;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
@@ -20,7 +20,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic;
|
||||
package org.glyptodon.guacamole.protocols;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
@@ -20,7 +20,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic;
|
||||
package org.glyptodon.guacamole.protocols;
|
||||
|
||||
/**
|
||||
* Describes an available legal value for an enumerated protocol parameter.
|
@@ -20,7 +20,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml;
|
||||
package org.glyptodon.guacamole.xml;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
@@ -20,7 +20,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml;
|
||||
package org.glyptodon.guacamole.xml;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
@@ -24,5 +24,5 @@
|
||||
* Classes driving the SAX-based XML parser used by the Guacamole web
|
||||
* application.
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.basic.xml;
|
||||
package org.glyptodon.guacamole.xml;
|
||||
|
@@ -20,10 +20,10 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml.protocol;
|
||||
package org.glyptodon.guacamole.xml.protocol;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.ProtocolParameterOption;
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolParameterOption;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -20,10 +20,10 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml.protocol;
|
||||
package org.glyptodon.guacamole.xml.protocol;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.ProtocolParameter;
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolParameter;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -20,10 +20,10 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml.protocol;
|
||||
package org.glyptodon.guacamole.xml.protocol;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.ProtocolInfo;
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolInfo;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -24,5 +24,5 @@
|
||||
* Classes related to parsing XML files which describe the parameters of a
|
||||
* protocol.
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.basic.xml.protocol;
|
||||
package org.glyptodon.guacamole.xml.protocol;
|
||||
|
@@ -40,10 +40,10 @@
|
||||
<option value="nla">NLA (Network Level Authentication)</option>
|
||||
<option value="any">Any</option>
|
||||
</param>
|
||||
|
||||
|
||||
<param name="disable-auth" type="boolean" title="Disable authentication" value="true"/>
|
||||
<param name="ignore-cert" type="boolean" title="Ignore server certificate" value="true"/>
|
||||
|
||||
|
||||
<param name="remote-app" type="text" title="RemoteApp program"/>
|
||||
<param name="remote-app-dir" type="text" title="RemoteApp working directory"/>
|
||||
<param name="remote-app-args" type="text" title="RemoteApp parameters"/>
|
@@ -8,7 +8,7 @@
|
||||
|
||||
<param name="password-regex"
|
||||
title="Password regular expression" type="text"/>
|
||||
|
||||
|
||||
<param name="font-name" title="Font name" type="text"/>
|
||||
<param name="font-size" title="Font size" type="enum">
|
||||
<option value=""></option>
|
@@ -33,7 +33,7 @@ import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
import org.glyptodon.guacamole.net.auth.simple.SimpleAuthenticationProvider;
|
||||
import org.glyptodon.guacamole.net.basic.auth.Authorization;
|
||||
import org.glyptodon.guacamole.net.basic.auth.UserMapping;
|
||||
import org.glyptodon.guacamole.net.basic.xml.DocumentHandler;
|
||||
import org.glyptodon.guacamole.xml.DocumentHandler;
|
||||
import org.glyptodon.guacamole.net.basic.xml.user_mapping.UserMappingTagHandler;
|
||||
import org.glyptodon.guacamole.properties.FileGuacamoleProperty;
|
||||
import org.glyptodon.guacamole.properties.GuacamoleProperties;
|
||||
|
@@ -22,13 +22,7 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.crud.protocols;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@@ -37,20 +31,15 @@ import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamWriter;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleServerException;
|
||||
import org.glyptodon.guacamole.environment.Environment;
|
||||
import org.glyptodon.guacamole.environment.LocalEnvironment;
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
import org.glyptodon.guacamole.net.basic.RestrictedHttpServlet;
|
||||
import org.glyptodon.guacamole.net.basic.ProtocolInfo;
|
||||
import org.glyptodon.guacamole.net.basic.ProtocolParameter;
|
||||
import org.glyptodon.guacamole.net.basic.ProtocolParameterOption;
|
||||
import org.glyptodon.guacamole.net.basic.xml.DocumentHandler;
|
||||
import org.glyptodon.guacamole.net.basic.xml.protocol.ProtocolTagHandler;
|
||||
import org.glyptodon.guacamole.properties.GuacamoleHome;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolInfo;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolParameter;
|
||||
import org.glyptodon.guacamole.protocols.ProtocolParameterOption;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.XMLReader;
|
||||
import org.xml.sax.helpers.XMLReaderFactory;
|
||||
|
||||
/**
|
||||
* Simple HttpServlet which outputs XML containing a list of all visible
|
||||
@@ -65,57 +54,6 @@ public class List extends RestrictedHttpServlet {
|
||||
*/
|
||||
private Logger logger = LoggerFactory.getLogger(List.class);
|
||||
|
||||
/**
|
||||
* Array of all known protocol names.
|
||||
*/
|
||||
private static final String[] KNOWN_PROTOCOLS = new String[]{
|
||||
"vnc", "rdp", "ssh", "telnet"};
|
||||
|
||||
/**
|
||||
* Parses the given XML file, returning the parsed ProtocolInfo.
|
||||
*
|
||||
* @param input An input stream containing XML describing the parameters
|
||||
* associated with a protocol supported by Guacamole.
|
||||
* @return A new ProtocolInfo object which contains the parameters described
|
||||
* by the XML file parsed.
|
||||
* @throws GuacamoleException If an error occurs while parsing the XML file.
|
||||
*/
|
||||
private ProtocolInfo getProtocol(InputStream input)
|
||||
throws GuacamoleException {
|
||||
|
||||
// Parse document
|
||||
try {
|
||||
|
||||
// Get handler for root element
|
||||
ProtocolTagHandler protocolTagHandler =
|
||||
new ProtocolTagHandler();
|
||||
|
||||
// Set up document handler
|
||||
DocumentHandler contentHandler = new DocumentHandler(
|
||||
"protocol", protocolTagHandler);
|
||||
|
||||
// Set up XML parser
|
||||
XMLReader parser = XMLReaderFactory.createXMLReader();
|
||||
parser.setContentHandler(contentHandler);
|
||||
|
||||
// Read and parse file
|
||||
InputStream xml = new BufferedInputStream(input);
|
||||
parser.parse(new InputSource(xml));
|
||||
xml.close();
|
||||
|
||||
// Return parsed protocol
|
||||
return protocolTagHandler.asProtocolInfo();
|
||||
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new GuacamoleException("Error reading basic user mapping file.", e);
|
||||
}
|
||||
catch (SAXException e) {
|
||||
throw new GuacamoleException("Error parsing basic user mapping XML.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Given an XML stream and a fully-populated ProtocolInfo object, writes
|
||||
* out the corresponding protocol XML describing all available parameters.
|
||||
@@ -217,68 +155,9 @@ public class List extends RestrictedHttpServlet {
|
||||
// Set encoding
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
|
||||
// Map of all available protocols
|
||||
Map<String, ProtocolInfo> protocols = new HashMap<String, ProtocolInfo>();
|
||||
|
||||
// Get protcols directory
|
||||
File protocol_directory = new File(GuacamoleHome.getDirectory(),
|
||||
"protocols");
|
||||
|
||||
// Read protocols from directory if it exists
|
||||
if (protocol_directory.isDirectory()) {
|
||||
|
||||
// Get all XML files
|
||||
File[] files = protocol_directory.listFiles(
|
||||
new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File file, String string) {
|
||||
return string.endsWith(".xml");
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
// Load each protocol from each file
|
||||
for (File file : files) {
|
||||
|
||||
try {
|
||||
|
||||
// Parse protocol
|
||||
FileInputStream stream = new FileInputStream(file);
|
||||
ProtocolInfo protocol = getProtocol(stream);
|
||||
stream.close();
|
||||
|
||||
// Store protocol
|
||||
protocols.put(protocol.getName(), protocol);
|
||||
|
||||
}
|
||||
catch (IOException e) {
|
||||
logger.error("Unable to read connection parameter information from \"{}\": {}", file.getAbsolutePath(), e.getMessage());
|
||||
logger.debug("Error reading protocol XML.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If known protocols are not already defined, read from classpath
|
||||
for (String protocol : KNOWN_PROTOCOLS) {
|
||||
|
||||
// If protocol not defined yet, attempt to load from classpath
|
||||
if (!protocols.containsKey(protocol)) {
|
||||
|
||||
InputStream stream = List.class.getResourceAsStream(
|
||||
"/net/sourceforge/guacamole/net/protocols/"
|
||||
+ protocol + ".xml");
|
||||
|
||||
// Parse XML if available
|
||||
if (stream != null)
|
||||
protocols.put(protocol, getProtocol(stream));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// Retrieve map of all available protocols
|
||||
Environment env = new LocalEnvironment();
|
||||
Map<String, ProtocolInfo> protocols = env.getProtocols();
|
||||
|
||||
// Write actual XML
|
||||
try {
|
||||
|
@@ -24,7 +24,7 @@ package org.glyptodon.guacamole.net.basic.xml.user_mapping;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.auth.Authorization;
|
||||
import org.glyptodon.guacamole.net.basic.auth.UserMapping;
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -23,7 +23,7 @@
|
||||
package org.glyptodon.guacamole.net.basic.xml.user_mapping;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.auth.Authorization;
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml.user_mapping;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.basic.xml.user_mapping;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@@ -23,7 +23,7 @@
|
||||
package org.glyptodon.guacamole.net.basic.xml.user_mapping;
|
||||
|
||||
import org.glyptodon.guacamole.net.basic.auth.UserMapping;
|
||||
import org.glyptodon.guacamole.net.basic.xml.TagHandler;
|
||||
import org.glyptodon.guacamole.xml.TagHandler;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
|
Reference in New Issue
Block a user