mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 13:41:21 +00:00
GUACAMOLE-1: Remove BasicGuacamoleProperties. Finally remove support for "auth-provider" and "lib-directory" properties.
This commit is contained in:
@@ -1,185 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Glyptodon LLC
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.guacamole;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FilenameFilter;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLClassLoader;
|
|
||||||
import java.security.AccessController;
|
|
||||||
import java.security.PrivilegedActionException;
|
|
||||||
import java.security.PrivilegedExceptionAction;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import org.apache.guacamole.GuacamoleException;
|
|
||||||
import org.apache.guacamole.environment.Environment;
|
|
||||||
import org.apache.guacamole.environment.LocalEnvironment;
|
|
||||||
import org.apache.guacamole.properties.BasicGuacamoleProperties;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A ClassLoader implementation which finds classes within a configurable
|
|
||||||
* directory. This directory is set within guacamole.properties. This class
|
|
||||||
* is deprecated in favor of DirectoryClassLoader, which is automatically
|
|
||||||
* configured based on the presence/absence of GUACAMOLE_HOME/lib.
|
|
||||||
*
|
|
||||||
* @author Michael Jumper
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class GuacamoleClassLoader extends ClassLoader {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class loader which will load classes from the classpath specified
|
|
||||||
* in guacamole.properties.
|
|
||||||
*/
|
|
||||||
private URLClassLoader classLoader = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Any exception that occurs while the class loader is being instantiated.
|
|
||||||
*/
|
|
||||||
private static GuacamoleException exception = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Singleton instance of the GuacamoleClassLoader.
|
|
||||||
*/
|
|
||||||
private static GuacamoleClassLoader instance = null;
|
|
||||||
|
|
||||||
static {
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Attempt to create singleton classloader which loads classes from
|
|
||||||
// all .jar's in the lib directory defined in guacamole.properties
|
|
||||||
instance = AccessController.doPrivileged(new PrivilegedExceptionAction<GuacamoleClassLoader>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public GuacamoleClassLoader run() throws GuacamoleException {
|
|
||||||
|
|
||||||
// TODONT: This should be injected, but GuacamoleClassLoader will be removed soon.
|
|
||||||
Environment environment = new LocalEnvironment();
|
|
||||||
|
|
||||||
return new GuacamoleClassLoader(
|
|
||||||
environment.getProperty(BasicGuacamoleProperties.LIB_DIRECTORY)
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
catch (PrivilegedActionException e) {
|
|
||||||
// On error, record exception
|
|
||||||
exception = (GuacamoleException) e.getException();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new GuacamoleClassLoader which reads classes from the given
|
|
||||||
* directory.
|
|
||||||
*
|
|
||||||
* @param libDirectory The directory to load classes from.
|
|
||||||
* @throws GuacamoleException If the file given is not a director, or if
|
|
||||||
* an error occurs while constructing the URL
|
|
||||||
* for the backing classloader.
|
|
||||||
*/
|
|
||||||
private GuacamoleClassLoader(File libDirectory) throws GuacamoleException {
|
|
||||||
|
|
||||||
// If no directory provided, just direct requests to parent classloader
|
|
||||||
if (libDirectory == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Validate directory is indeed a directory
|
|
||||||
if (!libDirectory.isDirectory())
|
|
||||||
throw new GuacamoleException(libDirectory + " is not a directory.");
|
|
||||||
|
|
||||||
// Get list of URLs for all .jar's in the lib directory
|
|
||||||
Collection<URL> jarURLs = new ArrayList<URL>();
|
|
||||||
File[] files = libDirectory.listFiles(new FilenameFilter() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean accept(File dir, String name) {
|
|
||||||
|
|
||||||
// If it ends with .jar, accept the file
|
|
||||||
return name.endsWith(".jar");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Verify directory was successfully read
|
|
||||||
if (files == null)
|
|
||||||
throw new GuacamoleException("Unable to read contents of directory " + libDirectory);
|
|
||||||
|
|
||||||
// Add the URL for each .jar to the jar URL list
|
|
||||||
for (File file : files) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
jarURLs.add(file.toURI().toURL());
|
|
||||||
}
|
|
||||||
catch (MalformedURLException e) {
|
|
||||||
throw new GuacamoleException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set delegate classloader to new URLClassLoader which loads from the
|
|
||||||
// .jars found above.
|
|
||||||
|
|
||||||
URL[] urls = new URL[jarURLs.size()];
|
|
||||||
classLoader = new URLClassLoader(
|
|
||||||
jarURLs.toArray(urls),
|
|
||||||
getClass().getClassLoader()
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an instance of a GuacamoleClassLoader which finds classes
|
|
||||||
* within the directory configured in guacamole.properties.
|
|
||||||
*
|
|
||||||
* @return An instance of a GuacamoleClassLoader.
|
|
||||||
* @throws GuacamoleException If no instance could be returned due to an
|
|
||||||
* error.
|
|
||||||
*/
|
|
||||||
public static GuacamoleClassLoader getInstance() throws GuacamoleException {
|
|
||||||
|
|
||||||
// If instance could not be created, rethrow original exception
|
|
||||||
if (exception != null) throw exception;
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<?> findClass(String name) throws ClassNotFoundException {
|
|
||||||
|
|
||||||
// If no classloader, use default loader
|
|
||||||
if (classLoader == null)
|
|
||||||
return Class.forName(name);
|
|
||||||
|
|
||||||
// Otherwise, delegate
|
|
||||||
return classLoader.loadClass(name);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -37,7 +37,6 @@ import org.apache.guacamole.GuacamoleException;
|
|||||||
import org.apache.guacamole.GuacamoleServerException;
|
import org.apache.guacamole.GuacamoleServerException;
|
||||||
import org.apache.guacamole.environment.Environment;
|
import org.apache.guacamole.environment.Environment;
|
||||||
import org.apache.guacamole.net.auth.AuthenticationProvider;
|
import org.apache.guacamole.net.auth.AuthenticationProvider;
|
||||||
import org.apache.guacamole.properties.BasicGuacamoleProperties;
|
|
||||||
import org.apache.guacamole.resource.Resource;
|
import org.apache.guacamole.resource.Resource;
|
||||||
import org.apache.guacamole.resource.ResourceServlet;
|
import org.apache.guacamole.resource.ResourceServlet;
|
||||||
import org.apache.guacamole.resource.SequenceResource;
|
import org.apache.guacamole.resource.SequenceResource;
|
||||||
@@ -148,42 +147,6 @@ public class ExtensionModule extends ServletModule {
|
|||||||
this.patchResourceService = new PatchResourceService();
|
this.patchResourceService = new PatchResourceService();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the value of the now-deprecated "auth-provider" property from
|
|
||||||
* guacamole.properties, returning the corresponding AuthenticationProvider
|
|
||||||
* class. If no authentication provider could be read, or the property is
|
|
||||||
* not present, null is returned.
|
|
||||||
*
|
|
||||||
* As this property is deprecated, this function will also log warning
|
|
||||||
* messages if the property is actually specified.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* The value of the deprecated "auth-provider" property, or null if the
|
|
||||||
* property is not present.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("deprecation") // We must continue to use this property until it is truly no longer supported
|
|
||||||
private Class<AuthenticationProvider> getAuthProviderProperty() {
|
|
||||||
|
|
||||||
// Get and bind auth provider instance, if defined via property
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Use "auth-provider" property if present, but warn about deprecation
|
|
||||||
Class<AuthenticationProvider> authenticationProvider = environment.getProperty(BasicGuacamoleProperties.AUTH_PROVIDER);
|
|
||||||
if (authenticationProvider != null)
|
|
||||||
logger.warn("The \"auth-provider\" and \"lib-directory\" properties are now deprecated. Please use the \"extensions\" and \"lib\" directories within GUACAMOLE_HOME instead.");
|
|
||||||
|
|
||||||
return authenticationProvider;
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (GuacamoleException e) {
|
|
||||||
logger.warn("Value of deprecated \"auth-provider\" property within guacamole.properties is not valid: {}", e.getMessage());
|
|
||||||
logger.debug("Error reading authentication provider from guacamole.properties.", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binds the given AuthenticationProvider class such that any service
|
* Binds the given AuthenticationProvider class such that any service
|
||||||
* requiring access to the AuthenticationProvider can obtain it via
|
* requiring access to the AuthenticationProvider can obtain it via
|
||||||
@@ -410,11 +373,6 @@ public class ExtensionModule extends ServletModule {
|
|||||||
// Load initial language resources from servlet context
|
// Load initial language resources from servlet context
|
||||||
languageResourceService.addLanguageResources(getServletContext());
|
languageResourceService.addLanguageResources(getServletContext());
|
||||||
|
|
||||||
// Load authentication provider from guacamole.properties for sake of backwards compatibility
|
|
||||||
Class<AuthenticationProvider> authProviderProperty = getAuthProviderProperty();
|
|
||||||
if (authProviderProperty != null)
|
|
||||||
bindAuthenticationProvider(authProviderProperty);
|
|
||||||
|
|
||||||
// Init JavaScript resources with base guacamole.min.js
|
// Init JavaScript resources with base guacamole.min.js
|
||||||
Collection<Resource> javaScriptResources = new ArrayList<Resource>();
|
Collection<Resource> javaScriptResources = new ArrayList<Resource>();
|
||||||
javaScriptResources.add(new WebApplicationResource(getServletContext(), "/guacamole.min.js"));
|
javaScriptResources.add(new WebApplicationResource(getServletContext(), "/guacamole.min.js"));
|
||||||
|
@@ -38,7 +38,7 @@ import org.codehaus.jackson.node.JsonNodeFactory;
|
|||||||
import org.codehaus.jackson.node.ObjectNode;
|
import org.codehaus.jackson.node.ObjectNode;
|
||||||
import org.apache.guacamole.GuacamoleException;
|
import org.apache.guacamole.GuacamoleException;
|
||||||
import org.apache.guacamole.environment.Environment;
|
import org.apache.guacamole.environment.Environment;
|
||||||
import org.apache.guacamole.properties.BasicGuacamoleProperties;
|
import org.apache.guacamole.properties.StringSetProperty;
|
||||||
import org.apache.guacamole.resource.ByteArrayResource;
|
import org.apache.guacamole.resource.ByteArrayResource;
|
||||||
import org.apache.guacamole.resource.Resource;
|
import org.apache.guacamole.resource.Resource;
|
||||||
import org.apache.guacamole.resource.WebApplicationResource;
|
import org.apache.guacamole.resource.WebApplicationResource;
|
||||||
@@ -79,6 +79,19 @@ public class LanguageResourceService {
|
|||||||
*/
|
*/
|
||||||
private static final Pattern LANGUAGE_KEY_PATTERN = Pattern.compile(".*/([a-z]+(_[A-Z]+)?)\\.json");
|
private static final Pattern LANGUAGE_KEY_PATTERN = Pattern.compile(".*/([a-z]+(_[A-Z]+)?)\\.json");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comma-separated list of all allowed languages, where each language is
|
||||||
|
* represented by a language key, such as "en" or "en_US". If specified,
|
||||||
|
* only languages within this list will be listed as available by the REST
|
||||||
|
* service.
|
||||||
|
*/
|
||||||
|
public final StringSetProperty ALLOWED_LANGUAGES = new StringSetProperty() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return "allowed-languages"; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The set of all language keys which are explicitly listed as allowed
|
* The set of all language keys which are explicitly listed as allowed
|
||||||
* within guacamole.properties, or null if all defined languages should be
|
* within guacamole.properties, or null if all defined languages should be
|
||||||
@@ -110,7 +123,7 @@ public class LanguageResourceService {
|
|||||||
|
|
||||||
// Parse list of available languages from properties
|
// Parse list of available languages from properties
|
||||||
try {
|
try {
|
||||||
parsedAllowedLanguages = environment.getProperty(BasicGuacamoleProperties.ALLOWED_LANGUAGES);
|
parsedAllowedLanguages = environment.getProperty(ALLOWED_LANGUAGES);
|
||||||
logger.debug("Available languages will be restricted to: {}", parsedAllowedLanguages);
|
logger.debug("Available languages will be restricted to: {}", parsedAllowedLanguages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2015 Glyptodon LLC
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.guacamole.properties;
|
|
||||||
|
|
||||||
import org.apache.guacamole.GuacamoleException;
|
|
||||||
import org.apache.guacamole.net.auth.AuthenticationProvider;
|
|
||||||
import org.apache.guacamole.properties.GuacamoleProperty;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A GuacamoleProperty whose value is the name of a class to use to
|
|
||||||
* authenticate users. This class must implement AuthenticationProvider. Use
|
|
||||||
* of this property type is deprecated in favor of the
|
|
||||||
* GUACAMOLE_HOME/extensions directory.
|
|
||||||
*
|
|
||||||
* @author Michael Jumper
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public abstract class AuthenticationProviderProperty implements GuacamoleProperty<Class<AuthenticationProvider>> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings("unchecked") // Explicitly checked within by isAssignableFrom()
|
|
||||||
public Class<AuthenticationProvider> parseValue(String authProviderClassName) throws GuacamoleException {
|
|
||||||
|
|
||||||
// If no property provided, return null.
|
|
||||||
if (authProviderClassName == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
// Get auth provider instance
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Get authentication provider class
|
|
||||||
Class<?> authProviderClass = org.apache.guacamole.GuacamoleClassLoader.getInstance().loadClass(authProviderClassName);
|
|
||||||
|
|
||||||
// Verify the located class is actually a subclass of AuthenticationProvider
|
|
||||||
if (!AuthenticationProvider.class.isAssignableFrom(authProviderClass))
|
|
||||||
throw new GuacamoleException("Specified authentication provider class is not a AuthenticationProvider.");
|
|
||||||
|
|
||||||
// Return located class
|
|
||||||
return (Class<AuthenticationProvider>) authProviderClass;
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException e) {
|
|
||||||
throw new GuacamoleException("Authentication provider class not found", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Glyptodon LLC
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.guacamole.properties;
|
|
||||||
|
|
||||||
import org.apache.guacamole.properties.FileGuacamoleProperty;
|
|
||||||
import org.apache.guacamole.properties.IntegerGuacamoleProperty;
|
|
||||||
import org.apache.guacamole.properties.StringGuacamoleProperty;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Properties used by the default Guacamole web application.
|
|
||||||
*
|
|
||||||
* @author Michael Jumper
|
|
||||||
*/
|
|
||||||
public class BasicGuacamoleProperties {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class should not be instantiated.
|
|
||||||
*/
|
|
||||||
private BasicGuacamoleProperties() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The authentication provider to user when retrieving the authorized
|
|
||||||
* configurations of a user. This property is currently supported, but
|
|
||||||
* deprecated in favor of the GUACAMOLE_HOME/extensions directory.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final AuthenticationProviderProperty AUTH_PROVIDER = new AuthenticationProviderProperty() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() { return "auth-provider"; }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The directory to search for authentication provider classes. This
|
|
||||||
* property is currently supported, but deprecated in favor of the
|
|
||||||
* GUACAMOLE_HOME/lib directory.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static final FileGuacamoleProperty LIB_DIRECTORY = new FileGuacamoleProperty() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() { return "lib-directory"; }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The session timeout for the API, in minutes.
|
|
||||||
*/
|
|
||||||
public static final IntegerGuacamoleProperty API_SESSION_TIMEOUT = new IntegerGuacamoleProperty() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() { return "api-session-timeout"; }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comma-separated list of all allowed languages, where each language is
|
|
||||||
* represented by a language key, such as "en" or "en_US". If specified,
|
|
||||||
* only languages within this list will be listed as available by the REST
|
|
||||||
* service.
|
|
||||||
*/
|
|
||||||
public static final StringSetProperty ALLOWED_LANGUAGES = new StringSetProperty() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() { return "allowed-languages"; }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@@ -32,14 +32,14 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import org.apache.guacamole.GuacamoleException;
|
import org.apache.guacamole.GuacamoleException;
|
||||||
import org.apache.guacamole.environment.Environment;
|
import org.apache.guacamole.environment.Environment;
|
||||||
import org.apache.guacamole.GuacamoleSession;
|
import org.apache.guacamole.GuacamoleSession;
|
||||||
import org.apache.guacamole.properties.BasicGuacamoleProperties;
|
import org.apache.guacamole.properties.IntegerGuacamoleProperty;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A basic, HashMap-based implementation of the TokenSessionMap with support
|
* A HashMap-based implementation of the TokenSessionMap with support for
|
||||||
* for session timeouts.
|
* session timeouts.
|
||||||
*
|
*
|
||||||
* @author James Muehlner
|
* @author James Muehlner
|
||||||
*/
|
*/
|
||||||
public class BasicTokenSessionMap implements TokenSessionMap {
|
public class BasicTokenSessionMap implements TokenSessionMap {
|
||||||
@@ -60,6 +60,17 @@ public class BasicTokenSessionMap implements TokenSessionMap {
|
|||||||
private final ConcurrentMap<String, GuacamoleSession> sessionMap =
|
private final ConcurrentMap<String, GuacamoleSession> sessionMap =
|
||||||
new ConcurrentHashMap<String, GuacamoleSession>();
|
new ConcurrentHashMap<String, GuacamoleSession>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The session timeout for the Guacamole REST API, in minutes.
|
||||||
|
*/
|
||||||
|
private final IntegerGuacamoleProperty API_SESSION_TIMEOUT =
|
||||||
|
new IntegerGuacamoleProperty() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return "api-session-timeout"; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new BasicTokenGuacamoleSessionMap configured using the given
|
* Create a new BasicTokenGuacamoleSessionMap configured using the given
|
||||||
* environment.
|
* environment.
|
||||||
@@ -73,7 +84,7 @@ public class BasicTokenSessionMap implements TokenSessionMap {
|
|||||||
|
|
||||||
// Read session timeout from guacamole.properties
|
// Read session timeout from guacamole.properties
|
||||||
try {
|
try {
|
||||||
sessionTimeoutValue = environment.getProperty(BasicGuacamoleProperties.API_SESSION_TIMEOUT, 60);
|
sessionTimeoutValue = environment.getProperty(API_SESSION_TIMEOUT, 60);
|
||||||
}
|
}
|
||||||
catch (GuacamoleException e) {
|
catch (GuacamoleException e) {
|
||||||
logger.error("Unable to read guacamole.properties: {}", e.getMessage());
|
logger.error("Unable to read guacamole.properties: {}", e.getMessage());
|
||||||
|
Reference in New Issue
Block a user