mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-19 11:11:28 +00:00
renamed module
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
Copyright (c) 2015 Sebastian Stenzel
|
||||
This file is licensed under the terms of the MIT license.
|
||||
See the LICENSE.txt file for more info.
|
||||
|
||||
|
||||
Contributors:
|
||||
Sebastian Stenzel - initial API and implementation
|
||||
-->
|
||||
@@ -14,12 +14,13 @@
|
||||
<artifactId>main</artifactId>
|
||||
<version>0.11.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>jackrabbit-filesystem-adapter</artifactId>
|
||||
<name>Jackrabbit filesystem-WebDAV-adapter</name>
|
||||
<description>WebDAV servlet based on Apache Jackrabbit serving files from a filesystem</description>
|
||||
<artifactId>frontend-webdav</artifactId>
|
||||
<name>Jackrabbit-based WebDAV filesystem frontend</name>
|
||||
<description>Provides access via WebDAV to filesystems</description>
|
||||
|
||||
<properties>
|
||||
<jackrabbit.version>2.11.0</jackrabbit.version>
|
||||
<jetty.version>9.3.3.v20150827</jetty.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@@ -43,7 +44,19 @@
|
||||
<artifactId>jackrabbit-webdav</artifactId>
|
||||
<version>${jackrabbit.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- Jetty -->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-server</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-webapp</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Commons -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
@@ -59,18 +72,6 @@
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>commons-test</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-server</artifactId>
|
||||
<version>9.3.3.v20150827</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-webapp</artifactId>
|
||||
<version>9.3.3.v20150827</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-httpclient</groupId>
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
@@ -96,4 +97,4 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
</project>
|
||||
@@ -16,10 +16,10 @@ import org.apache.jackrabbit.webdav.DavResourceFactory;
|
||||
import org.apache.jackrabbit.webdav.DavSessionProvider;
|
||||
import org.apache.jackrabbit.webdav.WebdavRequest;
|
||||
import org.apache.jackrabbit.webdav.server.AbstractWebdavServlet;
|
||||
import org.cryptomator.filesystem.FileSystem;
|
||||
import org.cryptomator.filesystem.Folder;
|
||||
import org.cryptomator.filesystem.jackrabbit.FileSystemResourceLocatorFactory;
|
||||
|
||||
public class WebDavServlet extends AbstractWebdavServlet {
|
||||
class WebDavServlet extends AbstractWebdavServlet {
|
||||
|
||||
private static final long serialVersionUID = -6632687979352625020L;
|
||||
|
||||
@@ -27,9 +27,9 @@ public class WebDavServlet extends AbstractWebdavServlet {
|
||||
private final DavLocatorFactory davLocatorFactory;
|
||||
private final DavResourceFactory davResourceFactory;
|
||||
|
||||
public WebDavServlet(URI contextRootUri, FileSystem filesystem) {
|
||||
public WebDavServlet(URI contextRootUri, Folder root) {
|
||||
davSessionProvider = new DavSessionProviderImpl();
|
||||
davLocatorFactory = new FileSystemResourceLocatorFactory(contextRootUri, filesystem);
|
||||
davLocatorFactory = new FileSystemResourceLocatorFactory(contextRootUri, root);
|
||||
davResourceFactory = new FilesystemResourceFactory();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package org.cryptomator.webdav.jackrabbitservlet;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.filesystem.Folder;
|
||||
import org.cryptomator.webdav.filters.AcceptRangeFilter;
|
||||
import org.cryptomator.webdav.filters.LoggingHttpFilter;
|
||||
import org.cryptomator.webdav.filters.MacChunkedPutCompatibilityFilter;
|
||||
import org.cryptomator.webdav.filters.UriNormalizationFilter;
|
||||
import org.cryptomator.webdav.filters.UriNormalizationFilter.ResourceTypeChecker;
|
||||
import org.cryptomator.webdav.filters.UriNormalizationFilter.ResourceTypeChecker.ResourceType;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class WebDavServletContextFactory {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(WebDavServletContextFactory.class);
|
||||
private static final String WILDCARD = "/*";
|
||||
|
||||
/**
|
||||
* Creates a new Jetty ServletContextHandler, that can be be added to a servletCollection as follows:
|
||||
*
|
||||
* <pre>
|
||||
* ServletContextHandler context = factory.create(...);
|
||||
* servletCollection.addHandler(context);
|
||||
* servletCollection.mapContexts();
|
||||
* </pre>
|
||||
*
|
||||
* @param contextRoot The URI of the context root. Its path will be used as the servlet's context path.
|
||||
* @param root The location within a filesystem that shall be served via WebDAV.
|
||||
* @return A new Jetty servlet context handler.
|
||||
*/
|
||||
public ServletContextHandler create(URI contextRoot, Folder root) {
|
||||
final ResourceTypeChecker resourceTypeChecker = (path) -> {
|
||||
if (root.resolveFolder(path).exists()) {
|
||||
return ResourceType.FOLDER;
|
||||
} else if (root.resolveFile(path).exists()) {
|
||||
return ResourceType.FILE;
|
||||
} else {
|
||||
return ResourceType.UNKNOWN;
|
||||
}
|
||||
};
|
||||
final String contextPath = StringUtils.removeEnd(contextRoot.getPath(), "/");
|
||||
final ServletContextHandler servletContext = new ServletContextHandler(null, contextPath, ServletContextHandler.SESSIONS);
|
||||
final ServletHolder servletHolder = new ServletHolder(contextPath, new WebDavServlet(contextRoot, root));
|
||||
servletContext.addServlet(servletHolder, WILDCARD);
|
||||
servletContext.addFilter(AcceptRangeFilter.class, WILDCARD, EnumSet.of(DispatcherType.REQUEST));
|
||||
servletContext.addFilter(new FilterHolder(new UriNormalizationFilter(resourceTypeChecker)), WILDCARD, EnumSet.of(DispatcherType.REQUEST));
|
||||
if (SystemUtils.IS_OS_MAC_OSX) {
|
||||
servletContext.addFilter(MacChunkedPutCompatibilityFilter.class, WILDCARD, EnumSet.of(DispatcherType.REQUEST));
|
||||
}
|
||||
if (LOG.isDebugEnabled()) {
|
||||
servletContext.addFilter(LoggingHttpFilter.class, WILDCARD, EnumSet.of(DispatcherType.REQUEST));
|
||||
}
|
||||
return servletContext;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,26 +10,14 @@ package org.cryptomator.webdav.jackrabbitservlet;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.EnumSet;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
|
||||
import org.cryptomator.filesystem.FileSystem;
|
||||
import org.cryptomator.webdav.filters.AcceptRangeFilter;
|
||||
import org.cryptomator.webdav.filters.LoggingHttpFilter;
|
||||
import org.cryptomator.webdav.filters.MacChunkedPutCompatibilityFilter;
|
||||
import org.cryptomator.webdav.filters.UriNormalizationFilter;
|
||||
import org.cryptomator.webdav.filters.UriNormalizationFilter.ResourceTypeChecker;
|
||||
import org.cryptomator.webdav.filters.UriNormalizationFilter.ResourceTypeChecker.ResourceType;
|
||||
import org.eclipse.jetty.server.Connector;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.ServerConnector;
|
||||
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||
import org.eclipse.jetty.util.thread.ThreadPool;
|
||||
|
||||
@@ -48,29 +36,18 @@ class FileSystemBasedWebDavServer {
|
||||
localConnector.setPort(8080);
|
||||
servletCollection = new ContextHandlerCollection();
|
||||
|
||||
final ResourceTypeChecker resourceTypeChecker = (path) -> {
|
||||
if (fileSystem.resolveFolder(path).exists()) {
|
||||
return ResourceType.FOLDER;
|
||||
} else if (fileSystem.resolveFile(path).exists()) {
|
||||
return ResourceType.FILE;
|
||||
} else {
|
||||
return ResourceType.UNKNOWN;
|
||||
}
|
||||
};
|
||||
|
||||
URI servletContextRootUri;
|
||||
final URI servletContextRoot1;
|
||||
final URI servletContextRoot2;
|
||||
try {
|
||||
servletContextRootUri = new URI("http", null, "localhost", 8080, "/", null, null);
|
||||
servletContextRoot1 = new URI("http", null, "localhost", 8080, "/foo/", null, null);
|
||||
servletContextRoot2 = new URI("http", null, "localhost", 8080, "/bar/", null, null);
|
||||
} catch (URISyntaxException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
final ServletContextHandler servletContext = new ServletContextHandler(servletCollection, "/", ServletContextHandler.SESSIONS);
|
||||
final ServletHolder servletHolder = new ServletHolder("FileSystem-WebDAV-Servlet", new WebDavServlet(servletContextRootUri, fileSystem));
|
||||
servletContext.addServlet(servletHolder, "/*");
|
||||
servletContext.addFilter(AcceptRangeFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
servletContext.addFilter(new FilterHolder(new UriNormalizationFilter(resourceTypeChecker)), "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
servletContext.addFilter(MacChunkedPutCompatibilityFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
servletContext.addFilter(LoggingHttpFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
|
||||
final WebDavServletContextFactory servletContextFactory = new WebDavServletContextFactory();
|
||||
servletCollection.addHandler(servletContextFactory.create(servletContextRoot1, fileSystem));
|
||||
servletCollection.addHandler(servletContextFactory.create(servletContextRoot2, fileSystem));
|
||||
servletCollection.mapContexts();
|
||||
|
||||
server.setConnectors(new Connector[] {localConnector});
|
||||
@@ -259,9 +259,9 @@
|
||||
<module>filesystem-nameshortening</module>
|
||||
<module>filesystem-crypto</module>
|
||||
<module>filesystem-invariants-tests</module>
|
||||
<module>frontend-webdav</module>
|
||||
<module>crypto-api</module>
|
||||
<module>crypto-aes</module>
|
||||
<module>jackrabbit-filesystem-adapter</module>
|
||||
<module>core</module>
|
||||
<module>ui</module>
|
||||
</modules>
|
||||
|
||||
Reference in New Issue
Block a user