diff --git a/src/main/java/org/cryptomator/common/RecoverUtil.java b/src/main/java/org/cryptomator/common/RecoverUtil.java index 71a8bf4ed..0e00ad346 100644 --- a/src/main/java/org/cryptomator/common/RecoverUtil.java +++ b/src/main/java/org/cryptomator/common/RecoverUtil.java @@ -236,5 +236,11 @@ public class RecoverUtil { return Optional.of(vault); } + public enum Type { + RESTORE_VAULT_CONFIG, + RESTORE_MASTERKEY, + RESET_PASSWORD, + SHOW_KEY; + } } diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java index f42eb3ac6..46083690b 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java @@ -130,7 +130,7 @@ public class ChooseExistingVaultController implements FxController { .setCancelButtonKey("generic.button.cancel") // .setOkButtonKey("generic.button.next") // .setOkAction(stage -> { - recoveryKeyWindow.create(vault, window).showIsHubVaultDialogWindow(); + recoveryKeyWindow.create(vault, window,RecoverUtil.Type.RESTORE_VAULT_CONFIG).showIsHubVaultDialogWindow(); stage.close(); }) // .build().showAndWait(); diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java index fc52aa775..274f6bbf9 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java @@ -1,5 +1,6 @@ package org.cryptomator.ui.mainwindow; +import org.cryptomator.common.RecoverUtil; import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.VaultListManager; import org.cryptomator.ui.common.FxController; @@ -59,13 +60,13 @@ public class VaultDetailMissingVaultController implements FxController { dialogs.prepareContactHubAdmin(window).build().showAndWait(); } else { - recoveryKeyWindow.create(vault.get(), window).showIsHubVaultDialogWindow(); + recoveryKeyWindow.create(vault.get(), window, RecoverUtil.Type.RESTORE_VAULT_CONFIG).showIsHubVaultDialogWindow(); } } @FXML void restoreMasterkey() { - recoveryKeyWindow.create(vault.get(), window).showRecoveryKeyRecoverWindow("Recover Masterkey"); + recoveryKeyWindow.create(vault.get(), window,RecoverUtil.Type.RESTORE_MASTERKEY).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 40a180f0a..1af6113ca 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java @@ -3,6 +3,7 @@ package org.cryptomator.ui.recoverykey; import dagger.BindsInstance; import dagger.Lazy; import dagger.Subcomponent; +import org.cryptomator.common.RecoverUtil; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; @@ -41,18 +42,9 @@ public interface RecoveryKeyComponent { stage.show(); } - default void showRecoveryKeyRecoverWindow(String title) { - Stage stage = window(); - stage.setTitle(title); - stage.setScene(recoverScene().get()); - stage.sizeToScene(); - stage.show(); - } - default void showIsHubVaultDialogWindow() { Stage stage = window(); stage.setScene(recoverIsHubVaultScene().get()); - stage.setTitle("Recover Config"); stage.sizeToScene(); stage.show(); } @@ -60,7 +52,9 @@ public interface RecoveryKeyComponent { @Subcomponent.Factory interface Factory { - RecoveryKeyComponent create(@BindsInstance @RecoveryKeyWindow Vault vault, @BindsInstance @Named("keyRecoveryOwner") Stage owner); + RecoveryKeyComponent create(@BindsInstance @RecoveryKeyWindow Vault vault, + @BindsInstance @Named("keyRecoveryOwner") Stage owner, + @BindsInstance @Named("recoverType") RecoverUtil.Type recoverType); } } diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java index 5469c4af9..84537cd37 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java @@ -1,6 +1,7 @@ package org.cryptomator.ui.recoverykey; import dagger.Lazy; +import org.cryptomator.common.RecoverUtil; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; @@ -8,9 +9,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; +import javax.inject.Named; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.ObjectProperty; import javafx.fxml.FXML; import javafx.scene.Scene; import javafx.stage.Stage; +import java.util.ResourceBundle; @RecoveryKeyScoped public class RecoveryKeyIsHubVaultController implements FxController { @@ -19,16 +24,20 @@ public class RecoveryKeyIsHubVaultController implements FxController { private final Stage window; private final Lazy recoverykeyRecoverScene; + private final ObjectProperty recoverType; + private final ResourceBundle resourceBundle; @Inject public RecoveryKeyIsHubVaultController(@RecoveryKeyWindow Stage window, - @FxmlScene(FxmlFile.RECOVERYKEY_RECOVER) Lazy recoverykeyRecoverScene) { + @FxmlScene(FxmlFile.RECOVERYKEY_RECOVER) Lazy recoverykeyRecoverScene, + @Named("recoverType") ObjectProperty recoverType, + ResourceBundle resourceBundle) { this.window = window; - this.recoverykeyRecoverScene = recoverykeyRecoverScene; - } + window.setTitle(resourceBundle.getString("recoveryKey.recoverVaultConfig.title")); - @FXML - public void initialize() { + this.recoverykeyRecoverScene = recoverykeyRecoverScene; + this.recoverType = recoverType; + this.resourceBundle = resourceBundle; } @FXML @@ -38,7 +47,7 @@ public class RecoveryKeyIsHubVaultController implements FxController { @FXML public void recover() { - window.setTitle("Recover Config"); + recoverType.set(RecoverUtil.Type.RESTORE_VAULT_CONFIG); window.setScene(recoverykeyRecoverScene.get()); } } diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java index 1f5e6b35d..ef925cbf4 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java @@ -5,6 +5,7 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; import org.cryptomator.common.Nullable; +import org.cryptomator.common.RecoverUtil; import org.cryptomator.common.vaults.Vault; import org.cryptomator.cryptofs.VaultConfig; import org.cryptomator.ui.addvaultwizard.CreateNewVaultExpertSettingsController; @@ -21,7 +22,9 @@ import org.cryptomator.ui.common.StageFactory; import javax.inject.Named; import javax.inject.Provider; import javafx.beans.property.IntegerProperty; +import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.scene.Scene; @@ -150,6 +153,12 @@ abstract class RecoveryKeyModule { return new SimpleIntegerProperty(CreateNewVaultExpertSettingsController.MAX_SHORTENING_THRESHOLD); } + @Provides + @Named("recoverType") + @RecoveryKeyScoped + static ObjectProperty provideRecoverType() { + return new SimpleObjectProperty<>(RecoverUtil.Type.RESTORE_MASTERKEY); + } @Binds @IntoMap diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java index 1890a2bd1..7392d5768 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyRecoverController.java @@ -1,11 +1,14 @@ package org.cryptomator.ui.recoverykey; import dagger.Lazy; +import org.cryptomator.common.RecoverUtil; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import javax.inject.Inject; +import javax.inject.Named; +import javafx.beans.property.ObjectProperty; import javafx.fxml.FXML; import javafx.scene.Scene; import javafx.stage.Stage; @@ -24,15 +27,28 @@ public class RecoveryKeyRecoverController implements FxController { public RecoveryKeyRecoverController(@RecoveryKeyWindow Stage window, // @FxmlScene(FxmlFile.RECOVERYKEY_RESET_PASSWORD) Lazy resetPasswordScene, // @FxmlScene(FxmlFile.RECOVERYKEY_EXPERT_SETTINGS) Lazy expertSettingsScene, // - ResourceBundle resourceBundle) { + ResourceBundle resourceBundle, + @Named("recoverType") ObjectProperty recoverType) { this.window = window; - if (window.getTitle().equals("Recover Config")) { - this.nextScene = expertSettingsScene; - } else if (window.getTitle().equals(resourceBundle.getString("recoveryKey.recover.title"))) { - this.nextScene = resetPasswordScene; - } else { - this.nextScene = resetPasswordScene; - } + + this.nextScene = switch (recoverType.get()) { + case RESTORE_VAULT_CONFIG -> { + window.setTitle(resourceBundle.getString("recoveryKey.recoverVaultConfig.title")); + yield expertSettingsScene; + } + case RESTORE_MASTERKEY -> { + window.setTitle(resourceBundle.getString("recoveryKey.recoverMasterkey.title")); + yield resetPasswordScene; + } + case RESET_PASSWORD -> { + window.setTitle(resourceBundle.getString("recoveryKey.recover.title")); + yield resetPasswordScene; + } + case SHOW_KEY-> { + window.setTitle(resourceBundle.getString("recoveryKey.display.title")); + yield resetPasswordScene; + } + }; } @FXML diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java index b8b6fa259..bf301c57b 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java @@ -18,7 +18,9 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; import javafx.beans.property.IntegerProperty; +import javafx.beans.property.ObjectProperty; import javafx.beans.property.ReadOnlyBooleanProperty; +import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.concurrent.Task; import javafx.fxml.FXML; @@ -26,6 +28,7 @@ import javafx.scene.Scene; import javafx.stage.Stage; import java.io.IOException; import java.nio.file.Path; +import java.util.ResourceBundle; import java.util.concurrent.ExecutorService; import static org.cryptomator.common.Constants.MASTERKEY_FILENAME; @@ -40,12 +43,16 @@ public class RecoveryKeyResetPasswordController implements FxController { private final RecoveryKeyFactory recoveryKeyFactory; private final ExecutorService executor; private final StringProperty recoveryKey; + private final Lazy recoverExpertSettingsScene; private final Lazy recoverResetPasswordSuccessScene; private final Lazy recoverResetVaultConfigSuccessScene; private final FxApplicationWindows appWindows; private final MasterkeyFileAccess masterkeyFileAccess; private final VaultListManager vaultListManager; private final IntegerProperty shorteningThreshold; + private final ObjectProperty recoverType; + private final ResourceBundle resourceBundle; + private final StringProperty buttonText = new SimpleStringProperty(); public NewPasswordController newPasswordController; @@ -55,28 +62,49 @@ public class RecoveryKeyResetPasswordController implements FxController { RecoveryKeyFactory recoveryKeyFactory, // ExecutorService executor, // @RecoveryKeyWindow StringProperty recoveryKey, // + @FxmlScene(FxmlFile.RECOVERYKEY_EXPERT_SETTINGS) Lazy recoverExpertSettingsScene, // @FxmlScene(FxmlFile.RECOVERYKEY_RESET_PASSWORD_SUCCESS) Lazy recoverResetPasswordSuccessScene, // @FxmlScene(FxmlFile.RECOVERYKEY_RESET_VAULT_CONFIG_SUCCESS) Lazy recoverResetVaultConfigSuccessScene, // FxApplicationWindows appWindows, // MasterkeyFileAccess masterkeyFileAccess, // VaultListManager vaultListManager, // - @Named("shorteningThreshold") IntegerProperty shorteningThreshold) { + @Named("shorteningThreshold") IntegerProperty shorteningThreshold, // + @Named("recoverType") ObjectProperty recoverType, + ResourceBundle resourceBundle) { this.window = window; this.vault = vault; this.recoveryKeyFactory = recoveryKeyFactory; this.executor = executor; this.recoveryKey = recoveryKey; + this.recoverExpertSettingsScene = recoverExpertSettingsScene; this.recoverResetPasswordSuccessScene = recoverResetPasswordSuccessScene; this.recoverResetVaultConfigSuccessScene = recoverResetVaultConfigSuccessScene; this.appWindows = appWindows; this.masterkeyFileAccess = masterkeyFileAccess; this.vaultListManager = vaultListManager; this.shorteningThreshold = shorteningThreshold; + this.recoverType = recoverType; + this.resourceBundle = resourceBundle; + + initButtonText(recoverType.get()); + } + + private void initButtonText(RecoverUtil.Type type) { + if (type == RecoverUtil.Type.RESTORE_MASTERKEY) { + buttonText.set(resourceBundle.getString("generic.button.close")); + } else { + buttonText.set(resourceBundle.getString("generic.button.back")); + } } @FXML public void close() { - window.close(); + if(recoverType.getValue().equals(RecoverUtil.Type.RESTORE_MASTERKEY)){ + window.close(); + } + else { + window.setScene(recoverExpertSettingsScene.get()); + } } @FXML @@ -115,6 +143,14 @@ public class RecoveryKeyResetPasswordController implements FxController { /* Getter/Setter */ + public StringProperty buttonTextProperty() { + return buttonText; + } + + public String getButtonText() { + return buttonText.get(); + } + public ReadOnlyBooleanProperty passwordSufficientAndMatchingProperty() { return newPasswordController.goodPasswordProperty(); } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java index fe6ef60f0..723be3317 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java @@ -1,5 +1,6 @@ package org.cryptomator.ui.vaultoptions; +import org.cryptomator.common.RecoverUtil; import org.cryptomator.common.keychain.KeychainManager; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.changepassword.ChangePasswordComponent; @@ -55,12 +56,12 @@ public class MasterkeyOptionsController implements FxController { @FXML public void showRecoveryKey() { - recoveryKeyWindow.create(vault, window).showRecoveryKeyCreationWindow(); + recoveryKeyWindow.create(vault, window, RecoverUtil.Type.SHOW_KEY).showRecoveryKeyCreationWindow(); } @FXML public void showRecoverVaultDialog() { - recoveryKeyWindow.create(vault, window).showRecoveryKeyRecoverWindow(resourceBundle.getString("recoveryKey.recover.title")); + recoveryKeyWindow.create(vault, window,RecoverUtil.Type.RESET_PASSWORD).showRecoveryKeyRecoverWindow(); } @FXML diff --git a/src/main/resources/fxml/recoverykey_reset_password.fxml b/src/main/resources/fxml/recoverykey_reset_password.fxml index 79827af35..faf93cbf1 100644 --- a/src/main/resources/fxml/recoverykey_reset_password.fxml +++ b/src/main/resources/fxml/recoverykey_reset_password.fxml @@ -24,7 +24,7 @@ -