diff --git a/main/filesystem-api/src/test/resources/log4j2.xml b/main/filesystem-api/src/test/resources/log4j2.xml
new file mode 100644
index 000000000..9b4889392
--- /dev/null
+++ b/main/filesystem-api/src/test/resources/log4j2.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main/filesystem-crypto-integration-tests/.gitignore b/main/filesystem-crypto-integration-tests/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/main/filesystem-crypto-integration-tests/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/main/filesystem-crypto-integration-tests/pom.xml b/main/filesystem-crypto-integration-tests/pom.xml
new file mode 100644
index 000000000..bceda5537
--- /dev/null
+++ b/main/filesystem-crypto-integration-tests/pom.xml
@@ -0,0 +1,64 @@
+
+
+
+ 4.0.0
+
+ org.cryptomator
+ main
+ 0.11.0-SNAPSHOT
+
+ filesystem-crypto-integration-tests
+ Cryptomator filesystem: Encryption layer tests
+
+
+
+ org.cryptomator
+ filesystem-api
+
+
+ org.cryptomator
+ filesystem-crypto
+
+
+ org.cryptomator
+ filesystem-nameshortening
+
+
+
+
+ com.google.dagger
+ dagger
+
+
+ com.google.dagger
+ dagger-compiler
+ provided
+
+
+
+
+ org.cryptomator
+ commons-test
+
+
+ org.cryptomator
+ filesystem-inmemory
+
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/CryptoEngineTestModule.java b/main/filesystem-crypto-integration-tests/src/main/java/org/cryptomator/filesystem/crypto/CryptoEngineTestModule.java
similarity index 88%
rename from main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/CryptoEngineTestModule.java
rename to main/filesystem-crypto-integration-tests/src/main/java/org/cryptomator/filesystem/crypto/CryptoEngineTestModule.java
index 8bfdb86ee..161666ce8 100644
--- a/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/CryptoEngineTestModule.java
+++ b/main/filesystem-crypto-integration-tests/src/main/java/org/cryptomator/filesystem/crypto/CryptoEngineTestModule.java
@@ -6,11 +6,13 @@
* Contributors:
* Sebastian Stenzel - initial API and implementation
*******************************************************************************/
-package org.cryptomator.crypto.engine.impl;
+package org.cryptomator.filesystem.crypto;
import java.security.SecureRandom;
import java.util.Arrays;
+import org.cryptomator.crypto.engine.impl.CryptoEngineModule;
+
/**
* Used as drop-in-replacement for {@link CryptoEngineModule} during unit tests.
*/
diff --git a/main/filesystem-crypto-integration-tests/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemTestComponent.java b/main/filesystem-crypto-integration-tests/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemTestComponent.java
new file mode 100644
index 000000000..98b11e925
--- /dev/null
+++ b/main/filesystem-crypto-integration-tests/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemTestComponent.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Sebastian Stenzel and others.
+ * 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
+ *******************************************************************************/
+package org.cryptomator.filesystem.crypto;
+
+import javax.inject.Singleton;
+
+import org.cryptomator.crypto.engine.impl.CryptoEngineModule;
+import org.cryptomator.filesystem.shortening.ShorteningFileSystemFactory;
+
+import dagger.Component;
+
+/**
+ * To be used in integration tests, where a {@link CryptoFileSystem} is needed in conjunction with {@link CryptoEngineTestModule} (which mocks the CSPRNG) as follows:
+ *
+ * DaggerCryptoFileSystemTestComponent.builder().cryptoEngineModule(new CryptoEngineTestModule()).build()
+ *
+ */
+@Singleton
+@Component(modules = CryptoEngineModule.class)
+public interface CryptoFileSystemTestComponent {
+
+ CryptoFileSystemFactory cryptoFileSystemFactory();
+
+ ShorteningFileSystemFactory shorteningFileSystemFactory();
+
+}
diff --git a/main/filesystem-crypto/src/test/java/org/cryptomator/filesystem/crypto/CryptoFileSystemComponentIntegrationTest.java b/main/filesystem-crypto-integration-tests/src/test/java/org/cryptomator/filesystem/crypto/CryptoFileSystemIntegrationTest.java
similarity index 94%
rename from main/filesystem-crypto/src/test/java/org/cryptomator/filesystem/crypto/CryptoFileSystemComponentIntegrationTest.java
rename to main/filesystem-crypto-integration-tests/src/test/java/org/cryptomator/filesystem/crypto/CryptoFileSystemIntegrationTest.java
index 826187e31..577e98a32 100644
--- a/main/filesystem-crypto/src/test/java/org/cryptomator/filesystem/crypto/CryptoFileSystemComponentIntegrationTest.java
+++ b/main/filesystem-crypto-integration-tests/src/test/java/org/cryptomator/filesystem/crypto/CryptoFileSystemIntegrationTest.java
@@ -13,7 +13,6 @@ import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
-import org.cryptomator.crypto.engine.impl.CryptoEngineTestModule;
import org.cryptomator.filesystem.File;
import org.cryptomator.filesystem.FileSystem;
import org.cryptomator.filesystem.Folder;
@@ -28,11 +27,11 @@ import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class CryptoFileSystemComponentIntegrationTest {
+public class CryptoFileSystemIntegrationTest {
- private static final CryptoFileSystemComponent cryptoFsComp = DaggerCryptoFileSystemComponent.builder().cryptoEngineModule(new CryptoEngineTestModule()).build();
+ private static final Logger LOG = LoggerFactory.getLogger(CryptoFileSystemIntegrationTest.class);
- private static final Logger LOG = LoggerFactory.getLogger(CryptoFileSystemComponentIntegrationTest.class);
+ private final CryptoFileSystemTestComponent cryptoFsComp = DaggerCryptoFileSystemTestComponent.builder().cryptoEngineModule(new CryptoEngineTestModule()).build();
private CryptoFileSystemDelegate cryptoDelegate;
private FileSystem ciphertextFs;
@@ -42,9 +41,9 @@ public class CryptoFileSystemComponentIntegrationTest {
public void setupFileSystems() {
cryptoDelegate = Mockito.mock(CryptoFileSystemDelegate.class);
ciphertextFs = new InMemoryFileSystem();
- cryptoFsComp.cryptoFileSystemFactory().initializeNew(ciphertextFs, "TopSecret");
- cleartextFs = cryptoFsComp.cryptoFileSystemFactory().unlockExisting(ciphertextFs, "TopSecret", cryptoDelegate);
- cleartextFs.create();
+ FileSystem shorteningFs = cryptoFsComp.shorteningFileSystemFactory().get(ciphertextFs);
+ cryptoFsComp.cryptoFileSystemFactory().initializeNew(shorteningFs, "TopSecret");
+ cleartextFs = cryptoFsComp.cryptoFileSystemFactory().unlockExisting(shorteningFs, "TopSecret", cryptoDelegate);
}
@Test(timeout = 1000)
diff --git a/main/filesystem-crypto-integration-tests/src/test/resources/log4j2.xml b/main/filesystem-crypto-integration-tests/src/test/resources/log4j2.xml
new file mode 100644
index 000000000..9b4889392
--- /dev/null
+++ b/main/filesystem-crypto-integration-tests/src/test/resources/log4j2.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main/filesystem-crypto/pom.xml b/main/filesystem-crypto/pom.xml
index 8c21359b3..53da97c04 100644
--- a/main/filesystem-crypto/pom.xml
+++ b/main/filesystem-crypto/pom.xml
@@ -27,10 +27,6 @@
org.cryptomator
filesystem-api
-
- org.cryptomator
- filesystem-nameshortening
-
org.cryptomator
commons
diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/CryptorImpl.java b/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/CryptorImpl.java
index fdbd8c362..790d40794 100644
--- a/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/CryptorImpl.java
+++ b/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/CryptorImpl.java
@@ -29,7 +29,7 @@ import org.cryptomator.crypto.engine.InvalidPassphraseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-public class CryptorImpl implements Cryptor {
+class CryptorImpl implements Cryptor {
private static final int SCRYPT_SALT_LENGTH = 8;
private static final int SCRYPT_COST_PARAM = 1 << 14;
diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystem.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystem.java
index 242f07071..514414c44 100644
--- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystem.java
+++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystem.java
@@ -18,7 +18,7 @@ import org.cryptomator.filesystem.File;
import org.cryptomator.filesystem.FileSystem;
import org.cryptomator.filesystem.Folder;
-public class CryptoFileSystem extends CryptoFolder implements FileSystem {
+class CryptoFileSystem extends CryptoFolder implements FileSystem {
private static final String DATA_ROOT_DIR = "d";
private static final String ROOT_DIRECOTRY_ID = "";
diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemComponent.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemComponent.java
deleted file mode 100644
index 73e0745a0..000000000
--- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemComponent.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 Sebastian Stenzel and others.
- * 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
- *******************************************************************************/
-package org.cryptomator.filesystem.crypto;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-@Singleton
-@Component(modules = CryptoFileSystemModule.class)
-interface CryptoFileSystemComponent {
-
- CryptoFileSystemFactory cryptoFileSystemFactory();
-
-}
diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemFactory.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemFactory.java
index 72a0a6e10..ffaa7025a 100644
--- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemFactory.java
+++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemFactory.java
@@ -18,19 +18,16 @@ import org.cryptomator.crypto.engine.InvalidPassphraseException;
import org.cryptomator.filesystem.FileSystem;
import org.cryptomator.filesystem.Folder;
import org.cryptomator.filesystem.blockaligned.BlockAlignedFileSystemFactory;
-import org.cryptomator.filesystem.shortening.ShorteningFileSystemFactory;
@Singleton
public class CryptoFileSystemFactory {
private final Masterkeys masterkeys;
- private final ShorteningFileSystemFactory shorteningFileSystemFactory;
private final BlockAlignedFileSystemFactory blockAlignedFileSystemFactory;
@Inject
- public CryptoFileSystemFactory(Masterkeys masterkeys, ShorteningFileSystemFactory shorteningFileSystemFactory, BlockAlignedFileSystemFactory blockAlignedFileSystemFactory) {
+ public CryptoFileSystemFactory(Masterkeys masterkeys, BlockAlignedFileSystemFactory blockAlignedFileSystemFactory) {
this.masterkeys = masterkeys;
- this.shorteningFileSystemFactory = shorteningFileSystemFactory;
this.blockAlignedFileSystemFactory = blockAlignedFileSystemFactory;
}
@@ -41,8 +38,7 @@ public class CryptoFileSystemFactory {
public FileSystem unlockExisting(Folder vaultLocation, CharSequence passphrase, CryptoFileSystemDelegate delegate) throws InvalidPassphraseException {
final Cryptor cryptor = masterkeys.decrypt(vaultLocation, passphrase);
masterkeys.backup(vaultLocation);
- final FileSystem nameShorteningFs = shorteningFileSystemFactory.get(vaultLocation);
- final FileSystem cryptoFs = new CryptoFileSystem(nameShorteningFs, cryptor, delegate, passphrase);
+ final FileSystem cryptoFs = new CryptoFileSystem(vaultLocation, cryptor, delegate, passphrase);
return blockAlignedFileSystemFactory.get(cryptoFs);
}
diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemModule.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemModule.java
deleted file mode 100644
index 92e971a0a..000000000
--- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFileSystemModule.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 Sebastian Stenzel and others.
- * 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
- *******************************************************************************/
-package org.cryptomator.filesystem.crypto;
-
-import org.cryptomator.crypto.engine.impl.CryptoEngineModule;
-
-import dagger.Module;
-
-@Module(includes = CryptoEngineModule.class)
-public class CryptoFileSystemModule {
-
-}
diff --git a/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/TestCryptorImplFactory.java b/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/TestCryptorImplFactory.java
index f66a53f04..8a4c1a56d 100644
--- a/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/TestCryptorImplFactory.java
+++ b/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/TestCryptorImplFactory.java
@@ -11,6 +11,8 @@ package org.cryptomator.crypto.engine.impl;
import java.security.SecureRandom;
import java.util.Arrays;
+import org.cryptomator.crypto.engine.Cryptor;
+
public class TestCryptorImplFactory {
private static final SecureRandom RANDOM_MOCK = new SecureRandom() {
@@ -27,7 +29,7 @@ public class TestCryptorImplFactory {
/**
* @return A CryptorImpl with a mocked PRNG, that can be used during tests without the need of "real" random numbers.
*/
- public static CryptorImpl insecureCryptorImpl() {
+ public static Cryptor insecureCryptorImpl() {
return new CryptorImpl(RANDOM_MOCK);
}
diff --git a/main/filesystem-invariants-tests/pom.xml b/main/filesystem-invariants-tests/pom.xml
index 95d6fb829..b29e57662 100644
--- a/main/filesystem-invariants-tests/pom.xml
+++ b/main/filesystem-invariants-tests/pom.xml
@@ -12,7 +12,7 @@
0.11.0-SNAPSHOT
filesystem-invariants-tests
- Cryptomator filesystem invariants tests
+ Cryptomator filesystem: Invariants tests
Test only project which checks invariants of FileSystem implementations
@@ -24,6 +24,10 @@
org.cryptomator
filesystem-crypto
+
+ org.cryptomator
+ filesystem-crypto-integration-tests
+
org.cryptomator
filesystem-inmemory
diff --git a/main/filesystem-invariants-tests/src/test/java/org/cryptomator/filesystem/invariants/FileSystemFactories.java b/main/filesystem-invariants-tests/src/test/java/org/cryptomator/filesystem/invariants/FileSystemFactories.java
index a8f409ce2..2dee6a620 100644
--- a/main/filesystem-invariants-tests/src/test/java/org/cryptomator/filesystem/invariants/FileSystemFactories.java
+++ b/main/filesystem-invariants-tests/src/test/java/org/cryptomator/filesystem/invariants/FileSystemFactories.java
@@ -4,17 +4,15 @@ import static org.cryptomator.common.test.TempFilesRemovedOnShutdown.createTempD
import java.io.IOException;
import java.io.UncheckedIOException;
-import java.security.SecureRandom;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-import org.cryptomator.crypto.engine.Cryptor;
-import org.cryptomator.crypto.engine.impl.CryptorImpl;
import org.cryptomator.filesystem.FileSystem;
-import org.cryptomator.filesystem.crypto.CryptoFileSystem;
+import org.cryptomator.filesystem.crypto.CryptoEngineTestModule;
import org.cryptomator.filesystem.crypto.CryptoFileSystemDelegate;
+import org.cryptomator.filesystem.crypto.CryptoFileSystemTestComponent;
+import org.cryptomator.filesystem.crypto.DaggerCryptoFileSystemTestComponent;
import org.cryptomator.filesystem.inmem.InMemoryFileSystem;
import org.cryptomator.filesystem.invariants.FileSystemFactories.FileSystemFactory;
import org.cryptomator.filesystem.nio.NioFileSystem;
@@ -23,12 +21,7 @@ import org.mockito.Mockito;
class FileSystemFactories implements Iterable {
- private static final SecureRandom RANDOM_MOCK = new SecureRandom() {
- @Override
- public void nextBytes(byte[] bytes) {
- Arrays.fill(bytes, (byte) 0x00);
- }
- };
+ private static final CryptoFileSystemTestComponent CRYPTO_FS_COMP = DaggerCryptoFileSystemTestComponent.builder().cryptoEngineModule(new CryptoEngineTestModule()).build();
private final List factories = new ArrayList<>();
@@ -54,11 +47,15 @@ class FileSystemFactories implements Iterable {
}
private FileSystem createCryptoFileSystemInMemory() {
- return new CryptoFileSystem(createInMemoryFileSystem(), createCryptor(), Mockito.mock(CryptoFileSystemDelegate.class), "aPassphrase");
+ FileSystem delegate = createInMemoryFileSystem();
+ CRYPTO_FS_COMP.cryptoFileSystemFactory().initializeNew(delegate, "aPassphrase");
+ return CRYPTO_FS_COMP.cryptoFileSystemFactory().unlockExisting(delegate, "aPassphrase", Mockito.mock(CryptoFileSystemDelegate.class));
}
private FileSystem createCryptoFileSystemNio() {
- return new CryptoFileSystem(createNioFileSystem(), createCryptor(), Mockito.mock(CryptoFileSystemDelegate.class), "aPassphrase");
+ FileSystem delegate = createNioFileSystem();
+ CRYPTO_FS_COMP.cryptoFileSystemFactory().initializeNew(delegate, "aPassphrase");
+ return CRYPTO_FS_COMP.cryptoFileSystemFactory().unlockExisting(delegate, "aPassphrase", Mockito.mock(CryptoFileSystemDelegate.class));
}
private FileSystem createShorteningFileSystemNio() {
@@ -71,12 +68,6 @@ class FileSystemFactories implements Iterable {
return new ShorteningFileSystem(delegate.folder("d"), delegate.folder("m"), 3);
}
- private Cryptor createCryptor() {
- Cryptor cryptor = new CryptorImpl(RANDOM_MOCK);
- cryptor.randomizeMasterkey();
- return cryptor;
- }
-
private void add(String name, FileSystemFactory factory) {
factories.add(new FileSystemFactory() {
@Override
diff --git a/main/filesystem-nio/src/test/resources/log4j2.xml b/main/filesystem-nio/src/test/resources/log4j2.xml
new file mode 100644
index 000000000..9b4889392
--- /dev/null
+++ b/main/filesystem-nio/src/test/resources/log4j2.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main/frontend-webdav/pom.xml b/main/frontend-webdav/pom.xml
index 14f8a8fcd..48e5ee182 100644
--- a/main/frontend-webdav/pom.xml
+++ b/main/frontend-webdav/pom.xml
@@ -94,13 +94,26 @@
commons-test
- commons-httpclient
- commons-httpclient
+ org.cryptomator
+ filesystem-inmemory
+
+
+ org.cryptomator
+ filesystem-crypto-integration-tests
+
+
+ org.cryptomator
+ filesystem-nameshortening
test
org.cryptomator
- filesystem-inmemory
+ filesystem-crypto
+ test
+
+
+ commons-httpclient
+ commons-httpclient
test
diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/filesystem/jackrabbit/InternalFileSystemResourceLocator.java b/main/frontend-webdav/src/main/java/org/cryptomator/filesystem/jackrabbit/InternalFileSystemResourceLocator.java
index d2be89cc2..bcf67bbd0 100644
--- a/main/frontend-webdav/src/main/java/org/cryptomator/filesystem/jackrabbit/InternalFileSystemResourceLocator.java
+++ b/main/frontend-webdav/src/main/java/org/cryptomator/filesystem/jackrabbit/InternalFileSystemResourceLocator.java
@@ -1,3 +1,11 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Sebastian Stenzel and others.
+ * 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
+ *******************************************************************************/
package org.cryptomator.filesystem.jackrabbit;
import java.util.concurrent.atomic.AtomicReference;
diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLock.java b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLock.java
index 5f52a67e5..d6dba5720 100644
--- a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLock.java
+++ b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLock.java
@@ -1,3 +1,11 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Sebastian Stenzel and others.
+ * 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
+ *******************************************************************************/
package org.cryptomator.frontend.webdav.jackrabbitservlet;
import org.apache.jackrabbit.webdav.DavConstants;
diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManager.java b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManager.java
index 07cd42e54..fb7edc2fd 100644
--- a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManager.java
+++ b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManager.java
@@ -1,3 +1,11 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Sebastian Stenzel and others.
+ * 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
+ *******************************************************************************/
package org.cryptomator.frontend.webdav.jackrabbitservlet;
import java.util.Collection;
diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/UncheckedDavException.java b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/UncheckedDavException.java
index 6eb814362..9a8145ca0 100644
--- a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/UncheckedDavException.java
+++ b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/UncheckedDavException.java
@@ -1,3 +1,11 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Sebastian Stenzel and others.
+ * 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
+ *******************************************************************************/
package org.cryptomator.frontend.webdav.jackrabbitservlet;
import org.apache.jackrabbit.webdav.DavException;
diff --git a/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/InMemoryWebDavServer.java b/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/InMemoryWebDavServer.java
index fb1524dad..35f12fd24 100644
--- a/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/InMemoryWebDavServer.java
+++ b/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/InMemoryWebDavServer.java
@@ -9,25 +9,31 @@
package org.cryptomator.frontend.webdav;
import java.net.URI;
-import java.nio.ByteBuffer;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import org.cryptomator.filesystem.FileSystem;
-import org.cryptomator.filesystem.WritableFile;
+import org.cryptomator.filesystem.crypto.CryptoEngineTestModule;
+import org.cryptomator.filesystem.crypto.CryptoFileSystemDelegate;
+import org.cryptomator.filesystem.crypto.CryptoFileSystemTestComponent;
+import org.cryptomator.filesystem.crypto.DaggerCryptoFileSystemTestComponent;
import org.cryptomator.filesystem.inmem.InMemoryFileSystem;
import org.cryptomator.frontend.webdav.filters.LoggingHttpFilter;
import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.mockito.Mockito;
public class InMemoryWebDavServer {
+ private static final CryptoFileSystemTestComponent CRYPTO_FS_COMP = DaggerCryptoFileSystemTestComponent.builder().cryptoEngineModule(new CryptoEngineTestModule()).build();
+ private static final WebDavComponent WEVDAV_COMP = DaggerWebDavComponent.create();
+
public static void main(String[] args) throws Exception {
- WebDavServer server = DaggerWebDavComponent.create().server();
+ WebDavServer server = WEVDAV_COMP.server();
server.setPort(8080);
server.start();
- FileSystem fileSystem = setupFilesystem();
+ FileSystem fileSystem = cryptoFileSystem();
ServletContextHandler servlet = server.addServlet(fileSystem, URI.create("http://localhost:8080/foo"));
servlet.addFilter(LoggingHttpFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
servlet.start();
@@ -37,14 +43,18 @@ public class InMemoryWebDavServer {
server.stop();
}
- private static FileSystem setupFilesystem() {
- FileSystem fileSystem = new InMemoryFileSystem();
- fileSystem.folder("mamals").folder("cats").create();
- fileSystem.folder("mamals").folder("dogs").create();
- try (WritableFile writable = fileSystem.folder("mamals").folder("cats").file("Garfield.txt").openWritable()) {
- writable.write(ByteBuffer.wrap("meow".getBytes()));
- }
- return fileSystem;
+ private static FileSystem cryptoFileSystem() {
+ FileSystem shorteningFileSystem = shorteningFileSystem();
+ CRYPTO_FS_COMP.cryptoFileSystemFactory().initializeNew(shorteningFileSystem, "asd");
+ return CRYPTO_FS_COMP.cryptoFileSystemFactory().unlockExisting(shorteningFileSystem, "asd", Mockito.mock(CryptoFileSystemDelegate.class));
+ }
+
+ private static FileSystem shorteningFileSystem() {
+ return CRYPTO_FS_COMP.shorteningFileSystemFactory().get(inMemoryFileSystem());
+ }
+
+ private static FileSystem inMemoryFileSystem() {
+ return new InMemoryFileSystem();
}
}
diff --git a/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/NioWebDavServer.java b/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/NioWebDavServer.java
index 6c45b22fd..681eec05d 100644
--- a/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/NioWebDavServer.java
+++ b/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/NioWebDavServer.java
@@ -30,9 +30,10 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
public class NioWebDavServer {
private static final String PATH_TO_SERVE_PROPERTY = "pathToServe";
+ private static final WebDavComponent WEVDAV_COMP = DaggerWebDavComponent.create();
public static void main(String[] args) throws Exception {
- WebDavServer server = DaggerWebDavComponent.create().server();
+ WebDavServer server = WEVDAV_COMP.server();
server.setPort(8080);
server.start();
diff --git a/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManagerTest.java b/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManagerTest.java
index f4ccfa06b..09d302937 100644
--- a/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManagerTest.java
+++ b/main/frontend-webdav/src/test/java/org/cryptomator/frontend/webdav/jackrabbitservlet/ExclusiveSharedLockManagerTest.java
@@ -1,3 +1,11 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Sebastian Stenzel and others.
+ * 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
+ *******************************************************************************/
package org.cryptomator.frontend.webdav.jackrabbitservlet;
import java.util.Optional;
diff --git a/main/pom.xml b/main/pom.xml
index 5b8fc0b41..58d9d5e27 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -90,6 +90,12 @@
filesystem-crypto
${project.version}
+
+ org.cryptomator
+ filesystem-crypto-integration-tests
+ ${project.version}
+ test
+
org.cryptomator
filesystem-stats
@@ -258,6 +264,7 @@
filesystem-nio
filesystem-nameshortening
filesystem-crypto
+ filesystem-crypto-integration-tests
filesystem-stats
filesystem-invariants-tests
frontend-api
diff --git a/main/ui/pom.xml b/main/ui/pom.xml
index faae1e994..b04a80729 100644
--- a/main/ui/pom.xml
+++ b/main/ui/pom.xml
@@ -30,6 +30,10 @@
org.cryptomator
filesystem-nio
+
+ org.cryptomator
+ filesystem-nameshortening
+
org.cryptomator
filesystem-crypto
diff --git a/main/ui/src/main/java/org/cryptomator/ui/CryptomatorModule.java b/main/ui/src/main/java/org/cryptomator/ui/CryptomatorModule.java
index a5cb957de..58629e841 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/CryptomatorModule.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/CryptomatorModule.java
@@ -15,7 +15,7 @@ import java.util.concurrent.Executors;
import javax.inject.Named;
import javax.inject.Singleton;
-import org.cryptomator.filesystem.crypto.CryptoFileSystemModule;
+import org.cryptomator.crypto.engine.impl.CryptoEngineModule;
import org.cryptomator.frontend.FrontendFactory;
import org.cryptomator.frontend.webdav.WebDavServer;
import org.cryptomator.frontend.webdav.mount.WebDavMounter;
@@ -33,7 +33,7 @@ import dagger.Module;
import dagger.Provides;
import javafx.application.Application;
-@Module(includes = CryptoFileSystemModule.class)
+@Module(includes = CryptoEngineModule.class)
class CryptomatorModule {
private final Application application;
diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java b/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java
index e9c7a6145..06e5f7a44 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java
@@ -29,6 +29,7 @@ import org.cryptomator.filesystem.FileSystem;
import org.cryptomator.filesystem.crypto.CryptoFileSystemDelegate;
import org.cryptomator.filesystem.crypto.CryptoFileSystemFactory;
import org.cryptomator.filesystem.nio.NioFileSystem;
+import org.cryptomator.filesystem.shortening.ShorteningFileSystemFactory;
import org.cryptomator.filesystem.stats.StatsFileSystem;
import org.cryptomator.frontend.CommandFailedException;
import org.cryptomator.frontend.Frontend;
@@ -59,6 +60,7 @@ public class Vault implements Serializable, CryptoFileSystemDelegate {
private final Path path;
private final Lazy frontendFactory;
private final DeferredCloser closer;
+ private final ShorteningFileSystemFactory shorteningFileSystemFactory;
private final CryptoFileSystemFactory cryptoFileSystemFactory;
private final ObjectProperty unlocked = new SimpleObjectProperty(this, "unlocked", Boolean.FALSE);
private final ObservableList namesOfResourcesWithInvalidMac = FXThreads.observableListOnMainThread(FXCollections.observableArrayList());
@@ -72,10 +74,11 @@ public class Vault implements Serializable, CryptoFileSystemDelegate {
/**
* Package private constructor, use {@link VaultFactory}.
*/
- Vault(Path vaultDirectoryPath, Lazy frontendFactory, CryptoFileSystemFactory cryptoFileSystemFactory, DeferredCloser closer) {
+ Vault(Path vaultDirectoryPath, Lazy frontendFactory, ShorteningFileSystemFactory shorteningFileSystemFactory, CryptoFileSystemFactory cryptoFileSystemFactory, DeferredCloser closer) {
this.path = vaultDirectoryPath;
this.frontendFactory = frontendFactory;
this.closer = closer;
+ this.shorteningFileSystemFactory = shorteningFileSystemFactory;
this.cryptoFileSystemFactory = cryptoFileSystemFactory;
try {
@@ -114,7 +117,8 @@ public class Vault implements Serializable, CryptoFileSystemDelegate {
public synchronized void activateFrontend(CharSequence passphrase) throws FrontendCreationFailedException {
try {
FileSystem fs = NioFileSystem.rootedAt(path);
- FileSystem cryptoFs = cryptoFileSystemFactory.unlockExisting(fs, passphrase, this);
+ FileSystem shorteningFs = shorteningFileSystemFactory.get(fs);
+ FileSystem cryptoFs = cryptoFileSystemFactory.unlockExisting(shorteningFs, passphrase, this);
StatsFileSystem statsFs = new StatsFileSystem(cryptoFs);
statsFileSystem = Optional.of(statsFs);
String contextPath = StringUtils.prependIfMissing(mountName, "/");
diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java b/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java
index b413aabac..702678b8a 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java
@@ -14,6 +14,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.cryptomator.filesystem.crypto.CryptoFileSystemFactory;
+import org.cryptomator.filesystem.shortening.ShorteningFileSystemFactory;
import org.cryptomator.frontend.FrontendFactory;
import org.cryptomator.frontend.webdav.mount.WebDavMounter;
import org.cryptomator.ui.util.DeferredCloser;
@@ -24,18 +25,20 @@ import dagger.Lazy;
public class VaultFactory {
private final Lazy frontendFactory;
+ private final ShorteningFileSystemFactory shorteningFileSystemFactory;
private final CryptoFileSystemFactory cryptoFileSystemFactory;
private final DeferredCloser closer;
@Inject
- public VaultFactory(Lazy frontendFactory, CryptoFileSystemFactory cryptoFileSystemFactory, WebDavMounter mounter, DeferredCloser closer) {
+ public VaultFactory(Lazy frontendFactory, ShorteningFileSystemFactory shorteningFileSystemFactory, CryptoFileSystemFactory cryptoFileSystemFactory, WebDavMounter mounter, DeferredCloser closer) {
this.frontendFactory = frontendFactory;
+ this.shorteningFileSystemFactory = shorteningFileSystemFactory;
this.cryptoFileSystemFactory = cryptoFileSystemFactory;
this.closer = closer;
}
public Vault createVault(Path path) {
- return new Vault(path, frontendFactory, cryptoFileSystemFactory, closer);
+ return new Vault(path, frontendFactory, shorteningFileSystemFactory, cryptoFileSystemFactory, closer);
}
}