GUACAMOLE-1298: Migrate to centralized declarations of common dependencies.

This commit is contained in:
Michael Jumper
2021-03-25 19:58:53 -07:00
parent d4e3d8c98f
commit 53fe6e34f8
35 changed files with 306 additions and 127 deletions

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-cas</name> <name>guacamole-auth-cas</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -152,19 +159,16 @@
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency> </dependency>
<!-- Guice --> <!-- Guice -->
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->
@@ -187,19 +191,16 @@
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId> <artifactId>junit-jupiter-api</artifactId>
<version>5.6.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId> <artifactId>junit-jupiter-params</artifactId>
<version>5.6.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId> <artifactId>junit-jupiter-engine</artifactId>
<version>5.6.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-duo</name> <name>guacamole-auth-duo</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -221,19 +228,16 @@
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency> </dependency>
<!-- Guice --> <!-- Guice -->
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->

View File

@@ -20,7 +20,6 @@
package org.apache.guacamole.auth.duo.form; package org.apache.guacamole.auth.duo.form;
import org.apache.guacamole.form.Field; import org.apache.guacamole.form.Field;
import org.codehaus.jackson.annotate.JsonProperty;
/** /**
* A custom field type which uses the DuoWeb API to produce a signed response * A custom field type which uses the DuoWeb API to produce a signed response
@@ -81,8 +80,7 @@ public class DuoSignedResponseField extends Field {
* @return * @return
* The hostname of the DuoWeb API endpoint. * The hostname of the DuoWeb API endpoint.
*/ */
@JsonProperty("apiHost") public String getApiHost() {
public String getAPIHost() {
return apiHost; return apiHost;
} }

View File

@@ -26,10 +26,17 @@
<groupId>org.apache.guacamole</groupId> <groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-auth-header</artifactId> <artifactId>guacamole-auth-header</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<version>1.2.0</version> <version>1.3.0</version>
<name>guacamole-auth-header</name> <name>guacamole-auth-header</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -130,7 +137,7 @@
<dependency> <dependency>
<groupId>org.apache.guacamole</groupId> <groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-ext</artifactId> <artifactId>guacamole-ext</artifactId>
<version>1.2.0</version> <version>1.3.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@@ -138,12 +145,10 @@
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->

View File

@@ -29,10 +29,6 @@
<name>guacamole-auth-jdbc-base</name> <name>guacamole-auth-jdbc-base</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent> <parent>
<groupId>org.apache.guacamole</groupId> <groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-auth-jdbc</artifactId> <artifactId>guacamole-auth-jdbc</artifactId>
@@ -40,6 +36,10 @@
<relativePath>../../</relativePath> <relativePath>../../</relativePath>
</parent> </parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build> <build>
<plugins> <plugins>
@@ -123,19 +123,16 @@
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>4.1.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>4.1.0</version>
</dependency> </dependency>
<!-- Guava - Utility Library --> <!-- Guava - Utility Library -->
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-jdbc</name> <name>guacamole-auth-jdbc</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-json</name> <name>guacamole-auth-json</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -112,19 +119,22 @@
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Jackson for JSON support --> <!-- Jackson for JSON support -->
<dependency> <dependency>
<groupId>org.codehaus.jackson</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-mapper-asl</artifactId> <artifactId>jackson-databind</artifactId>
<version>1.9.2</version> </dependency>
<!-- Guava Base Libraries -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->

View File

@@ -19,12 +19,12 @@
package org.apache.guacamole.auth.json.user; package org.apache.guacamole.auth.json.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
/** /**
* All data associated with a particular user, as parsed from the JSON supplied * All data associated with a particular user, as parsed from the JSON supplied

View File

@@ -19,11 +19,11 @@
package org.apache.guacamole.auth.json.user; package org.apache.guacamole.auth.json.user;
import com.google.common.io.BaseEncoding;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import javax.xml.bind.DatatypeConverter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -101,7 +101,7 @@ public class UserDataDenylist {
return false; return false;
// Add to denylist only if not already present // Add to denylist only if not already present
String signatureHex = DatatypeConverter.printHexBinary(signature); String signatureHex = BaseEncoding.base16().encode(signature);
return denylist.putIfAbsent(signatureHex, data) == null; return denylist.putIfAbsent(signatureHex, data) == null;
} }

View File

@@ -19,6 +19,8 @@
package org.apache.guacamole.auth.json.user; package org.apache.guacamole.auth.json.user;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.BaseEncoding;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provider; import com.google.inject.Provider;
import com.google.inject.Singleton; import com.google.inject.Singleton;
@@ -30,7 +32,6 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.xml.bind.DatatypeConverter;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.auth.json.ConfigurationService; import org.apache.guacamole.auth.json.ConfigurationService;
import org.apache.guacamole.auth.json.CryptoService; import org.apache.guacamole.auth.json.CryptoService;
@@ -43,7 +44,6 @@ import org.apache.guacamole.net.auth.permission.ObjectPermissionSet;
import org.apache.guacamole.net.auth.simple.SimpleDirectory; import org.apache.guacamole.net.auth.simple.SimpleDirectory;
import org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet; import org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet;
import org.apache.guacamole.net.auth.simple.SimpleUser; import org.apache.guacamole.net.auth.simple.SimpleUser;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -142,7 +142,7 @@ public class UserDataService {
// Decrypt using defined encryption key // Decrypt using defined encryption key
byte[] decrypted = cryptoService.decrypt( byte[] decrypted = cryptoService.decrypt(
cryptoService.createEncryptionKey(confService.getSecretKey()), cryptoService.createEncryptionKey(confService.getSecretKey()),
DatatypeConverter.parseBase64Binary(base64) BaseEncoding.base64().decode(base64)
); );
// Abort if decrypted value cannot possibly have a signature AND data // Abort if decrypted value cannot possibly have a signature AND data

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-ldap</name> <name>guacamole-auth-ldap</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -158,12 +165,10 @@
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-openid</name> <name>guacamole-auth-openid</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -198,12 +205,10 @@
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-quickconnect</name> <name>guacamole-auth-quickconnect</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-radius</name> <name>guacamole-auth-radius</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -186,19 +193,16 @@
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency> </dependency>
<!-- Guice --> <!-- Guice -->
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-saml</name> <name>guacamole-auth-saml</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>

View File

@@ -30,6 +30,13 @@
<name>guacamole-auth-totp</name> <name>guacamole-auth-totp</name>
<url>http://guacamole.incubator.apache.org/</url> <url>http://guacamole.incubator.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../../</relativePath>
</parent>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
@@ -225,19 +232,16 @@
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency> </dependency>
<!-- Guice --> <!-- Guice -->
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId> <artifactId>guice-multibindings</artifactId>
<version>3.0</version>
</dependency> </dependency>
<!-- Java servlet API --> <!-- Java servlet API -->

View File

@@ -35,7 +35,6 @@ import org.apache.guacamole.auth.totp.user.UserTOTPKey;
import org.apache.guacamole.auth.totp.conf.ConfigurationService; import org.apache.guacamole.auth.totp.conf.ConfigurationService;
import org.apache.guacamole.form.Field; import org.apache.guacamole.form.Field;
import org.apache.guacamole.totp.TOTPGenerator; import org.apache.guacamole.totp.TOTPGenerator;
import org.codehaus.jackson.annotate.JsonProperty;
/** /**
* Field which prompts the user for an authentication code generated via TOTP. * Field which prompts the user for an authentication code generated via TOTP.
@@ -242,8 +241,7 @@ public class AuthenticationCodeField extends Field {
* If the configuration information required for generating the key URI * If the configuration information required for generating the key URI
* cannot be read from guacamole.properties. * cannot be read from guacamole.properties.
*/ */
@JsonProperty("keyUri") public URI getKeyUri() throws GuacamoleException {
public URI getKeyURI() throws GuacamoleException {
// Do not generate a key URI if no key is being exposed // Do not generate a key URI if no key is being exposed
if (key == null) if (key == null)
@@ -276,11 +274,10 @@ public class AuthenticationCodeField extends Field {
* If the configuration information required for generating the QR code * If the configuration information required for generating the QR code
* cannot be read from guacamole.properties. * cannot be read from guacamole.properties.
*/ */
@JsonProperty("qrCode") public String getQrCode() throws GuacamoleException {
public String getQRCode() throws GuacamoleException {
// Do not generate a QR code if no key is being exposed // Do not generate a QR code if no key is being exposed
URI keyURI = getKeyURI(); URI keyURI = getKeyUri();
if (keyURI == null) if (keyURI == null)
return null; return null;

View File

@@ -30,6 +30,13 @@
<name>guacamole-common-js</name> <name>guacamole-common-js</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../</relativePath>
</parent>
<description> <description>
The base JavaScript API of the Guacamole project, providing JavaScript The base JavaScript API of the Guacamole project, providing JavaScript
support for the Guacamole stack, including a full client support for the Guacamole stack, including a full client

View File

@@ -30,6 +30,13 @@
<name>guacamole-common</name> <name>guacamole-common</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../</relativePath>
</parent>
<description> <description>
The base Java API of the Guacamole project, providing Java support for The base Java API of the Guacamole project, providing Java support for
the Guacamole stack. the Guacamole stack.
@@ -157,7 +164,6 @@
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency> </dependency>
<!-- JUnit --> <!-- JUnit -->

View File

@@ -30,6 +30,13 @@
<name>guacamole-ext</name> <name>guacamole-ext</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../</relativePath>
</parent>
<description> <description>
The Java API for extending the main Guacamole web application. This The Java API for extending the main Guacamole web application. This
is not needed for authoring a new Guacamole-based web application. is not needed for authoring a new Guacamole-based web application.
@@ -151,14 +158,6 @@
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- JAXB -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.2</version>
<scope>provided</scope>
</dependency>
<!-- Guacamole Java API --> <!-- Guacamole Java API -->
<dependency> <dependency>
<groupId>org.apache.guacamole</groupId> <groupId>org.apache.guacamole</groupId>
@@ -175,11 +174,16 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- Guava Base Libraries -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<!-- Jackson for JSON support --> <!-- Jackson for JSON support -->
<dependency> <dependency>
<groupId>org.codehaus.jackson</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-mapper-asl</artifactId> <artifactId>jackson-databind</artifactId>
<version>1.9.2</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -19,6 +19,7 @@
package org.apache.guacamole.environment; package org.apache.guacamole.environment;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FilenameFilter; import java.io.FilenameFilter;
@@ -27,7 +28,6 @@ import java.io.InputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import org.codehaus.jackson.map.ObjectMapper;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.GuacamoleServerException; import org.apache.guacamole.GuacamoleServerException;
import org.apache.guacamole.net.auth.GuacamoleProxyConfiguration; import org.apache.guacamole.net.auth.GuacamoleProxyConfiguration;

View File

@@ -19,8 +19,9 @@
package org.apache.guacamole.form; package org.apache.guacamole.form;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Collection; import java.util.Collection;
import org.codehaus.jackson.map.annotate.JsonSerialize;
/** /**
* Represents an arbitrary field, such as an HTTP parameter, the parameter of a * Represents an arbitrary field, such as an HTTP parameter, the parameter of a
@@ -30,7 +31,7 @@ import org.codehaus.jackson.map.annotate.JsonSerialize;
* either through the web application itself (see FormService.js) or through * either through the web application itself (see FormService.js) or through
* extensions. * extensions.
*/ */
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class Field { public class Field {
/** /**

View File

@@ -19,12 +19,13 @@
package org.apache.guacamole.form; package org.apache.guacamole.form;
import org.codehaus.jackson.map.annotate.JsonSerialize; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
/** /**
* Describes an available legal value for an enumerated field. * Describes an available legal value for an enumerated field.
*/ */
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class FieldOption { public class FieldOption {
/** /**

View File

@@ -19,14 +19,15 @@
package org.apache.guacamole.form; package org.apache.guacamole.form;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import org.codehaus.jackson.map.annotate.JsonSerialize;
/** /**
* Information which describes logical set of fields. * Information which describes logical set of fields.
*/ */
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class Form { public class Form {
/** /**

View File

@@ -19,7 +19,7 @@
package org.apache.guacamole.properties; package org.apache.guacamole.properties;
import javax.xml.bind.DatatypeConverter; import com.google.common.io.BaseEncoding;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.GuacamoleServerException; import org.apache.guacamole.GuacamoleServerException;
@@ -39,7 +39,7 @@ public abstract class ByteArrayProperty implements GuacamoleProperty<byte[]> {
// Return value parsed from hex // Return value parsed from hex
try { try {
return DatatypeConverter.parseHexBinary(value); return BaseEncoding.base16().decode(value);
} }
// Fail parse if hex invalid // Fail parse if hex invalid

View File

@@ -30,6 +30,13 @@
<name>guacamole</name> <name>guacamole</name>
<url>http://guacamole.apache.org/</url> <url>http://guacamole.apache.org/</url>
<parent>
<groupId>org.apache.guacamole</groupId>
<artifactId>guacamole-client</artifactId>
<version>1.3.0</version>
<relativePath>../</relativePath>
</parent>
<description> <description>
The Guacamole web application, providing authentication and an HTML5 The Guacamole web application, providing authentication and an HTML5
remote desktop client. remote desktop client.
@@ -252,17 +259,14 @@
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId> <artifactId>jul-to-slf4j</artifactId>
<version>1.7.7</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>ch.qos.logback</groupId> <groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId> <artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency> </dependency>
<!-- Guacamole Extension API --> <!-- Guacamole Extension API -->
@@ -440,38 +444,32 @@
<dependency> <dependency>
<groupId>com.google.inject</groupId> <groupId>com.google.inject</groupId>
<artifactId>guice</artifactId> <artifactId>guice</artifactId>
<version>4.2.3</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-assistedinject</artifactId> <artifactId>guice-assistedinject</artifactId>
<version>4.2.3</version>
</dependency> </dependency>
<!-- Guice Servlet -->
<dependency> <dependency>
<groupId>com.google.inject.extensions</groupId> <groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId> <artifactId>guice-servlet</artifactId>
<version>4.2.3</version>
</dependency> </dependency>
<!-- Jersey - JAX-RS Implementation --> <!-- Jersey - JAX-RS Implementation -->
<dependency> <dependency>
<groupId>org.glassfish.jersey.containers</groupId> <groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId> <artifactId>jersey-container-servlet-core</artifactId>
<version>2.31</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.glassfish.jersey.inject</groupId> <groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId> <artifactId>jersey-hk2</artifactId>
<version>2.31</version>
</dependency> </dependency>
<!-- Guice bridge for HK2 - the dependency injection framework integrated with Jersey 2.x -->
<dependency> <dependency>
<groupId>org.glassfish.hk2</groupId> <groupId>org.glassfish.hk2</groupId>
<artifactId>guice-bridge</artifactId> <artifactId>guice-bridge</artifactId>
<version>2.6.1</version> </dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency> </dependency>
<!-- JSR-250 annotations --> <!-- JSR-250 annotations -->
@@ -481,27 +479,10 @@
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
<!-- Jackson for JSON support -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.31</version>
<!-- Exclude StAX API, which is part of Java 6 -->
<exclusions>
<exclusion>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Guava Base Libraries --> <!-- Guava Base Libraries -->
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency> </dependency>
<!-- JSTZ for TimeZone Detection --> <!-- JSTZ for TimeZone Detection -->

View File

@@ -19,6 +19,8 @@
package org.apache.guacamole.extension; package org.apache.guacamole.extension;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -30,8 +32,6 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipException; import java.util.zip.ZipException;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import org.apache.guacamole.net.event.listener.Listener; import org.apache.guacamole.net.event.listener.Listener;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.ObjectMapper;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.GuacamoleServerException; import org.apache.guacamole.GuacamoleServerException;
import org.apache.guacamole.net.auth.AuthenticationProvider; import org.apache.guacamole.net.auth.AuthenticationProvider;

View File

@@ -19,9 +19,9 @@
package org.apache.guacamole.extension; package org.apache.guacamole.extension;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import org.codehaus.jackson.annotate.JsonProperty;
/** /**
* Java representation of the JSON manifest contained within every Guacamole * Java representation of the JSON manifest contained within every Guacamole

View File

@@ -19,6 +19,10 @@
package org.apache.guacamole.extension; package org.apache.guacamole.extension;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Collections; import java.util.Collections;
@@ -29,10 +33,6 @@ import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.JsonNodeFactory;
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.StringSetProperty; import org.apache.guacamole.properties.StringSetProperty;
@@ -178,17 +178,17 @@ public class LanguageResourceService {
// Create mutable copy of original // Create mutable copy of original
ObjectNode newNode = JsonNodeFactory.instance.objectNode(); ObjectNode newNode = JsonNodeFactory.instance.objectNode();
Iterator<String> fieldNames = original.getFieldNames(); Iterator<String> fieldNames = original.fieldNames();
while (fieldNames.hasNext()) { while (fieldNames.hasNext()) {
String fieldName = fieldNames.next(); String fieldName = fieldNames.next();
newNode.put(fieldName, original.get(fieldName)); newNode.set(fieldName, original.get(fieldName));
} }
// Merge each field // Merge each field
fieldNames = overlay.getFieldNames(); fieldNames = overlay.fieldNames();
while (fieldNames.hasNext()) { while (fieldNames.hasNext()) {
String fieldName = fieldNames.next(); String fieldName = fieldNames.next();
newNode.put(fieldName, mergeTranslations(original.get(fieldName), overlay.get(fieldName))); newNode.set(fieldName, mergeTranslations(original.get(fieldName), overlay.get(fieldName)));
} }
return newNode; return newNode;
@@ -425,7 +425,7 @@ public class LanguageResourceService {
// Attempt to read language name from node // Attempt to read language name from node
String languageName; String languageName;
if (nameNode == null || (languageName = nameNode.getTextValue()) == null) { if (nameNode == null || (languageName = nameNode.textValue()) == null) {
logger.warn("Root-level \"" + LANGUAGE_DISPLAY_NAME_KEY + "\" string missing or invalid in language \"{}\"", languageKey); logger.warn("Root-level \"" + LANGUAGE_DISPLAY_NAME_KEY + "\" string missing or invalid in language \"{}\"", languageKey);
languageName = languageKey; languageName = languageKey;
} }

View File

@@ -19,11 +19,12 @@
package org.apache.guacamole.rest.connection; package org.apache.guacamole.rest.connection;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.net.auth.Connection; import org.apache.guacamole.net.auth.Connection;
import org.apache.guacamole.protocol.GuacamoleConfiguration; import org.apache.guacamole.protocol.GuacamoleConfiguration;
@@ -33,7 +34,7 @@ import org.apache.guacamole.rest.sharingprofile.APISharingProfile;
* A simple connection to expose through the REST endpoints. * A simple connection to expose through the REST endpoints.
*/ */
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class APIConnection { public class APIConnection {
/** /**

View File

@@ -19,10 +19,11 @@
package org.apache.guacamole.rest.connectiongroup; package org.apache.guacamole.rest.connectiongroup;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.apache.guacamole.net.auth.ConnectionGroup; import org.apache.guacamole.net.auth.ConnectionGroup;
import org.apache.guacamole.net.auth.ConnectionGroup.Type; import org.apache.guacamole.net.auth.ConnectionGroup.Type;
import org.apache.guacamole.rest.connection.APIConnection; import org.apache.guacamole.rest.connection.APIConnection;
@@ -31,7 +32,7 @@ import org.apache.guacamole.rest.connection.APIConnection;
* A simple connection group to expose through the REST endpoints. * A simple connection group to expose through the REST endpoints.
*/ */
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class APIConnectionGroup { public class APIConnectionGroup {
/** /**

View File

@@ -19,14 +19,17 @@
package org.apache.guacamole.rest.sharingprofile; package org.apache.guacamole.rest.sharingprofile;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Map; import java.util.Map;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.apache.guacamole.net.auth.SharingProfile; import org.apache.guacamole.net.auth.SharingProfile;
/** /**
* The external representation used by the REST API for sharing profiles. * The external representation used by the REST API for sharing profiles.
*/ */
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(value=Include.NON_NULL)
public class APISharingProfile { public class APISharingProfile {
/** /**

View File

@@ -19,17 +19,18 @@
package org.apache.guacamole.rest.user; package org.apache.guacamole.rest.user;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.apache.guacamole.net.auth.User; import org.apache.guacamole.net.auth.User;
/** /**
* A simple User to expose through the REST endpoints. * A simple User to expose through the REST endpoints.
*/ */
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class APIUser { public class APIUser {
/** /**

View File

@@ -19,16 +19,17 @@
package org.apache.guacamole.rest.usergroup; package org.apache.guacamole.rest.usergroup;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Map; import java.util.Map;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.apache.guacamole.net.auth.UserGroup; import org.apache.guacamole.net.auth.UserGroup;
/** /**
* A simple UserGroup to expose through the REST endpoints. * A simple UserGroup to expose through the REST endpoints.
*/ */
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) @JsonInclude(value=Include.NON_NULL)
public class APIUserGroup { public class APIUserGroup {
/** /**

120
pom.xml
View File

@@ -32,6 +32,14 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<guava.version>30.1-jre</guava.version>
<guice.version>4.2.3</guice.version>
<guice-bridge.version>2.6.1</guice-bridge.version>
<jackson.version>2.10.1</jackson.version>
<jersey.version>2.31</jersey.version>
<junit.version>5.6.0</junit.version>
<logback.version>1.2.3</logback.version>
<slf4j.version>1.7.30</slf4j.version>
</properties> </properties>
<modules> <modules>
@@ -139,4 +147,116 @@
</plugins> </plugins>
</build> </build>
<dependencyManagement>
<dependencies>
<!-- Guava utility library -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!-- Guice dependency injection -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-assistedinject</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>${guice.version}</version>
</dependency>
<!-- Jersey JAX-RS implementation -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.hk2</groupId>
<artifactId>guice-bridge</artifactId>
<version>${guice-bridge.version}</version>
</dependency>
<!-- Jackson JSON mapper -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
<!-- Exclude StAX API, which is part of Java 6 -->
<exclusions>
<exclusion>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project> </project>