This commit is contained in:
Sebastian Stenzel
2017-06-28 11:10:35 +02:00
parent 4de1ac6e40
commit 4e5edc834f
4 changed files with 19 additions and 18 deletions

View File

@@ -48,7 +48,7 @@ public final class LazyInitializer {
try {
return reference.updateAndGet(invokeFactoryIfNull(factory));
} catch (InitializationException e) {
Throwables.throwIfUnchecked(e);
Throwables.throwIfUnchecked(e.getCause());
Throwables.throwIfInstanceOf(e.getCause(), exceptionType);
throw e;
}
@@ -61,7 +61,6 @@ public final class LazyInitializer {
try {
return factory.get();
} catch (Exception e) {
Throwables.throwIfUnchecked(e); // don't catch unchecked exceptions
throw new InitializationException(e);
}
} else {

View File

@@ -8,6 +8,7 @@
******************************************************************************/
package org.cryptomator.ui.controllers;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
@@ -372,6 +373,9 @@ public class UnlockController implements ViewController {
}).onError(ServerLifecycleException.class, e -> {
LOG.error("Unlock failed for technical reasons.", e);
messageText.setText(localization.getString("unlock.errorMessage.unlockFailed"));
}).onError(IOException.class, e -> {
LOG.error("Unlock failed for technical reasons.", e);
messageText.setText(localization.getString("unlock.errorMessage.unlockFailed"));
}).andFinally(() -> {
if (!savePassword.isSelected()) {
passwordField.swipe();

View File

@@ -5,6 +5,7 @@
*******************************************************************************/
package org.cryptomator.ui.model;
import java.io.IOException;
import java.nio.CharBuffer;
import java.util.Arrays;
import java.util.Collection;
@@ -74,7 +75,7 @@ public class AutoUnlocker {
try {
vault.unlock(CharBuffer.wrap(storedPw));
mountSilently(vault);
} catch (CryptoException e) {
} catch (IOException | CryptoException e) {
LOG.error("Auto unlock failed.", e);
} finally {
Arrays.fill(storedPw, ' ');

View File

@@ -14,6 +14,7 @@ import java.nio.file.DirectoryStream;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
@@ -84,11 +85,11 @@ public class Vault {
// Commands
// ********************************************************************************/
private CryptoFileSystem getCryptoFileSystem(CharSequence passphrase) throws IOException, InvalidPassphraseException, CryptoException {
private CryptoFileSystem getCryptoFileSystem(CharSequence passphrase) throws NoSuchFileException, IOException, InvalidPassphraseException, CryptoException {
return LazyInitializer.initializeLazily(cryptoFileSystem, () -> unlockCryptoFileSystem(passphrase), IOException.class);
}
private CryptoFileSystem unlockCryptoFileSystem(CharSequence passphrase) throws IOException, InvalidPassphraseException, CryptoException {
private CryptoFileSystem unlockCryptoFileSystem(CharSequence passphrase) throws NoSuchFileException, IOException, InvalidPassphraseException, CryptoException {
CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties() //
.withPassphrase(passphrase) //
.withFlags() //
@@ -116,20 +117,16 @@ public class Vault {
CryptoFileSystemProvider.changePassphrase(getPath(), MASTERKEY_FILENAME, oldPassphrase, newPassphrase);
}
public synchronized void unlock(CharSequence passphrase) throws InvalidPassphraseException, ServerLifecycleException {
try {
FileSystem fs = getCryptoFileSystem(passphrase);
if (!server.isRunning()) {
server.start();
}
servlet = server.createWebDavServlet(fs.getPath("/"), vaultSettings.getId() + "/" + vaultSettings.mountName().get());
servlet.start();
Platform.runLater(() -> {
state.set(State.UNLOCKED);
});
} catch (IOException e) {
LOG.error("Unable to provide filesystem", e);
public synchronized void unlock(CharSequence passphrase) throws ServerLifecycleException, CryptoException, IOException {
FileSystem fs = getCryptoFileSystem(passphrase);
if (!server.isRunning()) {
server.start();
}
servlet = server.createWebDavServlet(fs.getPath("/"), vaultSettings.getId() + "/" + vaultSettings.mountName().get());
servlet.start();
Platform.runLater(() -> {
state.set(State.UNLOCKED);
});
}
public synchronized void mount() throws CommandFailedException {