From 76d1875e010b3ea1d88eb979bcddec7a2a323a71 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 6 May 2021 09:56:50 +0200 Subject: [PATCH] adjusted to new `CryptoFileSystemProvider.checkDirStructureForVault` API --- .../common/vaults/VaultListManager.java | 19 ++++++++++--------- main/pom.xml | 2 +- .../ChooseExistingVaultController.java | 2 +- .../CreateNewVaultPasswordController.java | 2 +- .../ui/launcher/AppLaunchEventHandler.java | 3 ++- .../ui/mainwindow/MainWindowController.java | 13 +++++++------ 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index 39a175169..db9112d21 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -11,6 +11,7 @@ package org.cryptomator.common.vaults; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.cryptofs.CryptoFileSystemProvider; +import org.cryptomator.cryptofs.DirStructure; import org.cryptomator.cryptofs.migration.Migrators; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,9 +53,9 @@ public class VaultListManager { return vaultList; } - public Vault add(Path pathToVault) throws NoSuchFileException { + public Vault add(Path pathToVault) throws IOException { Path normalizedPathToVault = pathToVault.normalize().toAbsolutePath(); - if (!CryptoFileSystemProvider.containsVault(normalizedPathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME)) { + if (CryptoFileSystemProvider.checkDirStructureForVault(normalizedPathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) == DirStructure.UNRELATED) { throw new NoSuchFileException(normalizedPathToVault.toString(), null, "Not a vault directory"); } Optional alreadyExistingVault = get(normalizedPathToVault); @@ -125,13 +126,13 @@ public class VaultListManager { } private static VaultState.Value determineVaultState(Path pathToVault) throws IOException { - if (!CryptoFileSystemProvider.containsVault(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME)) { - return VaultState.Value.MISSING; - } else if (Migrators.get().needsMigration(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME)) { - return VaultState.Value.NEEDS_MIGRATION; - } else { - return VaultState.Value.LOCKED; - } + return switch (CryptoFileSystemProvider.checkDirStructureForVault(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME)) { + case VAULT -> VaultState.Value.LOCKED; + case UNRELATED -> VaultState.Value.MISSING; + case MAYBE_LEGACY -> Migrators.get().needsMigration(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) + ? VaultState.Value.NEEDS_MIGRATION + : VaultState.Value.MISSING; + }; } } diff --git a/main/pom.xml b/main/pom.xml index 75962b02d..4604a9d30 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -25,7 +25,7 @@ 16 - 2.0.0-beta8 + 2.0.0-rc2 1.0.0-beta2 1.0.0-beta2 1.0.0-beta2 diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java index a5398d51b..214ed19b0 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java @@ -81,7 +81,7 @@ public class ChooseExistingVaultController implements FxController { Vault newVault = vaultListManager.add(vaultPath.get()); vault.set(newVault); window.setScene(successScene.get()); - } catch (NoSuchFileException e) { + } catch (IOException e) { LOG.error("Failed to open existing vault.", e); errorComponent.cause(e).window(window).returnToScene(window.getScene()).build().showErrorScene(); } diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java index b61d36748..4be978956 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java @@ -208,7 +208,7 @@ public class CreateNewVaultPasswordController implements FxController { try { Vault newVault = vaultListManager.add(pathToVault); vaultProperty.set(newVault); - } catch (NoSuchFileException e) { + } catch (IOException e) { throw new UncheckedIOException(e); } } diff --git a/main/ui/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java b/main/ui/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java index 0ab11d374..49ef79e83 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java +++ b/main/ui/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java @@ -10,6 +10,7 @@ import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import javafx.application.Platform; +import java.io.IOException; import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.util.concurrent.BlockingQueue; @@ -78,7 +79,7 @@ class AppLaunchEventHandler { fxApplicationStarter.get().thenAccept(app -> app.getVaultService().reveal(v)); } LOG.debug("Added vault {}", potentialVaultPath); - } catch (NoSuchFileException e) { + } catch (IOException e) { LOG.error("Failed to add vault " + potentialVaultPath, e); } } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java index 5fd4cc62d..392671246 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java @@ -3,6 +3,8 @@ package org.cryptomator.ui.mainwindow; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.VaultListManager; +import org.cryptomator.cryptofs.CryptoFileSystemProvider; +import org.cryptomator.cryptofs.DirStructure; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent; import org.slf4j.Logger; @@ -20,6 +22,7 @@ import javafx.scene.input.TransferMode; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import java.io.File; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; @@ -92,11 +95,9 @@ public class MainWindowController implements FxController { } private boolean containsVault(Path path) { - if (path.getFileName().toString().equals(VAULTCONFIG_FILENAME)) { - return true; - } else if (Files.isDirectory(path) && Files.exists(path.resolve(VAULTCONFIG_FILENAME))) { - return true; - } else { + try { + return CryptoFileSystemProvider.checkDirStructureForVault(path, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) != DirStructure.UNRELATED; + } catch (IOException e) { return false; } } @@ -108,7 +109,7 @@ public class MainWindowController implements FxController { } else { vaultListManager.add(pathToVault); } - } catch (NoSuchFileException e) { + } catch (IOException e) { LOG.debug("Not a vault: {}", pathToVault); } }