From 8191a7dae664658192b1373ae5bd4fc4684127d2 Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Wed, 15 Jan 2025 21:05:27 +0100 Subject: [PATCH] add isHubVault dialog --- .../common/vaults/VaultListManager.java | 9 ++-- .../org/cryptomator/ui/common/FxmlFile.java | 1 + .../VaultDetailMissingVaultController.java | 3 +- .../ui/recoverykey/RecoveryKeyComponent.java | 11 ++++ .../RecoveryKeyIsHubVaultController.java | 50 +++++++++++++++++ .../ui/recoverykey/RecoveryKeyModule.java | 11 ++++ .../RecoveryKeyResetPasswordController.java | 8 ++- .../fxml/recoverykey_is_hub_vault.fxml | 54 +++++++++++++++++++ 8 files changed, 140 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java create mode 100644 src/main/resources/fxml/recoverykey_is_hub_vault.fxml diff --git a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index 7a588f1a8..d0f3bc53b 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -38,7 +38,6 @@ import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME; import static org.cryptomator.common.vaults.VaultState.Value.ERROR; import static org.cryptomator.common.vaults.VaultState.Value.LOCKED; import static org.cryptomator.common.vaults.VaultState.Value.MASTERKEY_MISSING; -import static org.cryptomator.common.vaults.VaultState.Value.MISSING; import static org.cryptomator.common.vaults.VaultState.Value.VAULT_CONFIG_MISSING; @Singleton @@ -167,7 +166,10 @@ public class VaultListManager { private static VaultState.Value determineVaultState(Path pathToVault) throws IOException { Path pathToVaultConfig = Path.of(pathToVault.toString(),"vault.cryptomator"); Path pathToMasterkey = Path.of(pathToVault.toString(),"masterkey.cryptomator"); - if (!Files.exists(pathToVaultConfig)) { + if (!Files.exists(pathToVault)) { + return VaultState.Value.MISSING; + } + else if (!Files.exists(pathToVaultConfig)) { try (Stream files = Files.list(pathToVaultConfig.getParent())) { Path backupFile = files.filter(file -> { String fileName = file.getFileName().toString(); @@ -213,9 +215,6 @@ public class VaultListManager { return MASTERKEY_MISSING; } } - else if (!Files.exists(pathToVault)) { - return VaultState.Value.MISSING; - } return switch (CryptoFileSystemProvider.checkDirStructureForVault(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME)) { case VAULT -> VaultState.Value.LOCKED; case UNRELATED -> VaultState.Value.MISSING; diff --git a/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/src/main/java/org/cryptomator/ui/common/FxmlFile.java index 13c0d4609..ed58df863 100644 --- a/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -41,6 +41,7 @@ public enum FxmlFile { QUIT("/fxml/quit.fxml"), // QUIT_FORCED("/fxml/quit_forced.fxml"), // RECOVERYKEY_CREATE("/fxml/recoverykey_create.fxml"), // + RECOVERYKEY_IS_HUB_VAULT("/fxml/recoverykey_is_hub_vault.fxml"), // RECOVERYKEY_RECOVER("/fxml/recoverykey_recover.fxml"), // RECOVERYKEY_RESET_PASSWORD("/fxml/recoverykey_reset_password.fxml"), // RECOVERYKEY_RESET_PASSWORD_SUCCESS("/fxml/recoverykey_reset_password_success.fxml"), // diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java index 058d53e23..8363c6036 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailMissingVaultController.java @@ -48,8 +48,9 @@ public class VaultDetailMissingVaultController implements FxController { @FXML void restoreVaultConfig(){ - recoveryKeyWindow.create(vault.get(), window).showRecoveryKeyRecoverWindow("Recover VaultConfig"); + recoveryKeyWindow.create(vault.get(), window).showIsHubVaultDialogWindow(); } + @FXML void restoreMasterkey(){ recoveryKeyWindow.create(vault.get(), window).showRecoveryKeyRecoverWindow("Recover Masterkey"); diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java index c546a8806..6c6e836db 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyComponent.java @@ -24,6 +24,9 @@ public interface RecoveryKeyComponent { @FxmlScene(FxmlFile.RECOVERYKEY_RECOVER) Lazy recoverScene(); + @FxmlScene(FxmlFile.RECOVERYKEY_IS_HUB_VAULT) + Lazy recoverIsHubVaultScene(); + default void showRecoveryKeyCreationWindow() { Stage stage = window(); stage.setScene(creationScene().get()); @@ -46,6 +49,14 @@ public interface RecoveryKeyComponent { stage.show(); } + default void showIsHubVaultDialogWindow(){ + Stage stage = window(); + stage.setScene(recoverIsHubVaultScene().get()); + stage.setTitle("Recover Vault Config"); + stage.sizeToScene(); + stage.show(); + } + @Subcomponent.Factory interface Factory { diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java new file mode 100644 index 000000000..c0a8fdfd3 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyIsHubVaultController.java @@ -0,0 +1,50 @@ +package org.cryptomator.ui.recoverykey; + +import dagger.Lazy; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.scene.Scene; +import javafx.stage.Stage; +import java.util.ResourceBundle; + +@RecoveryKeyScoped +public class RecoveryKeyIsHubVaultController implements FxController { + + private static final Logger LOG = LoggerFactory.getLogger(RecoveryKeyIsHubVaultController.class); + + private final Stage window; + private final Lazy recoverykeyRecoverScene; + + @Inject + public RecoveryKeyIsHubVaultController(@RecoveryKeyWindow Stage window, + @RecoveryKeyWindow Vault vault, + @RecoveryKeyWindow StringProperty recoveryKey, + @FxmlScene(FxmlFile.RECOVERYKEY_RECOVER) Lazy recoverykeyRecoverScene, + ResourceBundle resourceBundle) { + this.window = window; + //window.setTitle("Is it a hub vault? Huh?"); + this.recoverykeyRecoverScene = recoverykeyRecoverScene; + } + + @FXML + public void initialize() { + } + + @FXML + public void close() { + window.close(); + } + + @FXML + public void recover() { + 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 03b1bc029..165787497 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java @@ -112,6 +112,12 @@ abstract class RecoveryKeyModule { return fxmlLoaders.createScene(FxmlFile.RECOVERYKEY_RESET_VAULT_CONFIG_SUCCESS); } + @Provides + @FxmlScene(FxmlFile.RECOVERYKEY_IS_HUB_VAULT) + @RecoveryKeyScoped + static Scene provideRecoveryKeyIsHubVaultScene(@RecoveryKeyWindow FxmlLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene(FxmlFile.RECOVERYKEY_IS_HUB_VAULT); + } // ------------------ @@ -127,6 +133,11 @@ abstract class RecoveryKeyModule { return new RecoveryKeyDisplayController(window, vault.getDisplayName(), recoveryKey.get(), localization); } + @Binds + @IntoMap + @FxControllerKey(RecoveryKeyIsHubVaultController.class) + abstract FxController provideRecoveryKeyIsHubVaultController(RecoveryKeyIsHubVaultController controller); + @Binds @IntoMap @FxControllerKey(RecoveryKeyRecoverController.class) diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java index c5b466430..46867b356 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java @@ -2,6 +2,7 @@ package org.cryptomator.ui.recoverykey; import dagger.Lazy; import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultState; import org.cryptomator.cryptofs.CryptoFileSystemProperties; import org.cryptomator.cryptofs.CryptoFileSystemProvider; import org.cryptomator.cryptolib.api.CryptoException; @@ -127,7 +128,12 @@ public class RecoveryKeyResetPasswordController implements FxController { }); task.setOnSucceeded(event -> { LOG.info("Used recovery key to reset password for {}.", vault.getDisplayablePath()); - window.setScene(recoverResetPasswordSuccessScene.get()); + if(vault.getState().equals(VaultState.Value.VAULT_CONFIG_MISSING)){ + window.setScene(recoverResetVaultConfigSuccessScene.get()); + } + else { + window.setScene(recoverResetPasswordSuccessScene.get()); + } }); task.setOnFailed(event -> { LOG.error("Resetting password failed.", task.getException()); diff --git a/src/main/resources/fxml/recoverykey_is_hub_vault.fxml b/src/main/resources/fxml/recoverykey_is_hub_vault.fxml new file mode 100644 index 000000000..920777303 --- /dev/null +++ b/src/main/resources/fxml/recoverykey_is_hub_vault.fxml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +