From 880260d46768a26e2c64c92eef48aa744d2e3c3e Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 21 Apr 2020 08:40:12 +0200 Subject: [PATCH] disable password field und unreveal password when vault is processing --- .../ui/controls/NiceSecurePasswordField.java | 8 +++++++- .../ui/migration/MigrationRunController.java | 3 +++ .../org/cryptomator/ui/unlock/UnlockController.java | 10 +++++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/main/ui/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java b/main/ui/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java index d23951a4b..497913e65 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java @@ -1,5 +1,6 @@ package org.cryptomator.ui.controls; +import javafx.beans.Observable; import javafx.beans.binding.Bindings; import javafx.beans.property.StringProperty; import javafx.geometry.Pos; @@ -55,19 +56,24 @@ public class NiceSecurePasswordField extends StackPane { passwordField.revealPasswordProperty().bind(revealPasswordButton.selectedProperty()); getChildren().addAll(passwordField, iconContainer); + disabledProperty().addListener(this::disabledChanged); } private FontAwesome5Icon getRevealPasswordGlyph() { return revealPasswordButton.isSelected() ? FontAwesome5Icon.EYE_SLASH : FontAwesome5Icon.EYE; } + private void disabledChanged(@SuppressWarnings("unused") Observable observable) { + revealPasswordButton.setSelected(false); + } + /* Passthrough */ @Override public void requestFocus() { passwordField.requestFocus(); } - + public String getText() { return passwordField.getText(); } diff --git a/main/ui/src/main/java/org/cryptomator/ui/migration/MigrationRunController.java b/main/ui/src/main/java/org/cryptomator/ui/migration/MigrationRunController.java index 826fa6053..d7340618d 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/migration/MigrationRunController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/migration/MigrationRunController.java @@ -99,6 +99,7 @@ public class MigrationRunController implements FxController { LOG.info("Migrating vault {}", vault.getPath()); CharSequence password = passwordField.getCharacters(); vault.setState(VaultState.PROCESSING); + passwordField.setDisable(true); ScheduledFuture progressSyncTask = scheduler.scheduleAtFixedRate(() -> { Platform.runLater(() -> { migrationProgress.set(volatileMigrationProgress); @@ -120,6 +121,7 @@ public class MigrationRunController implements FxController { } }).onError(InvalidPassphraseException.class, e -> { Animations.createShakeWindowAnimation(window).play(); + passwordField.setDisable(false); passwordField.selectAll(); passwordField.requestFocus(); vault.setState(VaultState.NEEDS_MIGRATION); @@ -133,6 +135,7 @@ public class MigrationRunController implements FxController { vault.setState(VaultState.NEEDS_MIGRATION); errorComponent.cause(e).window(window).returnToScene(startScene.get()).build().showErrorScene(); }).andFinally(() -> { + passwordField.setDisable(false); progressSyncTask.cancel(true); }).runOnce(executor); } diff --git a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java index f06a03621..d725fd0ea 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java @@ -4,7 +4,6 @@ import dagger.Lazy; import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; import javafx.beans.property.BooleanProperty; -import javafx.beans.property.ObjectProperty; import javafx.beans.property.ReadOnlyBooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.concurrent.Task; @@ -30,7 +29,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; -import javax.inject.Named; import java.nio.file.DirectoryNotEmptyException; import java.nio.file.NotDirectoryException; import java.util.Arrays; @@ -90,9 +88,11 @@ public class UnlockController implements FxController { public void unlock() { LOG.trace("UnlockController.unlock()"); CharSequence password = passwordField.getCharacters(); - + Task task = vaultService.createUnlockTask(vault, password); + passwordField.setDisable(true); task.setOnSucceeded(event -> { + passwordField.setDisable(false); if (keychainAccess.isPresent() && savePassword.isSelected()) { try { keychainAccess.get().storePassphrase(vault.getId(), password); @@ -105,12 +105,12 @@ public class UnlockController implements FxController { window.setScene(successScene.get()); }); task.setOnFailed(event -> { + passwordField.setDisable(false); if (task.getException() instanceof InvalidPassphraseException) { Animations.createShakeWindowAnimation(window).play(); passwordField.selectAll(); passwordField.requestFocus(); - } else if (task.getException() instanceof NotDirectoryException - || task.getException() instanceof DirectoryNotEmptyException) { + } else if (task.getException() instanceof NotDirectoryException || task.getException() instanceof DirectoryNotEmptyException) { LOG.error("Unlock failed. Mount point not an empty directory: {}", task.getException().getMessage()); window.setScene(invalidMountPointScene.get()); } else {