now passing unchecked CryptoExceptions up through various closures, thus being able to catch “InvalidPassphraseException” in UI

This commit is contained in:
Sebastian Stenzel
2016-12-21 17:29:54 +01:00
parent 71b65e03d6
commit 2687c02e31
3 changed files with 7 additions and 4 deletions

View File

@@ -50,12 +50,14 @@ public final class LazyInitializer {
}
}
private static <T> UnaryOperator<T> invokeFactoryIfNull(SupplierThrowingException<T, ?> factory) throws InitializationException {
private static <T, E extends Exception> UnaryOperator<T> invokeFactoryIfNull(SupplierThrowingException<T, E> factory) throws InitializationException {
return currentValue -> {
if (currentValue == null) {
try {
return factory.get();
} catch (Throwable e) {
} catch (RuntimeException e) {
throw e; // don't catch unchecked exceptions
} catch (Exception e) {
throw new InitializationException(e);
}
} else {

View File

@@ -28,7 +28,7 @@
<!-- dependency versions -->
<cryptomator.cryptolib.version>1.0.9</cryptomator.cryptolib.version>
<cryptomator.cryptofs.version>1.0.1</cryptomator.cryptofs.version>
<cryptomator.cryptofs.version>1.1.0-SNAPSHOT</cryptomator.cryptofs.version>
<cryptomator.webdav.version>0.3.0-SNAPSHOT</cryptomator.webdav.version>
<cryptomator.jni.version>1.0.0</cryptomator.jni.version>
<log4j.version>2.1</log4j.version>

View File

@@ -26,6 +26,7 @@ import org.cryptomator.common.LazyInitializer;
import org.cryptomator.cryptofs.CryptoFileSystem;
import org.cryptomator.cryptofs.CryptoFileSystemProperties;
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
import org.cryptomator.cryptolib.api.CryptoException;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import org.cryptomator.frontend.webdav.WebDavServer;
import org.cryptomator.frontend.webdav.mount.Mounter.CommandFailedException;
@@ -76,7 +77,7 @@ public class Vault {
return LazyInitializer.initializeLazily(cryptoFileSystem, () -> createCryptoFileSystem(passphrase), IOException.class);
}
private CryptoFileSystem createCryptoFileSystem(CharSequence passphrase) throws IOException {
private CryptoFileSystem createCryptoFileSystem(CharSequence passphrase) throws IOException, CryptoException {
CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties().withPassphrase(passphrase).build();
CryptoFileSystem fs = CryptoFileSystemProvider.newFileSystem(getPath(), fsProps);
closer.closeLater(fs);