Jelajahi Sumber

introduce RecoverUtil.Types

Jan-Peter Klein 3 bulan lalu
induk
melakukan
6715ff9f5f

+ 6 - 0
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;
+	}
 
 }

+ 1 - 1
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();

+ 3 - 2
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

+ 4 - 10
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);
 	}
 
 }

+ 15 - 6
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<Scene> recoverykeyRecoverScene;
+	private final ObjectProperty<RecoverUtil.Type> recoverType;
+	private final ResourceBundle resourceBundle;
 
 	@Inject
 	public RecoveryKeyIsHubVaultController(@RecoveryKeyWindow Stage window,
-										   @FxmlScene(FxmlFile.RECOVERYKEY_RECOVER) Lazy<Scene> recoverykeyRecoverScene) {
+										   @FxmlScene(FxmlFile.RECOVERYKEY_RECOVER) Lazy<Scene> recoverykeyRecoverScene,
+										   @Named("recoverType") ObjectProperty<RecoverUtil.Type> 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());
 	}
 }

+ 9 - 0
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<RecoverUtil.Type> provideRecoverType() {
+		return new SimpleObjectProperty<>(RecoverUtil.Type.RESTORE_MASTERKEY);
+	}
 
 	@Binds
 	@IntoMap

+ 24 - 8
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<Scene> resetPasswordScene, //
 										@FxmlScene(FxmlFile.RECOVERYKEY_EXPERT_SETTINGS) Lazy<Scene> expertSettingsScene, //
-										ResourceBundle resourceBundle) {
+										ResourceBundle resourceBundle,
+										@Named("recoverType") ObjectProperty<RecoverUtil.Type> 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

+ 38 - 2
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<Scene> recoverExpertSettingsScene;
 	private final Lazy<Scene> recoverResetPasswordSuccessScene;
 	private final Lazy<Scene> recoverResetVaultConfigSuccessScene;
 	private final FxApplicationWindows appWindows;
 	private final MasterkeyFileAccess masterkeyFileAccess;
 	private final VaultListManager vaultListManager;
 	private final IntegerProperty shorteningThreshold;
+	private final ObjectProperty<RecoverUtil.Type> 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<Scene> recoverExpertSettingsScene, //
 											  @FxmlScene(FxmlFile.RECOVERYKEY_RESET_PASSWORD_SUCCESS) Lazy<Scene> recoverResetPasswordSuccessScene, //
 											  @FxmlScene(FxmlFile.RECOVERYKEY_RESET_VAULT_CONFIG_SUCCESS) Lazy<Scene> recoverResetVaultConfigSuccessScene, //
 											  FxApplicationWindows appWindows, //
 											  MasterkeyFileAccess masterkeyFileAccess, //
 											  VaultListManager vaultListManager, //
-											  @Named("shorteningThreshold") IntegerProperty shorteningThreshold) {
+											  @Named("shorteningThreshold") IntegerProperty shorteningThreshold, //
+											  @Named("recoverType") ObjectProperty<RecoverUtil.Type> 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();
 	}

+ 3 - 2
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

+ 1 - 1
src/main/resources/fxml/recoverykey_reset_password.fxml

@@ -24,7 +24,7 @@
 		<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
 			<ButtonBar buttonMinWidth="120" buttonOrder="+CI">
 				<buttons>
-					<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
+					<Button text="${controller.buttonText}" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
 					<Button text="%recoveryKey.recover.resetBtn" ButtonBar.buttonData="FINISH" defaultButton="true" onAction="#resetPassword" disable="${!controller.passwordSufficientAndMatching}"/>
 				</buttons>
 			</ButtonBar>

+ 3 - 0
src/main/resources/i18n/strings.properties

@@ -535,6 +535,9 @@ a.title=Title %s
 a.description=Description
 a.message=Message
 
+recoveryKey.recoverVaultConfig.title=Recover Vault Config
+recoveryKey.recoverMasterkey.title=Recover Masterkey
+
 # Convert Vault
 convertVault.title=Convert Vault
 convertVault.convert.convertBtn.before=Convert