From 087b6162edbc51e1e7cec63c45f69f8c7ee4e211 Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Tue, 18 Mar 2025 14:25:44 +0100 Subject: [PATCH] recoverType fix and more use of dialogs --- .../org/cryptomator/common/RecoverUtil.java | 82 +++++++++---------- .../common/vaults/VaultListManager.java | 13 ++- .../ChooseExistingVaultController.java | 56 ++++++------- .../org/cryptomator/ui/dialogs/Dialogs.java | 20 ++++- .../VaultDetailMissingVaultController.java | 7 +- .../ui/recoverykey/RecoveryKeyComponent.java | 3 +- .../ui/recoverykey/RecoveryKeyModule.java | 11 --- .../RecoveryKeyRecoverController.java | 2 + .../RecoveryKeyResetPasswordController.java | 25 ++++-- ...veryKeyResetPasswordSuccessController.java | 32 -------- .../MasterkeyOptionsController.java | 8 +- src/main/resources/i18n/strings.properties | 1 + 12 files changed, 129 insertions(+), 131 deletions(-) delete mode 100644 src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordSuccessController.java diff --git a/src/main/java/org/cryptomator/common/RecoverUtil.java b/src/main/java/org/cryptomator/common/RecoverUtil.java index 13244e071..b686696c2 100644 --- a/src/main/java/org/cryptomator/common/RecoverUtil.java +++ b/src/main/java/org/cryptomator/common/RecoverUtil.java @@ -1,6 +1,32 @@ package org.cryptomator.common; -import dagger.Lazy; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.StringProperty; +import javafx.concurrent.Task; +import javafx.stage.DirectoryChooser; +import javafx.stage.Stage; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.security.SecureRandom; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.ResourceBundle; +import java.util.stream.Stream; + +import static org.cryptomator.common.Constants.DEFAULT_KEY_ID; +import static org.cryptomator.common.Constants.MASTERKEY_FILENAME; +import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME; +import static org.cryptomator.common.vaults.VaultState.Value.MASTERKEY_MISSING; +import static org.cryptomator.common.vaults.VaultState.Value.VAULT_CONFIG_MISSING; +import static org.cryptomator.cryptofs.common.Constants.DATA_DIR_NAME; +import static org.cryptomator.cryptolib.api.CryptorProvider.Scheme.SIV_CTRMAC; +import static org.cryptomator.cryptolib.api.CryptorProvider.Scheme.SIV_GCM; + import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.common.vaults.Vault; @@ -14,9 +40,9 @@ import org.cryptomator.cryptolib.api.CryptoException; import org.cryptomator.cryptolib.api.Cryptor; import org.cryptomator.cryptolib.api.CryptorProvider; import org.cryptomator.cryptolib.api.Masterkey; +import org.cryptomator.cryptolib.api.MasterkeyLoader; import org.cryptomator.cryptolib.common.MasterkeyFileAccess; import org.cryptomator.integrations.mount.MountService; -import org.cryptomator.ui.addvaultwizard.CreateNewVaultExpertSettingsController; import org.cryptomator.ui.changepassword.NewPasswordController; import org.cryptomator.ui.dialogs.Dialogs; import org.cryptomator.ui.fxapp.FxApplicationWindows; @@ -24,45 +50,13 @@ import org.cryptomator.ui.recoverykey.RecoveryKeyFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javafx.beans.property.IntegerProperty; -import javafx.beans.property.SimpleIntegerProperty; -import javafx.beans.property.StringProperty; -import javafx.concurrent.Task; -import javafx.scene.Scene; -import javafx.stage.DirectoryChooser; -import javafx.stage.Stage; -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.security.SecureRandom; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; -import org.cryptomator.cryptolib.api.MasterkeyLoader; - -import static org.cryptomator.common.Constants.DEFAULT_KEY_ID; -import static org.cryptomator.common.Constants.MASTERKEY_FILENAME; -import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME; -import static org.cryptomator.common.vaults.VaultState.Value.VAULT_CONFIG_MISSING; -import static org.cryptomator.cryptofs.common.Constants.DATA_DIR_NAME; -import static org.cryptomator.cryptolib.api.CryptorProvider.Scheme.SIV_CTRMAC; -import static org.cryptomator.cryptolib.api.CryptorProvider.Scheme.SIV_GCM; - public class RecoverUtil { private static final Logger LOG = LoggerFactory.getLogger(RecoverUtil.class); public static CryptorProvider.Scheme detectCipherCombo(byte[] masterkey, Path pathToVault) { try (Stream paths = Files.walk(pathToVault.resolve(DATA_DIR_NAME))) { - return paths.filter(path -> path.toString() - .endsWith(".c9r")) - .findFirst() - .map(c9rFile -> determineScheme(c9rFile, masterkey)) - .orElseThrow(() -> new IllegalStateException("No .c9r file found.")); + return paths.filter(path -> path.toString().endsWith(".c9r")).findFirst().map(c9rFile -> determineScheme(c9rFile, masterkey)).orElseThrow(() -> new IllegalStateException("No .c9r file found.")); } catch (IOException e) { throw new IllegalStateException("Failed to detect cipher combo.", e); } @@ -140,11 +134,7 @@ public class RecoverUtil { } } - public static Optional validateRecoveryKeyAndGetCombo( - RecoveryKeyFactory recoveryKeyFactory, - Vault vault, - StringProperty recoveryKey, - MasterkeyFileAccess masterkeyFileAccess) { + public static Optional validateRecoveryKeyAndGetCombo(RecoveryKeyFactory recoveryKeyFactory, Vault vault, StringProperty recoveryKey, MasterkeyFileAccess masterkeyFileAccess) { Path tempRecoveryPath = null; CharSequence tmpPass = "asdasdasd"; @@ -193,7 +183,7 @@ public class RecoverUtil { } } - public static Task createResetPasswordTask(RecoveryKeyFactory recoveryKeyFactory, Vault vault, StringProperty recoveryKey, NewPasswordController newPasswordController, Stage window, Lazy recoverResetPasswordSuccessScene, Lazy recoverResetVaultConfigSuccessScene, FxApplicationWindows appWindows) { + public static Task createResetPasswordTask(ResourceBundle resourceBundle,Stage owner, RecoveryKeyFactory recoveryKeyFactory, Vault vault, StringProperty recoveryKey, NewPasswordController newPasswordController, Stage window, FxApplicationWindows appWindows, Dialogs dialogs) { Task task = new ResetPasswordTask(recoveryKeyFactory, vault, recoveryKey, newPasswordController); @@ -203,10 +193,12 @@ public class RecoverUtil { task.setOnSucceeded(_ -> { LOG.info("Used recovery key to reset password for {}.", vault.getDisplayablePath()); - if (vault.getState().equals(VAULT_CONFIG_MISSING)) { - window.setScene(recoverResetVaultConfigSuccessScene.get()); + if (vault.getState().equals(MASTERKEY_MISSING)) { + dialogs.prepareRecoverPasswordSuccess(window, owner, resourceBundle).setTitleKey("recoveryKey.recoverMasterkey.title").setMessageKey("recoveryKey.recover.resetMasterkeyFileSuccess.message").build().showAndWait(); + window.close(); } else { - window.setScene(recoverResetPasswordSuccessScene.get()); + dialogs.prepareRecoverPasswordSuccess(window, owner, resourceBundle).build().showAndWait(); + window.close(); } }); @@ -243,7 +235,7 @@ public class RecoverUtil { } } - public static Optional prepareVaultFromDirectory(DirectoryChooser directoryChooser, Stage window, Dialogs dialogs, VaultComponent.Factory vaultComponentFactory, List mountServices) { + public static Optional checkAndPrepareVaultFromDirectory(DirectoryChooser directoryChooser, Stage window, Dialogs dialogs, VaultComponent.Factory vaultComponentFactory, List mountServices) { File selectedDirectory; do { diff --git a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index 63e32da7d..b60566e23 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -173,7 +173,18 @@ public class VaultListManager { yield ERROR; } } - case ERROR, UNLOCKED, PROCESSING -> previousState; + case ERROR -> { + try { + var determinedState = determineVaultState(vault.getPath(), vault.getVaultSettings()); + state.set(determinedState); + yield determinedState; + } catch (IOException e) { + LOG.warn("Failed to redetermine vault state for " + vault.getPath(), e); + vault.setLastKnownException(e); + yield ERROR; + } + } + case UNLOCKED, PROCESSING -> previousState; }; } diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java index 4743cc52b..1b2f7e7e9 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java @@ -1,5 +1,28 @@ package org.cryptomator.ui.addvaultwizard; +import javax.inject.Inject; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ObservableValue; +import javafx.fxml.FXML; +import javafx.scene.Scene; +import javafx.scene.control.CheckBox; +import javafx.scene.image.Image; +import javafx.stage.DirectoryChooser; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.ResourceBundle; + +import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB; + import dagger.Lazy; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.RecoverUtil; @@ -18,28 +41,6 @@ import org.cryptomator.ui.recoverykey.RecoveryKeyComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.ObjectProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.value.ObservableValue; -import javafx.fxml.FXML; -import javafx.scene.Scene; -import javafx.scene.control.CheckBox; -import javafx.scene.image.Image; -import javafx.stage.DirectoryChooser; -import javafx.stage.FileChooser; -import javafx.stage.Stage; -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.ResourceBundle; - -import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB; - @AddVaultWizardScoped public class ChooseExistingVaultController implements FxController { @@ -91,9 +92,10 @@ public class ChooseExistingVaultController implements FxController { this.dialogs = dialogs; } - public void initialize(){ + public void initialize() { restoreButtonVisible.bind(restoreCheckBox.selectedProperty()); } + private Image selectScreenshot(Theme theme) { String imageResourcePath; if (SystemUtils.IS_OS_MAC) { @@ -129,13 +131,11 @@ public class ChooseExistingVaultController implements FxController { @FXML public void restoreVaultConfigWithRecoveryKey() { DirectoryChooser directoryChooser = new DirectoryChooser(); - directoryChooser.setTitle(resourceBundle.getString("generic.button.cancel")); - - Optional optionalVault = RecoverUtil.prepareVaultFromDirectory(directoryChooser, window, dialogs, vaultComponentFactory, mountServices); - + Optional optionalVault = RecoverUtil.checkAndPrepareVaultFromDirectory(directoryChooser, window, dialogs, vaultComponentFactory, mountServices); optionalVault.ifPresent(vault -> { - recoveryKeyWindow.create(vault, window,RecoverUtil.Type.RESTORE_VAULT_CONFIG).showIsHubVaultDialogWindow(); + ObjectProperty recoverTypeProperty = new SimpleObjectProperty<>(RecoverUtil.Type.RESTORE_VAULT_CONFIG); + recoveryKeyWindow.create(vault, window, recoverTypeProperty).showIsHubVaultDialogWindow(); }); } diff --git a/src/main/java/org/cryptomator/ui/dialogs/Dialogs.java b/src/main/java/org/cryptomator/ui/dialogs/Dialogs.java index 807c3a9f1..b072481c0 100644 --- a/src/main/java/org/cryptomator/ui/dialogs/Dialogs.java +++ b/src/main/java/org/cryptomator/ui/dialogs/Dialogs.java @@ -57,6 +57,22 @@ public class Dialogs { .setCancelButtonKey("generic.button.cancel"); } + public SimpleDialog.Builder prepareRecoverPasswordSuccess(Stage window, Stage owner, ResourceBundle resourceBundle) { + return createDialogBuilder() + .setOwner(window) // + .setTitleKey("recoveryKey.recover.title") // + .setMessageKey("recoveryKey.recover.resetSuccess.message") // + .setDescriptionKey("recoveryKey.recover.resetSuccess.description") // + .setIcon(FontAwesome5Icon.CHECK) + .setOkAction(stage -> { + stage.close(); + if (owner.getTitle().equals(resourceBundle.getString("addvaultwizard.existing.title"))) { + owner.close(); + } + }) + .setOkButtonKey("generic.button.close"); + } + public SimpleDialog.Builder prepareRemoveCertDialog(Stage window, Settings settings) { return createDialogBuilder() // .setOwner(window) // @@ -106,9 +122,7 @@ public class Dialogs { .setDescriptionKey("recoveryKey.noDDirDetected.description") // .setIcon(FontAwesome5Icon.EXCLAMATION) // .setOkButtonKey("generic.button.change") // - .setCancelButtonKey("generic.button.close") // - .setOkAction(Stage::close) // - .setCancelAction(Stage::close); + .setOkAction(Stage::close); } } diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java index 274f6bbf9..d7ac79f08 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java @@ -10,6 +10,7 @@ import org.cryptomator.ui.recoverykey.RecoveryKeyComponent; import javax.inject.Inject; import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.stage.FileChooser; @@ -60,13 +61,15 @@ public class VaultDetailMissingVaultController implements FxController { dialogs.prepareContactHubAdmin(window).build().showAndWait(); } else { - recoveryKeyWindow.create(vault.get(), window, RecoverUtil.Type.RESTORE_VAULT_CONFIG).showIsHubVaultDialogWindow(); + ObjectProperty recoverTypeProperty = new SimpleObjectProperty<>(RecoverUtil.Type.RESTORE_VAULT_CONFIG); + recoveryKeyWindow.create(vault.get(), window, recoverTypeProperty).showIsHubVaultDialogWindow(); } } @FXML void restoreMasterkey() { - recoveryKeyWindow.create(vault.get(), window,RecoverUtil.Type.RESTORE_MASTERKEY).showRecoveryKeyRecoverWindow(); + ObjectProperty recoverTypeProperty = new SimpleObjectProperty<>(RecoverUtil.Type.RESTORE_MASTERKEY); + recoveryKeyWindow.create(vault.get(), window, recoverTypeProperty).showRecoveryKeyRecoverWindow(); } @FXML diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java index 1af6113ca..cbc00ad46 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java @@ -9,6 +9,7 @@ import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import javax.inject.Named; +import javafx.beans.property.ObjectProperty; import javafx.scene.Scene; import javafx.stage.Stage; @@ -54,7 +55,7 @@ public interface RecoveryKeyComponent { RecoveryKeyComponent create(@BindsInstance @RecoveryKeyWindow Vault vault, @BindsInstance @Named("keyRecoveryOwner") Stage owner, - @BindsInstance @Named("recoverType") RecoverUtil.Type recoverType); + @BindsInstance @Named("recoverType") ObjectProperty recoverType); } } diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java index 3c2f6d132..1ccbcaed7 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java @@ -155,13 +155,6 @@ abstract class RecoveryKeyModule { return new SimpleIntegerProperty(CreateNewVaultExpertSettingsController.MAX_SHORTENING_THRESHOLD); } - @Provides - @Named("recoverType") - @RecoveryKeyScoped - static ObjectProperty provideRecoverType() { - return new SimpleObjectProperty<>(RecoverUtil.Type.RESTORE_MASTERKEY); - } - @Provides @Named("cipherCombo") @RecoveryKeyScoped @@ -194,10 +187,6 @@ abstract class RecoveryKeyModule { @FxControllerKey(RecoveryKeyResetPasswordController.class) abstract FxController bindRecoveryKeyResetPasswordController(RecoveryKeyResetPasswordController controller); - @Binds - @IntoMap - @FxControllerKey(RecoveryKeyResetPasswordSuccessController.class) - abstract FxController bindRecoveryKeyResetPasswordSuccessController(RecoveryKeyResetPasswordSuccessController controller); @Provides @IntoMap diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java index 9f2842f34..1edbae6f4 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java @@ -12,6 +12,7 @@ import javafx.beans.property.ObjectProperty; import javafx.fxml.FXML; import javafx.scene.Scene; import javafx.stage.Stage; +import java.util.Optional; import java.util.ResourceBundle; @RecoveryKeyScoped @@ -52,6 +53,7 @@ public class RecoveryKeyRecoverController implements FxController { yield null; } }; + } @FXML diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java index d2bc329c8..3c481bbd0 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java @@ -12,6 +12,8 @@ import org.cryptomator.ui.changepassword.NewPasswordController; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import org.cryptomator.ui.dialogs.Dialogs; +import org.cryptomator.ui.dialogs.SimpleDialog; import org.cryptomator.ui.fxapp.FxApplicationWindows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,6 +57,8 @@ public class RecoveryKeyResetPasswordController implements FxController { private final ObjectProperty cipherCombo; private final ResourceBundle resourceBundle; private final StringProperty buttonText = new SimpleStringProperty(); + private final Dialogs dialogs; + private final Stage owner; public NewPasswordController newPasswordController; @@ -63,6 +67,7 @@ public class RecoveryKeyResetPasswordController implements FxController { @RecoveryKeyWindow Vault vault, // RecoveryKeyFactory recoveryKeyFactory, // ExecutorService executor, // + @Named("keyRecoveryOwner") Stage owner, @RecoveryKeyWindow StringProperty recoveryKey, // @FxmlScene(FxmlFile.RECOVERYKEY_EXPERT_SETTINGS) Lazy recoverExpertSettingsScene, // @FxmlScene(FxmlFile.RECOVERYKEY_RESET_PASSWORD_SUCCESS) Lazy recoverResetPasswordSuccessScene, // @@ -73,7 +78,8 @@ public class RecoveryKeyResetPasswordController implements FxController { @Named("shorteningThreshold") IntegerProperty shorteningThreshold, // @Named("recoverType") ObjectProperty recoverType, @Named("cipherCombo") ObjectProperty cipherCombo,// - ResourceBundle resourceBundle) { + ResourceBundle resourceBundle, + Dialogs dialogs) { this.window = window; this.vault = vault; this.recoveryKeyFactory = recoveryKeyFactory; @@ -89,7 +95,8 @@ public class RecoveryKeyResetPasswordController implements FxController { this.cipherCombo = cipherCombo; this.recoverType = recoverType; this.resourceBundle = resourceBundle; - + this.dialogs = dialogs; + this.owner = owner; initButtonText(recoverType.get()); } @@ -127,20 +134,26 @@ public class RecoveryKeyResetPasswordController implements FxController { RecoverUtil.deleteRecoveryDirectory(recoveryPath); RecoverUtil.addVaultToList(vaultListManager, vault.getPath()); - window.setScene(recoverResetVaultConfigSuccessScene.get()); + dialogs.prepareRecoverPasswordSuccess(window, owner, resourceBundle) + .setTitleKey("recoveryKey.recoverVaultConfig.title") + .setMessageKey("recoveryKey.recover.resetVaultConfigSuccess.message") + .build().showAndWait(); + window.close(); // Erst jetzt das Fenster schließen + } catch (IOException | CryptoException e) { LOG.error("Recovery process failed", e); } } else { Task task = RecoverUtil.createResetPasswordTask( // + resourceBundle, + owner, recoveryKeyFactory, // vault, // recoveryKey, // newPasswordController, // window, // - recoverResetPasswordSuccessScene, // - recoverResetVaultConfigSuccessScene, // - appWindows); + appWindows, + dialogs); executor.submit(task); } } diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordSuccessController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordSuccessController.java deleted file mode 100644 index b646f0334..000000000 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordSuccessController.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.cryptomator.ui.recoverykey; - -import org.cryptomator.ui.common.FxController; - -import javax.inject.Inject; -import javax.inject.Named; -import javafx.fxml.FXML; -import javafx.stage.Stage; - -@RecoveryKeyScoped -public class RecoveryKeyResetPasswordSuccessController implements FxController { - - private final Stage window; - private final Stage owner; - - @Inject - public RecoveryKeyResetPasswordSuccessController(@RecoveryKeyWindow Stage window, // - @Named("keyRecoveryOwner") Stage owner) { - - this.window = window; - this.owner = owner; - } - - @FXML - public void close() { - if (!owner.getTitle().equals("Cryptomator")) { - owner.close(); - } - window.close(); - } - -} diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java index 723be3317..f0acea858 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java @@ -11,7 +11,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; +import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.stage.Stage; @@ -56,12 +58,14 @@ public class MasterkeyOptionsController implements FxController { @FXML public void showRecoveryKey() { - recoveryKeyWindow.create(vault, window, RecoverUtil.Type.SHOW_KEY).showRecoveryKeyCreationWindow(); + ObjectProperty recoverTypeProperty = new SimpleObjectProperty<>(RecoverUtil.Type.SHOW_KEY); + recoveryKeyWindow.create(vault, window, recoverTypeProperty).showRecoveryKeyCreationWindow(); } @FXML public void showRecoverVaultDialog() { - recoveryKeyWindow.create(vault, window,RecoverUtil.Type.RESET_PASSWORD).showRecoveryKeyRecoverWindow(); + ObjectProperty recoverTypeProperty = new SimpleObjectProperty<>(RecoverUtil.Type.RESET_PASSWORD); + recoveryKeyWindow.create(vault, window, recoverTypeProperty).showRecoveryKeyRecoverWindow(); } @FXML diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index b3ecfba79..7ea99bc00 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -524,6 +524,7 @@ recoveryKey.recover.resetSuccess.message=Password reset successful recoveryKey.recover.resetSuccess.description=You can unlock your vault with the new password. ### Recovery Key Vault Config Reset Success recoveryKey.recover.resetVaultConfigSuccess.message=Vault config reset successful +recoveryKey.recover.resetMasterkeyFileSuccess.message=Masterkey file reset successful ### Recover Kram