You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2020/07/08 11:35:30 UTC

[jackrabbit-filevault] branch feature/JCRVLT-419-enable-connection-options created (now fa293f1)

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

kwin pushed a change to branch feature/JCRVLT-419-enable-connection-options
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git.


      at fa293f1  JCRVLT-419 allow to parameterize connection options

This branch includes the following new commits:

     new fa293f1  JCRVLT-419 allow to parameterize connection options

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[jackrabbit-filevault] 01/01: JCRVLT-419 allow to parameterize connection options

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/JCRVLT-419-enable-connection-options
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit fa293f122a8b981f9c9595ffe6922f0e2d04559f
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Wed Jul 8 13:34:55 2020 +0200

    JCRVLT-419 allow to parameterize connection options
    
    WIP: RCP only right now
---
 parent/pom.xml                                          |  2 +-
 vault-rcp/pom.xml                                       |  2 +-
 .../java/org/apache/jackrabbit/vault/rcp/RcpTask.java   |  3 +++
 .../org/apache/jackrabbit/vault/rcp/RcpTaskManager.java |  8 +++++---
 .../apache/jackrabbit/vault/rcp/impl/RcpServlet.java    | 15 +++++++++++++--
 .../apache/jackrabbit/vault/rcp/impl/RcpTaskImpl.java   | 17 +++++++++++++----
 .../jackrabbit/vault/rcp/impl/RcpTaskManagerImpl.java   | 12 ++++++++----
 7 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index ed2bb47..876562f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -50,7 +50,7 @@ Apache Jackrabbit FileVault is a project of the Apache Software Foundation.
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <jackrabbit.version>2.20.1</jackrabbit.version>
+        <jackrabbit.version>2.21.3-SNAPSHOT</jackrabbit.version>
         <oak.version>1.30.0</oak.version>
         <slf4j.version>1.7.6</slf4j.version>
         <test.oak>false</test.oak>
diff --git a/vault-rcp/pom.xml b/vault-rcp/pom.xml
index 5860dba..4e800b8 100644
--- a/vault-rcp/pom.xml
+++ b/vault-rcp/pom.xml
@@ -36,7 +36,7 @@
 
     <properties>
         <!-- downgrade dependencies to make compatible with the minimum supported version -->
-        <jackrabbit.version>2.14.0</jackrabbit.version>
+<!--         <jackrabbit.version>2.14.0</jackrabbit.version> -->
         <!-- http://maven.apache.org/ref/3.6.3/maven-model-builder/index.html#Inheritance_Assembly -->
         <project.directory>vault-rcp</project.directory>
     </properties>
diff --git a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTask.java b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTask.java
index 6e9b516..399378c 100644
--- a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTask.java
+++ b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTask.java
@@ -21,6 +21,7 @@ import java.util.List;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.spi2dav.ConnectionOptions;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.util.RepositoryCopier;
@@ -68,4 +69,6 @@ public interface RcpTask {
      */
     WorkspaceFilter getFilter();
 
+    ConnectionOptions getConnectionOptions();
+
 }
\ No newline at end of file
diff --git a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTaskManager.java b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTaskManager.java
index 1e91987..7a71421 100644
--- a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTaskManager.java
+++ b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/RcpTaskManager.java
@@ -21,6 +21,7 @@ import java.util.Map;
 
 import javax.jcr.Credentials;
 
+import org.apache.jackrabbit.spi2dav.ConnectionOptions;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
@@ -36,9 +37,10 @@ public interface RcpTaskManager {
 
     boolean removeTask(String taskId);
 
-    RcpTask addTask(RepositoryAddress src, Credentials srcCreds, String dst, String id, WorkspaceFilter srcFilter, boolean recursive);
+    RcpTask addTask(RepositoryAddress src, ConnectionOptions connectionOptions, Credentials srcCreds, String dst, String id,
+            WorkspaceFilter srcFilter, boolean recursive);
 
-    RcpTask addTask(RepositoryAddress src, Credentials srcCreds, String dst, String id, List<String> excludes, boolean recursive)
-            throws ConfigurationException;
+    RcpTask addTask(RepositoryAddress src, ConnectionOptions connectionOptions, Credentials srcCreds, String dst, String id,
+            List<String> excludes, boolean recursive) throws ConfigurationException;
 
 }
\ No newline at end of file
diff --git a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpServlet.java b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpServlet.java
index abb3009..cf01083 100644
--- a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpServlet.java
+++ b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpServlet.java
@@ -31,6 +31,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.spi2dav.ConnectionOptions;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
@@ -74,6 +75,8 @@ public class RcpServlet extends SlingAllMethodsServlet {
     public static final String PARAM_EXCLUDES = "excludes";
     public static final String PARAM_RESUME_FROM = "resumeFrom";
     public static final String PARAM_FILTER = "filter";
+    public static final String PARAM_ALLOW_SELF_SIGNED_CERTIFICATE = "allowSelfSignedCertificate";
+    private static final String PARAM_DISABLE_HOSTNAME_VERIFICATION = "disableHostnameVerification";
 
     /**
      * default logger
@@ -165,13 +168,18 @@ public class RcpServlet extends SlingAllMethodsServlet {
                     }
                 }
                 boolean recursive = data.optBoolean(PARAM_RECURSIVE, false);
+
+                ConnectionOptions.Builder connectionOptionsBuilder = ConnectionOptions.builder();
+                connectionOptionsBuilder.allowSelfSignedCertificates(data.optBoolean(PARAM_ALLOW_SELF_SIGNED_CERTIFICATE));
+                connectionOptionsBuilder.disableHostnameVerification(data.optBoolean(PARAM_DISABLE_HOSTNAME_VERIFICATION));
+
                 if (data.has(PARAM_EXCLUDES)) {
                     List<String> excludeList = new LinkedList<>();
                     JSONArray excludes = data.getJSONArray(PARAM_EXCLUDES);
                     for (int idx = 0; idx < excludes.length(); idx++) {
                         excludeList.add(excludes.getString(idx));
                     }
-                    task = taskMgr.addTask(address, creds, dst, id, excludeList, recursive);
+                    task = taskMgr.addTask(address, connectionOptionsBuilder.build(), creds, dst, id, excludeList, recursive);
                 } else {
                     final WorkspaceFilter filter;
                     if (data.has(PARAM_FILTER)) {
@@ -181,8 +189,9 @@ public class RcpServlet extends SlingAllMethodsServlet {
                     } else {
                         filter = null;
                     }
-                    task = taskMgr.addTask(address, creds, dst, id, filter, recursive);
+                    task = taskMgr.addTask(address, connectionOptionsBuilder.build(), creds, dst, id, filter, recursive);
                 }
+                
 
                 // add additional data
                 if (data.has(PARAM_BATCHSIZE)) {
@@ -289,6 +298,8 @@ public class RcpServlet extends SlingAllMethodsServlet {
                 w.key(RcpServlet.PARAM_FILTER).value(rcpTask.getFilter().getSourceAsString());
             }
         }
+        w.key(PARAM_DISABLE_HOSTNAME_VERIFICATION).value(rcpTask.getConnectionOptions().isDisableHostnameVerification());
+        w.key(PARAM_ALLOW_SELF_SIGNED_CERTIFICATE).value(rcpTask.getConnectionOptions().isAllowSelfSignedCertificates());
         w.key("status").object();
         w.key(RcpServlet.PARAM_STATE).value(rcpTask.getResult().getState().name());
         w.key("currentPath").value(rcpTask.getRcp().getCurrentPath());
diff --git a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskImpl.java b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskImpl.java
index 0eb3f72..aed1ae9 100644
--- a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskImpl.java
+++ b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskImpl.java
@@ -26,6 +26,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 
+import org.apache.jackrabbit.spi2dav.ConnectionOptions;
 import org.apache.jackrabbit.vault.davex.DAVExRepositoryFactory;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener;
@@ -83,6 +84,8 @@ public class RcpTaskImpl implements Runnable, RcpTask {
 
     WorkspaceFilter filter;
 
+    private final ConnectionOptions connectionOptions;
+
     private static final class ResultImpl implements RcpTask.Result {
 
         private final State state;
@@ -109,14 +112,14 @@ public class RcpTaskImpl implements Runnable, RcpTask {
         }
     }
 
-    public RcpTaskImpl(ClassLoader classLoader, RepositoryAddress src, Credentials srcCreds, String dst, String id, List<String> excludes,
+    public RcpTaskImpl(ClassLoader classLoader, RepositoryAddress src, ConnectionOptions connectionOptions, Credentials srcCreds, String dst, String id, List<String> excludes,
             boolean recursive) throws ConfigurationException {
-        this(classLoader, src, srcCreds, dst, id, createFilterForExcludes(excludes), recursive);
+        this(classLoader, src, connectionOptions, srcCreds, dst, id, createFilterForExcludes(excludes), recursive);
         this.excludes = excludes;
     }
 
     @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public RcpTaskImpl(@JsonProperty("classLoader") ClassLoader dynLoader, @JsonProperty("source") RepositoryAddress src, @JsonProperty("srcCreds") Credentials srcCreds, @JsonProperty("destination") String dst, @JsonProperty("id") String id, @JsonProperty("filter") WorkspaceFilter srcFilter,
+    public RcpTaskImpl(@JsonProperty("classLoader") ClassLoader dynLoader, @JsonProperty("source") RepositoryAddress src, @JsonProperty("connectionOptions") ConnectionOptions connectionOptions, @JsonProperty("srcCreds") Credentials srcCreds, @JsonProperty("destination") String dst, @JsonProperty("id") String id, @JsonProperty("filter") WorkspaceFilter srcFilter,
             @JsonProperty("recursive") boolean recursive) {
         this.src = src;
         this.dst = dst;
@@ -128,6 +131,7 @@ public class RcpTaskImpl implements Runnable, RcpTask {
         this.filter = srcFilter;
         initTransientData();
         this.classLoader = dynLoader;
+        this.connectionOptions = connectionOptions;
     }
 
     private static WorkspaceFilter createFilterForExcludes(List<String> excludes) throws ConfigurationException {
@@ -230,7 +234,7 @@ public class RcpTaskImpl implements Runnable, RcpTask {
         DAVExRepositoryFactory factory = new DAVExRepositoryFactory();
         Repository srcRepo;
         try {
-            srcRepo = factory.createRepository(src);
+            srcRepo = factory.createRepository(src, connectionOptions);
         } catch (RepositoryException e) {
             log.error("Error while retrieving src repository {}: {}", src, e.toString());
             throw e;
@@ -272,6 +276,11 @@ public class RcpTaskImpl implements Runnable, RcpTask {
         return src;
     }
 
+    @Override
+    public ConnectionOptions getConnectionOptions() {
+        return connectionOptions;
+    }
+
     Credentials getSrcCreds() {
         return srcCreds;
     }
diff --git a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskManagerImpl.java b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskManagerImpl.java
index 74caf67..6827095 100644
--- a/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskManagerImpl.java
+++ b/vault-rcp/src/main/java/org/apache/jackrabbit/vault/rcp/impl/RcpTaskManagerImpl.java
@@ -35,6 +35,7 @@ import javax.jcr.Credentials;
 import javax.jcr.RepositoryException;
 import javax.jcr.SimpleCredentials;
 
+import org.apache.jackrabbit.spi2dav.ConnectionOptions;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
@@ -116,6 +117,7 @@ public class RcpTaskManagerImpl implements RcpTaskManager {
         } catch (IOException e) {
             log.error("Could not restore previous tasks", e);
             configuration = null;
+            tasks = new TreeMap<>();
         }
         this.configuration = configuration;
     }
@@ -172,6 +174,8 @@ public class RcpTaskManagerImpl implements RcpTaskManager {
             if (!entry.getKey().equals(entry.getValue().getId())) {
                 throw new IllegalArgumentException("Id of entry " + entry.getKey() + " does not match its task id " + entry.getValue().getId());
             }
+            // set classloader to use again
+            entry.getValue().setClassLoader(getDynamicClassLoader());
         }
     }
 
@@ -233,24 +237,24 @@ public class RcpTaskManagerImpl implements RcpTaskManager {
     }
 
     @Override
-    public RcpTask addTask(RepositoryAddress src, Credentials srcCreds, String dst, String id, List<String> excludes, boolean recursive)
+    public RcpTask addTask(RepositoryAddress src, ConnectionOptions connectionOptions, Credentials srcCreds, String dst, String id, List<String> excludes, boolean recursive)
             throws ConfigurationException {
         if (id != null && id.length() > 0 && tasks.containsKey(id)) {
             throw new IllegalArgumentException("Task with id " + id + " already exists.");
         }
-        RcpTaskImpl task = new RcpTaskImpl(getDynamicClassLoader(), src, srcCreds, dst, id, excludes, recursive);
+        RcpTaskImpl task = new RcpTaskImpl(getDynamicClassLoader(), src, connectionOptions, srcCreds, dst, id, excludes, recursive);
         tasks.put(task.getId(), task);
         persistTasks();
         return task;
     }
 
     @Override
-    public RcpTask addTask(RepositoryAddress src, Credentials srcCreds, String dst, String id, WorkspaceFilter srcFilter,
+    public RcpTask addTask(RepositoryAddress src, ConnectionOptions connectionOptions, Credentials srcCreds, String dst, String id, WorkspaceFilter srcFilter,
             boolean recursive) {
         if (id != null && id.length() > 0 && tasks.containsKey(id)) {
             throw new IllegalArgumentException("Task with id " + id + " already exists.");
         }
-        RcpTaskImpl task = new RcpTaskImpl(getDynamicClassLoader(), src, srcCreds, dst, id, srcFilter, recursive);
+        RcpTaskImpl task = new RcpTaskImpl(getDynamicClassLoader(), src, connectionOptions, srcCreds, dst, id, srcFilter, recursive);
         tasks.put(task.getId(), task);
         persistTasks();
         return task;