This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c7f8f87ef0684d5d7907fe4ba21b8cc69d125892
Author: Rene Cordier <rcord...@linagora.com>
AuthorDate: Tue Apr 9 17:50:30 2019 +0700

    JAMES-2720 provision of dockerized LinShare containers
---
 third-party/linshare/pom.xml                       |  68 +++++++++
 .../java/org/apache/james/linshare/Linshare.java   | 154 +++++++++++++++++++++
 .../apache/james/linshare/LinshareExtension.java   |  42 ++++++
 .../org/apache/james/linshare/LinshareTest.java    |  61 ++++++++
 .../src/test/resources/conf/catalina.properties    | 147 ++++++++++++++++++++
 .../src/test/resources/conf/log4j.properties       |  59 ++++++++
 .../linshare/src/test/resources/conf/smtpd.conf    |  14 ++
 .../linshare/src/test/resources/docker-compose.yml |  77 +++++++++++
 .../src/test/resources/logback-test.xml}           |  29 ++--
 third-party/linshare/src/test/resources/ssl/ca.pem |  28 ++++
 .../linshare/src/test/resources/ssl/linshare.key   |  28 ++++
 .../linshare/src/test/resources/ssl/linshare.pem   |  97 +++++++++++++
 third-party/pom.xml                                |   2 +-
 13 files changed, 786 insertions(+), 20 deletions(-)

diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml
new file mode 100644
index 0000000..5fc4a83
--- /dev/null
+++ b/third-party/linshare/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements. See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership. The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License. You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied. See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.james</groupId>
+        <artifactId>third-party</artifactId>
+        <version>3.4.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>apache-james-linshare</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>testcontainers</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git 
a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java 
b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java
new file mode 100644
index 0000000..7f90649
--- /dev/null
+++ b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java
@@ -0,0 +1,154 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.linshare;
+
+import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+import org.testcontainers.containers.wait.strategy.Wait;
+
+public class Linshare {
+    private static final String WAIT_FOR_BACKEND_INIT_LOG = ".*Server 
startup.*";
+    private static final String WAIT_FOR_DB_INIT_LOG = 
".*/linshare/webservice/rest/admin/authentication/change_password.*";
+    private static final int LINSHARE_BACKEND_PORT = 8080;
+
+    private final GenericContainer<?> linshareBackend;
+    private final GenericContainer<?> linshareDatabase;
+    private final GenericContainer<?> linshareDatabaseInit;
+    private final GenericContainer<?> linshareSmtp;
+    private final GenericContainer<?> linshareLdap;
+    private final GenericContainer<?> linshareMongodb;
+
+    private Network network;
+
+    @SuppressWarnings("resource")
+    public Linshare() {
+        network = Network.newNetwork();
+        linshareDatabase = createDockerDatabase();
+        linshareMongodb = createDockerMongodb();
+        linshareLdap = createDockerLdap();
+        linshareSmtp = createDockerSmtp();
+        linshareBackend = createDockerBackend();
+        linshareDatabaseInit = createDockerDatabaseInit();
+    }
+
+    public void start() {
+        linshareDatabase.start();
+        linshareMongodb.start();
+        linshareLdap.start();
+        linshareSmtp.start();
+        linshareBackend.start();
+        linshareDatabaseInit.start();
+    }
+
+    public void stop() {
+        linshareDatabase.stop();
+        linshareMongodb.stop();
+        linshareLdap.stop();
+        linshareSmtp.stop();
+        linshareBackend.stop();
+        linshareDatabaseInit.stop();
+    }
+
+    public int getPort() {
+        return linshareBackend.getMappedPort(LINSHARE_BACKEND_PORT);
+    }
+
+    public String getIp() {
+        return linshareBackend.getContainerIpAddress();
+    }
+
+    private GenericContainer createDockerDatabase() {
+        return new GenericContainer<>("linagora/linshare-database:2.2")
+            .withNetworkAliases("database", "linshare_database")
+            .withEnv("PGDATA", "/var/lib/postgresql/data/pgdata")
+            .withEnv("POSTGRES_USER", "linshare")
+            .withEnv("POSTGRES_PASSWORD", "linshare")
+            .withNetwork(network);
+    }
+
+    private GenericContainer createDockerMongodb() {
+        return new GenericContainer<>("mongo:3.2")
+            .withNetworkAliases("mongodb", "linshare_mongodb")
+            .withCommand("mongod --smallfiles")
+            .withNetwork(network);
+    }
+
+    private GenericContainer createDockerLdap() {
+        return new GenericContainer<>("linagora/linshare-ldap-for-tests:1.0")
+            .withNetworkAliases("ldap")
+            .withNetwork(network);
+    }
+
+    private GenericContainer createDockerSmtp() {
+        return new GenericContainer<>("linagora/opensmtpd")
+            .withNetworkAliases("smtp", "linshare_smtp")
+            .withClasspathResourceMapping("./conf/smtpd.conf",
+                "/etc/smtpd/smtpd.conf",
+                BindMode.READ_ONLY)
+            .withNetwork(network);
+    }
+
+    private GenericContainer createDockerDatabaseInit() {
+        return new GenericContainer<>("chibenwa/linshare-database-init:2.2")
+            .withEnv("TOMCAT_HOST", "backend")
+            .withEnv("TOMCAT_PORT", "8080")
+            .withEnv("TOMCAT_LDAP_NAME", "ldap-local")
+            .withEnv("TOMCAT_LDAP_URL", "ldap://ldap:389";)
+            .withEnv("TOMCAT_LDAP_BASE_DN", "ou=People,dc=linshare,dc=org")
+            .withEnv("TOMCAT_LDAP_DN", "cn=linshare,dc=linshare,dc=org")
+            .withEnv("TOMCAT_LDAP_PW", "linshare")
+            .withEnv("TOMCAT_DOMAIN_PATTERN_NAME", "openldap-local")
+            .withEnv("TOMCAT_DOMAIN_PATTERN_MODEL", 
"868400c0-c12e-456a-8c3c-19e985290586")
+            .withEnv("NO_REPLY_ADDRESS", "linshare-nore...@linshare.org")
+            .withEnv("DEBUG", "1")
+            .withNetwork(network)
+            .waitingFor(Wait.forLogMessage(WAIT_FOR_DB_INIT_LOG, 1));
+    }
+
+    private GenericContainer createDockerBackend() {
+        return new GenericContainer<>("linagora/linshare-backend:2.2")
+            .withNetworkAliases("backend")
+            .withEnv("SMTP_HOST", "linshare_smtp")
+            .withEnv("SMTP_PORT", "25")
+            .withEnv("POSTGRES_HOST", "linshare_database")
+            .withEnv("POSTGRES_PORT", "5432")
+            .withEnv("POSTGRES_USER", "linshare")
+            .withEnv("POSTGRES_PASSWORD", "linshare")
+            .withEnv("MONGODB_HOST", "linshare_mongodb")
+            .withEnv("MONGODB_PORT", "27017")
+            .withEnv("THUMBNAIL_ENABLE", "false")
+            .withClasspathResourceMapping("./conf/catalina.properties",
+                "/usr/local/tomcat/conf/catalina.properties",
+                BindMode.READ_ONLY)
+            .withClasspathResourceMapping("./conf/log4j.properties",
+                "/etc/linshare/log4j.properties",
+                BindMode.READ_ONLY)
+            .withClasspathResourceMapping("./ssl/id_rsa",
+                "/etc/linshare/id_rsa",
+                BindMode.READ_ONLY)
+            .withClasspathResourceMapping("./ssl/id_rsa.pub",
+                "/etc/linshare/id_rsa.pub",
+                BindMode.READ_ONLY)
+            .withExposedPorts(LINSHARE_BACKEND_PORT)
+            .waitingFor(Wait.forLogMessage(WAIT_FOR_BACKEND_INIT_LOG, 1))
+            .withNetwork(network);
+    }
+}
diff --git 
a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java
 
b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java
new file mode 100644
index 0000000..557b29d
--- /dev/null
+++ 
b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java
@@ -0,0 +1,42 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.linshare;
+
+import org.junit.jupiter.api.extension.AfterAllCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+
+public class LinshareExtension implements BeforeAllCallback, AfterAllCallback {
+    private Linshare linshare;
+
+    @Override
+    public void beforeAll(ExtensionContext context) {
+        linshare = new Linshare();
+        linshare.start();
+    }
+
+    @Override
+    public void afterAll(ExtensionContext extensionContext) {
+        linshare.stop();
+    }
+
+    public Linshare getLinshare() {
+        return linshare;
+    }
+}
diff --git 
a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java
 
b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java
new file mode 100644
index 0000000..855f5ed
--- /dev/null
+++ 
b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java
@@ -0,0 +1,61 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.linshare;
+
+import static io.restassured.RestAssured.given;
+import static io.restassured.config.EncoderConfig.encoderConfig;
+import static io.restassured.config.RestAssuredConfig.newConfig;
+
+import java.nio.charset.StandardCharsets;
+
+import org.apache.http.HttpStatus;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.restassured.RestAssured;
+import io.restassured.builder.RequestSpecBuilder;
+import io.restassured.http.ContentType;
+
+class LinshareTest {
+    @RegisterExtension
+    static LinshareExtension linshareExtension = new LinshareExtension();
+
+    @BeforeEach
+    void setup() {
+        RestAssured.requestSpecification = new RequestSpecBuilder()
+            .setContentType(ContentType.JSON)
+            .setAccept(ContentType.JSON)
+            
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
+            .setBaseUri("http://"; + linshareExtension.getLinshare().getIp())
+            .setPort(linshareExtension.getLinshare().getPort())
+            .build();
+        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+    }
+
+    @Test
+    void linshareShouldStart() {
+        given()
+            .auth().basic("us...@linshare.org", "password1")
+        .when()
+            .get("linshare/webservice/rest/user/v2/documents")
+        .then()
+            .statusCode(HttpStatus.SC_OK);
+    }
+}
diff --git a/third-party/linshare/src/test/resources/conf/catalina.properties 
b/third-party/linshare/src/test/resources/conf/catalina.properties
new file mode 100644
index 0000000..e79b5c9
--- /dev/null
+++ b/third-party/linshare/src/test/resources/conf/catalina.properties
@@ -0,0 +1,147 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageAccess unless the
+# corresponding RuntimePermission ("accessClassInPackage."+package) has
+# been granted.
+package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.tomcat.
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageDefinition unless the
+# corresponding RuntimePermission ("defineClassInPackage."+package) has
+# been granted.
+#
+# by default, no packages are restricted for definition, and none of
+# the class loaders supplied with the JDK call checkPackageDefinition.
+#
+package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,\
+org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
+
+#
+#
+# List of comma-separated paths defining the contents of the "common"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
+# If left as blank,the JVM system loader will be used as Catalina's "common"
+# loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+#
+# Note: Values are enclosed in double quotes ("...") in case either the
+#       ${catalina.base} path or the ${catalina.home} path contains a comma.
+#       Because double quotes are used for quoting, the double quote character
+#       may not appear in a path.
+common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
+
+#
+# List of comma-separated paths defining the contents of the "server"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
+# If left as blank, the "common" loader will be used as Catalina's "server"
+# loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+#
+# Note: Values may be enclosed in double quotes ("...") in case either the
+#       ${catalina.base} path or the ${catalina.home} path contains a comma.
+#       Because double quotes are used for quoting, the double quote character
+#       may not appear in a path.
+server.loader=
+
+#
+# List of comma-separated paths defining the contents of the "shared"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
+# the "common" loader will be used as Catalina's "shared" loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+# Please note that for single jars, e.g. bar.jar, you need the URL form
+# starting with file:.
+#
+# Note: Values may be enclosed in double quotes ("...") in case either the
+#       ${catalina.base} path or the ${catalina.home} path contains a comma.
+#       Because double quotes are used for quoting, the double quote character
+#       may not appear in a path.
+shared.loader=
+
+# Default list of JAR files that should not be scanned using the JarScanner
+# functionality. This is typically used to scan JARs for configuration
+# information. JARs that do not contain such information may be excluded from
+# the scan to speed up the scanning process. This is the default list. JARs on
+# this list are excluded from all scans. The list must be a comma separated 
list
+# of JAR file names.
+# The list of JARs to skip may be over-ridden at a Context level for individual
+# scan types by configuring a JarScanner with a nested JarScanFilter.
+# The JARs listed below include:
+# - Tomcat Bootstrap JARs
+# - Tomcat API JARs
+# - Catalina JARs
+# - Jasper JARs
+# - Tomcat JARs
+# - Common non-Tomcat JARs
+# - Test JARs (JUnit, Cobertura and dependencies)
+tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
+bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
+annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,\
+catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-storeconfig.jar,\
+catalina-tribes.jar,\
+jasper.jar,jasper-el.jar,ecj-*.jar,\
+tomcat-api.jar,tomcat-util.jar,tomcat-util-scan.jar,tomcat-coyote.jar,\
+tomcat-dbcp.jar,tomcat-jni.jar,tomcat-websocket.jar,\
+tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
+tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
+tomcat-jdbc.jar,\
+tools.jar,\
+commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\
+commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\
+commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\
+commons-math*.jar,commons-pool*.jar,\
+jstl.jar,taglibs-standard-spec-*.jar,\
+geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
+ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
+jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\
+xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
+junit.jar,junit-*.jar,ant-launcher.jar,\
+cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,\
+jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,\
+jclouds-bouncycastle-1.9.2.jar,bcprov-*.jar,\
+xom-*.jar
+
+# Default list of JAR files that should be scanned that overrides the default
+# jarsToSkip list above. This is typically used to include a specific JAR that
+# has been excluded by a broad file name pattern in the jarsToSkip list.
+# The list of JARs to scan may be over-ridden at a Context level for individual
+# scan types by configuring a JarScanner with a nested JarScanFilter.
+tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
+log4j-core*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar
+
+# String cache configuration.
+tomcat.util.buf.StringCache.byte.enabled=true
+#tomcat.util.buf.StringCache.char.enabled=true
+#tomcat.util.buf.StringCache.trainThreshold=500000
+#tomcat.util.buf.StringCache.cacheSize=5000
diff --git a/third-party/linshare/src/test/resources/conf/log4j.properties 
b/third-party/linshare/src/test/resources/conf/log4j.properties
new file mode 100644
index 0000000..67118a8
--- /dev/null
+++ b/third-party/linshare/src/test/resources/conf/log4j.properties
@@ -0,0 +1,59 @@
+# Default to info level output; this is very handy if you eventually use 
Hibernate as well.
+log4j.rootCategory=INFO, CONSOLE
+
+# In order to use an external configuration file for log4j, use this key for 
JAVA_OPS
+# JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j.configuration=file:/etc/linshare/log4j.properties"
+
+# Define all the appenders
+log4j.appender.LINSHARE=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.LINSHARE.File=${catalina.home}/logs/linshare
+#log4j.appender.LINSHARE.File=${jetty.home}/logs/linshare
+log4j.appender.LINSHARE.Append=true
+log4j.appender.LINSHARE.Encoding=UTF-8
+# Roll-over the log once per day
+log4j.appender.LINSHARE.DatePattern='.'yyyy-MM-dd'.log'
+log4j.appender.LINSHARE.layout = org.apache.log4j.PatternLayout
+#log4j.appender.LINSHARE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
+log4j.appender.LINSHARE.layout.ConversionPattern=[%p]:%t:%d{yyyyMMdd.HHmmss}:%c:%M:%m%n
+
+
+# CONSOLE is set to be a ConsoleAppender.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+# CONSOLE uses PatternLayout.
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=[%p]:%t:%d{yyyyMMdd.HHmmss}:%c:%M:%m%n
+
+
+# Service category names are the name of the defining module class and then 
the service id.
+# we could set the two new logger to warn to avoid a lot of information in 
production mode. 
+log4j.category.org.linagora.linshare.services.AppModule.TimingFilter=info
+log4j.category.org.linagora.linshare.view.tapestry.services.AppModule.TimingFilter=info
+
+
+# Outputs a list of pages, components and mixins at startup.
+log4j.category.org.apache.tapestry5.services.TapestryModule.ComponentClassResolver=info
+
+# Outputs startup statistics; time to setup and initialize the registry, and a 
list of
+# available services.
+log4j.category.org.apache.tapestry5.TapestryFilter=info
+
+# Disable info message 
"[INFO]:AbstractContextSource:afterPropertiesSet:Property 'userDn' not set - 
anonymous context will be used for read-write operations"
+log4j.category.org.springframework.ldap.core.support.AbstractContextSource=warn
+
+# Turning on debug mode for a page or component will show all of the code 
changes that occur when the
+# class is loaded.  Turning on debug mode for a page will enable detailed 
output about
+# the contruction of the page, including the runtime code modifications that 
occur. Verbose
+# mode is rarely used, as it outputs voluminous details about the rendering of 
the page.
+
+# log4j.category.org.linagora.linshare.pages.Index=info
+
+# Turn on some verbose debugging about everything in the application. This is 
nice initially,
+# while getting everything set up.  You'll probably want to remove this once 
you are 
+# up and running, replacing it with more selecting debugging output.
+#log4j.category.org.linagora.linshare=info
+
+#log4j.category.org.springframework.security=info
+
+log4j.category.org.linagora.linkit=info
+
+log4j.category.org.linagora.linshare=debug
diff --git a/third-party/linshare/src/test/resources/conf/smtpd.conf 
b/third-party/linshare/src/test/resources/conf/smtpd.conf
new file mode 100644
index 0000000..f6afe25
--- /dev/null
+++ b/third-party/linshare/src/test/resources/conf/smtpd.conf
@@ -0,0 +1,14 @@
+# This is the smtpd server system-wide configuration file.
+# See smtpd.conf(5) for more information.
+
+# To accept external mail, replace with: listen on all
+listen on 0.0.0.0
+
+# If you edit the file, you have to run "smtpctl update table aliases"
+table aliases file:/etc/smtpd/aliases
+
+# Uncomment the following to accept external mail for domain "example.org"
+#accept from any for domain "example.org" alias <aliases> deliver to mbox
+
+#accept for local alias <aliases> deliver to mbox
+accept from any for any relay
diff --git a/third-party/linshare/src/test/resources/docker-compose.yml 
b/third-party/linshare/src/test/resources/docker-compose.yml
new file mode 100644
index 0000000..e869bea
--- /dev/null
+++ b/third-party/linshare/src/test/resources/docker-compose.yml
@@ -0,0 +1,77 @@
+# Docker compose file for a full-featured Linshare architecture
+version: '3.7'
+
+services:
+    database:
+        restart: on-failure
+        image: linagora/linshare-database:2.2
+        environment:
+            - PGDATA=/var/lib/postgresql/data/pgdata
+            - POSTGRES_USER=linshare
+            - POSTGRES_PASSWORD=linshare
+
+    backend:
+        restart: on-failure
+        image: linagora/linshare-backend:2.2
+        links:
+            - database:linshare_database
+            - mongodb:linshare_mongodb
+        depends_on:
+            - database
+            - mongodb
+        volumes:
+            - 
./conf/catalina.properties:/usr/local/tomcat/conf/catalina.properties
+            - ./conf/log4j.properties:/etc/linshare/log4j.properties
+            - ./ssl/id_rsa:/etc/linshare/id_rsa
+            - ./ssl/id_rsa.pub:/etc/linshare/id_rsa.pub
+        healthcheck:
+            test: ["CMD", "curl", "-s", "-f", 
"http://localhost:8080/linshare/";]
+            interval: 30s
+            timeout: 10s
+            retries: 3
+            start_period: 40s
+        environment:
+            - SMTP_HOST=linshare_smtp
+            - SMTP_PORT=25
+            - POSTGRES_HOST=linshare_database
+            - POSTGRES_PORT=5432
+            - POSTGRES_USER=linshare
+            - POSTGRES_PASSWORD=linshare
+            - MONGODB_HOST=linshare_mongodb
+            - MONGODB_PORT=27017
+            - THUMBNAIL_ENABLE=false
+
+    mongodb:
+        restart: on-failure
+        image: mongo:3.2
+        command: mongod --smallfiles
+
+    smtp:
+        restart: on-failure
+        image: linagora/opensmtpd
+        volumes:
+            - ./conf/smtpd.conf:/etc/smtpd/smtpd.conf
+
+    ldap:
+        image: linagora/linshare-ldap-for-tests:1.0
+        tty: true
+        stdin_open: true
+
+    database-init:
+        image: chibenwa/linshare-database-init:2.2
+        links:
+            - backend:backend
+        depends_on:
+            - backend
+        environment:
+            - TOMCAT_HOST=backend
+            - TOMCAT_PORT=8080
+            - TOMCAT_LDAP_NAME=ldap-local
+            - TOMCAT_LDAP_URL=ldap://ldap:389
+            - TOMCAT_LDAP_BASE_DN=ou=People,dc=linshare,dc=org
+            - TOMCAT_LDAP_DN=cn=linshare,dc=linshare,dc=org
+            - TOMCAT_LDAP_PW=linshare
+            - TOMCAT_DOMAIN_PATTERN_NAME=openldap-local
+            - TOMCAT_DOMAIN_PATTERN_MODEL=868400c0-c12e-456a-8c3c-19e985290586
+            - NO_REPLY_ADDRESS=linshare-nore...@linshare.org
+            - DEBUG=1
\ No newline at end of file
diff --git a/third-party/pom.xml 
b/third-party/linshare/src/test/resources/logback-test.xml
similarity index 51%
copy from third-party/pom.xml
copy to third-party/linshare/src/test/resources/logback-test.xml
index 66b0a48..1fc9998 100644
--- a/third-party/pom.xml
+++ b/third-party/linshare/src/test/resources/logback-test.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
     Licensed to the Apache Software Foundation (ASF) under one
     or more contributor license agreements. See the NOTICE file
@@ -17,24 +16,16 @@
     specific language governing permissions and limitations
     under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
+<configuration>
 
-    <parent>
-        <groupId>org.apache.james</groupId>
-        <artifactId>james-project</artifactId>
-        <version>3.4.0-SNAPSHOT</version>
-    </parent>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%date %-5level [%thread] - [%logger]- %msg%n</pattern>
+        </encoder>
+    </appender>
 
-    <artifactId>third-party</artifactId>
-    <packaging>pom</packaging>
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+    </root>
 
-    <name>Apache JAMES third party</name>
-    <description>Common utilities for integrating with third party 
software</description>
-    <inceptionYear>2018</inceptionYear>
-
-    <modules>
-        <module>spamassassin</module>
-    </modules>
-
-</project>
\ No newline at end of file
+</configuration>
\ No newline at end of file
diff --git a/third-party/linshare/src/test/resources/ssl/ca.pem 
b/third-party/linshare/src/test/resources/ssl/ca.pem
new file mode 100644
index 0000000..208dd8d
--- /dev/null
+++ b/third-party/linshare/src/test/resources/ssl/ca.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzTCCA7WgAwIBAgIJAMikNamqqRPjMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYD
+VQQGEwJGUjEMMAoGA1UECBMDSWRGMQ4wDAYDVQQHEwVQYXJpczERMA8GA1UEChMI
+TGluYWdvcmExETAPBgNVBAsUCFImRCBTYWFzMRQwEgYDVQQDEwtMaW5hZ29yYSBD
+QTEQMA4GA1UEKRMHRWFzeVJTQTEkMCIGCSqGSIb3DQEJARYVdHNhcmJvbmlAbGlu
+YWdvcmEuY29tMB4XDTE1MDkxNDA4NTAxOVoXDTI1MDkxMTA4NTAxOVowgZ8xCzAJ
+BgNVBAYTAkZSMQwwCgYDVQQIEwNJZEYxDjAMBgNVBAcTBVBhcmlzMREwDwYDVQQK
+EwhMaW5hZ29yYTERMA8GA1UECxQIUiZEIFNhYXMxFDASBgNVBAMTC0xpbmFnb3Jh
+IENBMRAwDgYDVQQpEwdFYXN5UlNBMSQwIgYJKoZIhvcNAQkBFhV0c2FyYm9uaUBs
+aW5hZ29yYS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnX76W
+/7NAsYW9SvK/jPCY3QlpL5lNtiN99OV2hD/Hk1PSG34rwe9GyFCL/4YikcHTnWuk
+vizK1/IDGhi482FlljecWH5UxMlHG8yxUG9ahs86pNjcsyUafDAryXC3ocFtGk4v
+e2kAOatGlqlV7EH2rKi0t5jnMXdV2stMeitUNSFs8+iyDQK4V3T6n/hXpxO8VXsB
+wF7vd/4+idyAcC1YwUKiB+PAbUvpot+hJ8OaM1q5i3CXEFEbUCrJLh/oC2srOdhr
+7Rk4YK6oz+Pw3NQTvVZBByfziE2H6YRHWdRDVcOfWh2L0z42C5tCr23LDAray/9d
+uOYKl+cLKdvv4ymHAgMBAAGjggEIMIIBBDAdBgNVHQ4EFgQUnLuJzgwZk9X8Rgb0
+QUyYz6zdILQwgdQGA1UdIwSBzDCByYAUnLuJzgwZk9X8Rgb0QUyYz6zdILShgaWk
+gaIwgZ8xCzAJBgNVBAYTAkZSMQwwCgYDVQQIEwNJZEYxDjAMBgNVBAcTBVBhcmlz
+MREwDwYDVQQKEwhMaW5hZ29yYTERMA8GA1UECxQIUiZEIFNhYXMxFDASBgNVBAMT
+C0xpbmFnb3JhIENBMRAwDgYDVQQpEwdFYXN5UlNBMSQwIgYJKoZIhvcNAQkBFhV0
+c2FyYm9uaUBsaW5hZ29yYS5jb22CCQDIpDWpqqkT4zAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4IBAQCiEAmG+czlm/HT0s1ahWTtqcbzGl0+j3Io/JtyVNWW
+ALmmYid3VejcHYDbKd0rN+yFJtI+p6CMjpRVZCDEJo8eLZr9P7YZa+jKc0OhjSgr
+mD7FVwyZePid33VuKzWaMLbKiNVIcXroKkm2pEvENdibMZWBuhgrs6Pa00iYH68g
+s5Y1glQV7IeCmHkwNmHtgkiLDIzJYYukxAQSnaz7su8wnGtEJS6iz8+iCtEJm8XR
+FoUzfMS1/TI+C2tU80qfkc7D4kL7eEDob0zfdlZlqMKEWen47EuVuB+4DdImaI1P
+i+10msgMl2o6K4tNYVlfcM3qkHSXFfwEwvWtIqvRYsx4
+-----END CERTIFICATE-----
diff --git a/third-party/linshare/src/test/resources/ssl/linshare.key 
b/third-party/linshare/src/test/resources/ssl/linshare.key
new file mode 100644
index 0000000..58380e0
--- /dev/null
+++ b/third-party/linshare/src/test/resources/ssl/linshare.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfj54Mfv8DEqLv
+AUpPAp+S2jI2I/DjBBzbvuqlsPGN4Qqlt8XPwBl8MEu4DDwingJHvK64jZ7hT3+K
+3Zk/T2HGRYq1eJYAU0CLj6pAhh3kzxadxtTZHcpDZslSeFzq5bog1LKk/d5xv9we
+Qu4xDxUU4a5A9jM9SyP+6YVjih5SebLRhUq2iUPmoQLvLqGz2YVq+keAbpzFcfOX
+7SEfXb1le9HUxrtpVE1svtaaoZziHQYmwTLEb9yq1UWyu+LXSk/gnsnt9Iy19P4I
+V2TuoaiDIXkw1HEzD+fRom38I7Wzf9t+pLuJbGrY2Az0k7NdO/Ri0G5fex3Hvc+o
++euNEa1xAgMBAAECggEBAJFzcEHzEllec7GKpl0XeNjjq417/srErz3tTd81a0OC
+6hl9om6TLkGVbn41P57KLPOdeBPM2FUBExs3J/B/5j5ImoGNDhLyF2l1tDA80hA/
+CBjo9yy3bBREOLG2a8XMZzfbCsu7/FEHod/ybeRvSqkGWAgd5qJ3U9kS990WTLod
+Clx2rYb6ewOhyn0ij9HcyQnPnjetGmvTeBlkIxoz3qjUg7vpxwdj4WQoSUvyTu+c
+YBbLjCKWY7UIlr8EimnPFYl87IMnl6Awj9+iwLTkg3vw83pqsxepllbVpJZh55Vi
+qmIBb0RtPT5mloT4AmeRERpjKFRPfoEc6U18JHCXypECgYEA9wwNviF3NQJtqlV/
+DLxgsWzPiqwT/2KqzcPzRJrKFMf4nMZFTIonXWAkIPGu6bFnsz9mfwgxZjhRMfoW
+amm9NUym0So61joCkCTg08LHUYnFFKFLzesEqiMumq/FDDGMPIG7eNRVw+Pwtd3+
+h2UqcGBjtwzb4mHo8aG7SdrhXtUCgYEA56msu1ALMh2WQm81QLrBybqF7LDWyWab
+65Es356ukBv0FszsCFYW1SngEFjsrcNjNdyjuMu5khxYpW0V7T/lBEnB/BcZ0xBi
+2IQ4OgJH1iPJrd2yhh/U7gHbz26BRM7/hCJuO7CNcPEZJJkfRu3Vv7cohozg+1Uk
+6ipxW+V4+i0CgYEA14SvdH/Tc+5DZ4agiKbKH96SDCLkazZTVaCtV9tFke2GCJa7
+m/MmNkKKIidVdU+r7ObRbt7h4ZAd3WCUL49BXf8ZxH13yK3g0IkrjfFtWse6o622
+6NQvRJHetVnDqEiNU7fFqbpre7IdqzsYMlviMxkTxHw2Uv8hbbKvJdYKKGUCgYAE
+66WvlNOoDNjUMGiBJ3ZWQo/1pwvo2zUUm9DILyamCPH2SgP5aVqyzGDl9/2O80d4
+LWeM1Ubrw45edSKyF1lV7fsgz5zMztxKnQRUtxevhLMT7lGMZ8CuDXwNu9sjCwKC
+W/jba7SVYYmXLWlsqECSAeHqebONoxFVp/Egco9PQQKBgE1iQ30yPc6EaYnVoXGe
+j5BQw80T1yc5ePX5aixZkS0YRywb5YjR6lg6/tSqCSFsvUs7ysj9etXfMLP2JDns
+7LFzDEhPP71uQASe729JCBcK92pQOmbJZO2yxFp06P6y8eMNb+giefWybRe2CTt2
+rE8Xi7dsol9Ev4pYqI4DZF9l
+-----END PRIVATE KEY-----
diff --git a/third-party/linshare/src/test/resources/ssl/linshare.pem 
b/third-party/linshare/src/test/resources/ssl/linshare.pem
new file mode 100644
index 0000000..d38eea4
--- /dev/null
+++ b/third-party/linshare/src/test/resources/ssl/linshare.pem
@@ -0,0 +1,97 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=FR, ST=IdF, L=Paris, O=Linagora, OU=R&D Saas, CN=Linagora 
CA/name=EasyRSA/emailAddress=tsarb...@linagora.com
+        Validity
+            Not Before: Sep 14 08:53:06 2015 GMT
+            Not After : Sep 11 08:53:06 2025 GMT
+        Subject: C=FR, ST=IdF, L=Paris, O=Linagora, OU=R&D Saas, 
CN=*.linshare.local/name=EasyRSA/emailAddress=tsarb...@linagora.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:df:8f:9e:0c:7e:ff:03:12:a2:ef:01:4a:4f:02:
+                    9f:92:da:32:36:23:f0:e3:04:1c:db:be:ea:a5:b0:
+                    f1:8d:e1:0a:a5:b7:c5:cf:c0:19:7c:30:4b:b8:0c:
+                    3c:22:9e:02:47:bc:ae:b8:8d:9e:e1:4f:7f:8a:dd:
+                    99:3f:4f:61:c6:45:8a:b5:78:96:00:53:40:8b:8f:
+                    aa:40:86:1d:e4:cf:16:9d:c6:d4:d9:1d:ca:43:66:
+                    c9:52:78:5c:ea:e5:ba:20:d4:b2:a4:fd:de:71:bf:
+                    dc:1e:42:ee:31:0f:15:14:e1:ae:40:f6:33:3d:4b:
+                    23:fe:e9:85:63:8a:1e:52:79:b2:d1:85:4a:b6:89:
+                    43:e6:a1:02:ef:2e:a1:b3:d9:85:6a:fa:47:80:6e:
+                    9c:c5:71:f3:97:ed:21:1f:5d:bd:65:7b:d1:d4:c6:
+                    bb:69:54:4d:6c:be:d6:9a:a1:9c:e2:1d:06:26:c1:
+                    32:c4:6f:dc:aa:d5:45:b2:bb:e2:d7:4a:4f:e0:9e:
+                    c9:ed:f4:8c:b5:f4:fe:08:57:64:ee:a1:a8:83:21:
+                    79:30:d4:71:33:0f:e7:d1:a2:6d:fc:23:b5:b3:7f:
+                    db:7e:a4:bb:89:6c:6a:d8:d8:0c:f4:93:b3:5d:3b:
+                    f4:62:d0:6e:5f:7b:1d:c7:bd:cf:a8:f9:eb:8d:11:
+                    ad:71
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Server
+            Netscape Comment: 
+                Easy-RSA Generated Server Certificate
+            X509v3 Subject Key Identifier: 
+                28:DD:B4:92:F2:8C:CB:0F:42:2A:CE:1F:0B:7C:02:76:D9:A4:E9:D3
+            X509v3 Authority Key Identifier: 
+                
keyid:9C:BB:89:CE:0C:19:93:D5:FC:46:06:F4:41:4C:98:CF:AC:DD:20:B4
+                DirName:/C=FR/ST=IdF/L=Paris/O=Linagora/OU=R&D 
Saas/CN=Linagora CA/name=EasyRSA/emailAddress=tsarb...@linagora.com
+                serial:C8:A4:35:A9:AA:A9:13:E3
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Key Encipherment
+    Signature Algorithm: sha256WithRSAEncryption
+         99:8d:66:fc:73:b4:04:ae:d1:04:5e:80:73:a5:6c:54:f3:bd:
+         a4:51:1a:6f:90:11:32:f4:e4:c1:f2:9d:e0:aa:fe:c6:c5:02:
+         68:a1:f9:fa:8d:88:d2:62:db:6c:9d:78:dc:6a:e2:89:3f:cf:
+         3f:3a:8a:89:56:b3:70:f2:db:32:da:08:07:06:11:33:05:60:
+         d7:31:f3:21:3f:f5:11:21:59:5e:8e:8a:ad:1d:2f:c8:88:54:
+         42:90:bc:2a:fd:42:26:99:b3:45:ac:4a:98:2d:2f:51:ee:8d:
+         1e:3e:01:40:b1:f2:a1:45:e3:8b:f1:91:97:e8:f8:9c:45:fe:
+         c2:42:2e:8f:f1:7e:24:3d:73:ad:c0:7b:6d:3e:e7:5e:c5:36:
+         70:e3:32:ee:8e:d0:47:46:d6:63:5e:8d:5c:e3:ee:08:3e:56:
+         53:3f:ca:39:02:23:1d:d5:fd:90:20:cd:37:a5:4f:83:21:c9:
+         5b:41:cc:cb:57:51:9c:b9:a6:31:1c:74:fa:24:a4:84:a0:98:
+         a0:69:3e:b1:eb:a5:1c:84:ac:9d:4d:e0:37:e9:a0:f2:e6:9d:
+         ca:7b:26:0a:66:d9:91:f8:b0:f3:49:4f:85:59:cf:58:b5:b5:
+         15:7c:86:0b:c0:a8:42:4b:bd:3c:90:54:70:8b:dd:c1:bd:cb:
+         ba:67:13:a9
+-----BEGIN CERTIFICATE-----
+MIIFMjCCBBqgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBnzELMAkGA1UEBhMCRlIx
+DDAKBgNVBAgTA0lkRjEOMAwGA1UEBxMFUGFyaXMxETAPBgNVBAoTCExpbmFnb3Jh
+MREwDwYDVQQLFAhSJkQgU2FhczEUMBIGA1UEAxMLTGluYWdvcmEgQ0ExEDAOBgNV
+BCkTB0Vhc3lSU0ExJDAiBgkqhkiG9w0BCQEWFXRzYXJib25pQGxpbmFnb3JhLmNv
+bTAeFw0xNTA5MTQwODUzMDZaFw0yNTA5MTEwODUzMDZaMIGkMQswCQYDVQQGEwJG
+UjEMMAoGA1UECBMDSWRGMQ4wDAYDVQQHEwVQYXJpczERMA8GA1UEChMITGluYWdv
+cmExETAPBgNVBAsUCFImRCBTYWFzMRkwFwYDVQQDFBAqLmxpbnNoYXJlLmxvY2Fs
+MRAwDgYDVQQpEwdFYXN5UlNBMSQwIgYJKoZIhvcNAQkBFhV0c2FyYm9uaUBsaW5h
+Z29yYS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfj54Mfv8D
+EqLvAUpPAp+S2jI2I/DjBBzbvuqlsPGN4Qqlt8XPwBl8MEu4DDwingJHvK64jZ7h
+T3+K3Zk/T2HGRYq1eJYAU0CLj6pAhh3kzxadxtTZHcpDZslSeFzq5bog1LKk/d5x
+v9weQu4xDxUU4a5A9jM9SyP+6YVjih5SebLRhUq2iUPmoQLvLqGz2YVq+keAbpzF
+cfOX7SEfXb1le9HUxrtpVE1svtaaoZziHQYmwTLEb9yq1UWyu+LXSk/gnsnt9Iy1
+9P4IV2TuoaiDIXkw1HEzD+fRom38I7Wzf9t+pLuJbGrY2Az0k7NdO/Ri0G5fex3H
+vc+o+euNEa1xAgMBAAGjggFwMIIBbDAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQE
+AwIGQDA0BglghkgBhvhCAQ0EJxYlRWFzeS1SU0EgR2VuZXJhdGVkIFNlcnZlciBD
+ZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUKN20kvKMyw9CKs4fC3wCdtmk6dMwgdQGA1Ud
+IwSBzDCByYAUnLuJzgwZk9X8Rgb0QUyYz6zdILShgaWkgaIwgZ8xCzAJBgNVBAYT
+AkZSMQwwCgYDVQQIEwNJZEYxDjAMBgNVBAcTBVBhcmlzMREwDwYDVQQKEwhMaW5h
+Z29yYTERMA8GA1UECxQIUiZEIFNhYXMxFDASBgNVBAMTC0xpbmFnb3JhIENBMRAw
+DgYDVQQpEwdFYXN5UlNBMSQwIgYJKoZIhvcNAQkBFhV0c2FyYm9uaUBsaW5hZ29y
+YS5jb22CCQDIpDWpqqkT4zATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMC
+BaAwDQYJKoZIhvcNAQELBQADggEBAJmNZvxztASu0QRegHOlbFTzvaRRGm+QETL0
+5MHyneCq/sbFAmih+fqNiNJi22ydeNxq4ok/zz86iolWs3Dy2zLaCAcGETMFYNcx
+8yE/9REhWV6Oiq0dL8iIVEKQvCr9QiaZs0WsSpgtL1HujR4+AUCx8qFF44vxkZfo
++JxF/sJCLo/xfiQ9c63Ae20+517FNnDjMu6O0EdG1mNejVzj7gg+VlM/yjkCIx3V
+/ZAgzTelT4MhyVtBzMtXUZy5pjEcdPokpISgmKBpPrHrpRyErJ1N4DfpoPLmncp7
+Jgpm2ZH4sPNJT4VZz1i1tRV8hgvAqEJLvTyQVHCL3cG9y7pnE6k=
+-----END CERTIFICATE-----
diff --git a/third-party/pom.xml b/third-party/pom.xml
index 66b0a48..598a038 100644
--- a/third-party/pom.xml
+++ b/third-party/pom.xml
@@ -34,7 +34,7 @@
     <inceptionYear>2018</inceptionYear>
 
     <modules>
+        <module>linshare</module>
         <module>spamassassin</module>
     </modules>
-
 </project>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to