From bb681fa6d9ff5d10fbb3b6b7b0d6659127a77080 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 29 Apr 2020 14:59:16 +0200 Subject: [PATCH] fixes #1116, at least properly handle errors if the underlying file system doesn't support migration --- .../common/settings/VaultSettings.java | 15 +++++---------- .../settings/VaultSettingsJsonAdapter.java | 10 +++++----- .../org/cryptomator/common/vaults/Vault.java | 16 +++++++++------- main/pom.xml | 2 +- 4 files changed, 20 insertions(+), 23 deletions(-) diff --git a/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java b/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java index 52e13c697..04dd2b447 100644 --- a/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java +++ b/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java @@ -19,15 +19,10 @@ import javafx.beans.property.StringProperty; import org.apache.commons.lang3.StringUtils; import org.fxmisc.easybind.EasyBind; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; import java.nio.file.Path; -import java.util.Base64; -import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Random; -import java.util.UUID; /** * The settings specific to a single vault. @@ -40,7 +35,7 @@ public class VaultSettings { public static final boolean DEFAULT_USES_INDIVIDUAL_MOUNTPATH = false; public static final boolean DEFAULT_USES_READONLY_MODE = false; public static final String DEFAULT_MOUNT_FLAGS = ""; - public static final int DEFAULT_PATH_LENGTH_LIMITATION = -1; + public static final int DEFAULT_FILENAME_LENGTH_LIMIT = -1; private static final Random RNG = new Random(); @@ -54,7 +49,7 @@ public class VaultSettings { private final StringProperty individualMountPath = new SimpleStringProperty(); private final BooleanProperty usesReadOnlyMode = new SimpleBooleanProperty(DEFAULT_USES_READONLY_MODE); private final StringProperty mountFlags = new SimpleStringProperty(DEFAULT_MOUNT_FLAGS); - private final IntegerProperty pathLengthLimitation = new SimpleIntegerProperty(DEFAULT_PATH_LENGTH_LIMITATION); + private final IntegerProperty filenameLengthLimit = new SimpleIntegerProperty(DEFAULT_FILENAME_LENGTH_LIMIT); public VaultSettings(String id) { this.id = Objects.requireNonNull(id); @@ -63,7 +58,7 @@ public class VaultSettings { } Observable[] observables() { - return new Observable[]{path, mountName, winDriveLetter, unlockAfterStartup, revealAfterMount, usesIndividualMountPath, individualMountPath, usesReadOnlyMode, mountFlags, pathLengthLimitation}; + return new Observable[]{path, mountName, winDriveLetter, unlockAfterStartup, revealAfterMount, usesIndividualMountPath, individualMountPath, usesReadOnlyMode, mountFlags, filenameLengthLimit}; } private void deriveMountNameFromPath(Path path) { @@ -151,8 +146,8 @@ public class VaultSettings { return mountFlags; } - public IntegerProperty pathLengthLimitation() { - return pathLengthLimitation; + public IntegerProperty filenameLengthLimit() { + return filenameLengthLimit; } /* Hashcode/Equals */ diff --git a/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java b/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java index 0f3babce3..8e87a16e7 100644 --- a/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java +++ b/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java @@ -29,7 +29,7 @@ class VaultSettingsJsonAdapter { out.name("individualMountPath").value(value.individualMountPath().get()); out.name("usesReadOnlyMode").value(value.usesReadOnlyMode().get()); out.name("mountFlags").value(value.mountFlags().get()); - out.name("pathLengthLimitation").value(value.pathLengthLimitation().get()); + out.name("filenameLengthLimit").value(value.filenameLengthLimit().get()); out.endObject(); } @@ -44,7 +44,7 @@ class VaultSettingsJsonAdapter { boolean usesIndividualMountPath = VaultSettings.DEFAULT_USES_INDIVIDUAL_MOUNTPATH; boolean usesReadOnlyMode = VaultSettings.DEFAULT_USES_READONLY_MODE; String mountFlags = VaultSettings.DEFAULT_MOUNT_FLAGS; - int pathLengthLimitation = VaultSettings.DEFAULT_PATH_LENGTH_LIMITATION; + int filenameLengthLimit = VaultSettings.DEFAULT_FILENAME_LENGTH_LIMIT; in.beginObject(); while (in.hasNext()) { @@ -80,8 +80,8 @@ class VaultSettingsJsonAdapter { case "mountFlags": mountFlags = in.nextString(); break; - case "pathLengthLimitation": - pathLengthLimitation = in.nextInt(); + case "filenameLengthLimit": + filenameLengthLimit = in.nextInt(); break; default: LOG.warn("Unsupported vault setting found in JSON: " + name); @@ -101,7 +101,7 @@ class VaultSettingsJsonAdapter { vaultSettings.individualMountPath().set(individualMountPath); vaultSettings.usesReadOnlyMode().set(usesReadOnlyMode); vaultSettings.mountFlags().set(mountFlags); - vaultSettings.pathLengthLimitation().set(pathLengthLimitation); + vaultSettings.filenameLengthLimit().set(filenameLengthLimit); return vaultSettings; } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java index d0baf7174..5b0fd3bd6 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -21,6 +21,7 @@ import org.cryptomator.cryptofs.CryptoFileSystem; import org.cryptomator.cryptofs.CryptoFileSystemProperties; import org.cryptomator.cryptofs.CryptoFileSystemProperties.FileSystemFlags; import org.cryptomator.cryptofs.CryptoFileSystemProvider; +import org.cryptomator.cryptofs.common.Constants; import org.cryptomator.cryptofs.common.FileSystemCapabilityChecker; import org.cryptomator.cryptolib.api.CryptoException; import org.cryptomator.cryptolib.api.InvalidPassphraseException; @@ -102,18 +103,19 @@ public class Vault { if (vaultSettings.usesReadOnlyMode().get()) { flags.add(FileSystemFlags.READONLY); } - if (vaultSettings.pathLengthLimitation().get() == -1) { - LOG.debug("Determining path length limitations..."); - int limit = new FileSystemCapabilityChecker().determineSupportedPathLength(getPath()); - vaultSettings.pathLengthLimitation().set(limit); - LOG.info("Storing path length limit of {}", limit); + if (vaultSettings.filenameLengthLimit().get() == -1) { + LOG.debug("Determining file name length limitations..."); + int limit = new FileSystemCapabilityChecker().determineSupportedFileNameLength(getPath()); + vaultSettings.filenameLengthLimit().set(limit); + LOG.info("Storing file name length limit of {}", limit); } - assert vaultSettings.pathLengthLimitation().get() > 0; + assert vaultSettings.filenameLengthLimit().get() > 0; CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties() // .withPassphrase(passphrase) // .withFlags(flags) // .withMasterkeyFilename(MASTERKEY_FILENAME) // - .withMaxPathLength(vaultSettings.pathLengthLimitation().get()) // + .withMaxPathLength(vaultSettings.filenameLengthLimit().get() + Constants.MAX_ADDITIONAL_PATH_LENGTH) // + .withMaxNameLength(vaultSettings.filenameLengthLimit().get()) // .build(); return CryptoFileSystemProvider.newFileSystem(getPath(), fsProps); } diff --git a/main/pom.xml b/main/pom.xml index a68ab83e4..7926fdf22 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -24,7 +24,7 @@ UTF-8 - 1.9.8 + 1.9.9 2.2.2 1.2.3 1.1.14