introduce RecoverUtil.Types

This commit is contained in:
Jan-Peter Klein
2025-03-06 09:17:16 +01:00
parent 8c5325511c
commit 6715ff9f5f
11 changed files with 107 additions and 32 deletions

View File

@@ -236,5 +236,11 @@ public class RecoverUtil {
return Optional.of(vault);
}
public enum Type {
RESTORE_VAULT_CONFIG,
RESTORE_MASTERKEY,
RESET_PASSWORD,
SHOW_KEY;
}
}

View File

@@ -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();

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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());
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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>

View File

@@ -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