From 528005a623407ab24dd5e97fa8a268d7d6981b19 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 31 Jan 2019 15:37:01 +0100 Subject: [PATCH] fixes #752 --- .../ui/controllers/UnlockController.java | 25 +++++++++++++++---- .../ui/model/InvalidSettingsException.java | 5 ---- .../java/org/cryptomator/ui/model/Vault.java | 7 +++--- .../ui/src/main/resources/localization/en.txt | 8 ++++-- 4 files changed, 30 insertions(+), 15 deletions(-) delete mode 100644 main/ui/src/main/java/org/cryptomator/ui/model/InvalidSettingsException.java diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java index 6c102d6cc..01e49e93d 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java @@ -40,7 +40,6 @@ import org.cryptomator.frontend.webdav.ServerLifecycleException; import org.cryptomator.keychain.KeychainAccess; import org.cryptomator.ui.controls.SecPasswordField; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.InvalidSettingsException; import org.cryptomator.ui.model.Vault; import org.cryptomator.ui.model.WindowsDriveLetters; import org.cryptomator.ui.util.DialogBuilderUtil; @@ -51,6 +50,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; +import java.nio.file.DirectoryNotEmptyException; +import java.nio.file.NotDirectoryException; import java.util.Arrays; import java.util.Comparator; import java.util.Objects; @@ -401,10 +402,6 @@ public class UnlockController implements ViewController { messageText.setText(null); downloadsPageLink.setVisible(false); listener.ifPresent(lstnr -> lstnr.didUnlock(vault)); - }).onError(InvalidSettingsException.class, e -> { - messageText.setText(localization.getString("unlock.errorMessage.invalidMountPath")); - advancedOptions.setVisible(true); - customMountPathField.setStyle("-fx-border-color: red;"); }).onError(InvalidPassphraseException.class, e -> { messageText.setText(localization.getString("unlock.errorMessage.wrongPassword")); passwordField.selectAll(); @@ -423,6 +420,16 @@ 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(NotDirectoryException.class, e -> { + LOG.error("Mount point not a directory.", e); + advancedOptions.setVisible(true); + customMountPathField.setStyle("-fx-border-color: red;"); + showUnlockFailedErrorDialog("unlock.failedDialog.content.mountPathNonExisting"); + }).onError(DirectoryNotEmptyException.class, e -> { + LOG.error("Mount point not empty.", e); + advancedOptions.setVisible(true); + customMountPathField.setStyle("-fx-border-color: red;"); + showUnlockFailedErrorDialog("unlock.failedDialog.content.mountPathNotEmpty"); }).onError(Exception.class, e -> { LOG.error("Unlock failed for technical reasons.", e); messageText.setText(localization.getString("unlock.errorMessage.unlockFailed")); @@ -438,6 +445,14 @@ public class UnlockController implements ViewController { }).runOnce(executor); } + private void showUnlockFailedErrorDialog(String localizableContentKey) { + String title = localization.getString("unlock.failedDialog.title"); + String header = localization.getString("unlock.failedDialog.header"); + String content = localization.getString(localizableContentKey); + Alert alert = DialogBuilderUtil.buildErrorDialog(title, header, content, ButtonType.OK); + alert.show(); + } + /* callback */ public void setListener(UnlockListener listener) { diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/InvalidSettingsException.java b/main/ui/src/main/java/org/cryptomator/ui/model/InvalidSettingsException.java deleted file mode 100644 index ed9b39040..000000000 --- a/main/ui/src/main/java/org/cryptomator/ui/model/InvalidSettingsException.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.cryptomator.ui.model; - -public class InvalidSettingsException extends RuntimeException { - -} 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 ec1b889b3..78a2a51e4 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 @@ -35,6 +35,7 @@ import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; +import java.nio.file.NotDirectoryException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Objects; @@ -97,11 +98,11 @@ public class Vault { CryptoFileSystemProvider.changePassphrase(getPath(), MASTERKEY_FILENAME, oldPassphrase, newPassphrase); } - public synchronized void unlock(CharSequence passphrase) throws InvalidSettingsException, CryptoException, IOException, Volume.VolumeException { + public synchronized void unlock(CharSequence passphrase) throws CryptoException, IOException, Volume.VolumeException { Platform.runLater(() -> state.set(State.PROCESSING)); try { - if (vaultSettings.usesIndividualMountPath().and(vaultSettings.individualMountPath().isEmpty()).get()) { - throw new InvalidSettingsException(); + if (vaultSettings.usesIndividualMountPath().get() && vaultSettings.individualMountPath().get().isEmpty()) { + throw new NotDirectoryException(""); } CryptoFileSystem fs = getCryptoFileSystem(passphrase); volume = volumeProvider.get(); diff --git a/main/ui/src/main/resources/localization/en.txt b/main/ui/src/main/resources/localization/en.txt index da431045e..87cfb3df8 100644 --- a/main/ui/src/main/resources/localization/en.txt +++ b/main/ui/src/main/resources/localization/en.txt @@ -88,8 +88,6 @@ unlock.savePassword.delete.confirmation.content=The saved password of this vault unlock.choicebox.winDriveLetter.auto=Assign automatically unlock.pendingMessage.unlocking=Unlocking vault... unlock.errorMessage.wrongPassword=Wrong password -unlock.errorMessage.wrongPassword=Wrong Password -unlock.errorMessage.invalidMountPath=Use of custom mount path selected, but no path given. unlock.errorMessage.unlockFailed=Unlock failed. See log file for details. unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware=Unsupported vault. This vault has been created with an older version of Cryptomator. unlock.errorMessage.unsupportedVersion.softwareOlderThanVault=Unsupported vault. This vault has been created with a newer version of Cryptomator. @@ -99,6 +97,12 @@ unlock.successLabel.vaultCreated=Vault was successfully created. unlock.successLabel.passwordChanged=Password was successfully changed. unlock.successLabel.upgraded=Cryptomator was successfully upgraded. +unlock.failedDialog.title=Unlock failed +unlock.failedDialog.header=Unlock failed +unlock.failedDialog.content.mountPathNonExisting=Mount point does not exist. +unlock.failedDialog.content.mountPathNotEmpty=Mount point is not empty. + + # change_password.fxml changePassword.label.oldPassword=Old Password changePassword.label.newPassword=New Password