Ver código fonte

add keyLoader entry to VaultSettings

Jan-Peter Klein 2 meses atrás
pai
commit
6365c22297

+ 3 - 0
src/main/java/org/cryptomator/common/settings/VaultSettings.java

@@ -58,6 +58,7 @@ public class VaultSettings {
 	public final StringExpression mountName;
 	public final StringProperty mountService;
 	public final IntegerProperty port;
+	public final StringProperty keyLoader;
 
 	VaultSettings(VaultSettingsJson json) {
 		this.id = json.id;
@@ -74,6 +75,7 @@ public class VaultSettings {
 		this.mountPoint = new SimpleObjectProperty<>(this, "mountPoint", json.mountPoint == null ? null : Path.of(json.mountPoint));
 		this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
 		this.port = new SimpleIntegerProperty(this, "port", json.port);
+		this.keyLoader = new SimpleStringProperty(this, "keyLoader", json.keyLoader);
 		// mount name is no longer an explicit setting, see https://github.com/cryptomator/cryptomator/pull/1318
 		this.mountName = StringExpression.stringExpression(Bindings.createStringBinding(() -> {
 			final String name;
@@ -130,6 +132,7 @@ public class VaultSettings {
 		json.mountPoint = mountPoint.map(Path::toString).getValue();
 		json.mountService = mountService.get();
 		json.port = port.get();
+		json.keyLoader = keyLoader.get();
 		return json;
 	}
 

+ 3 - 0
src/main/java/org/cryptomator/common/settings/VaultSettingsJson.java

@@ -48,6 +48,9 @@ class VaultSettingsJson {
 	@JsonProperty("mountService")
 	String mountService;
 
+	@JsonProperty("keyLoader")
+	String keyLoader;
+
 	@JsonProperty("port")
 	int port = VaultSettings.DEFAULT_PORT;
 

+ 10 - 0
src/main/java/org/cryptomator/common/vaults/Vault.java

@@ -75,6 +75,7 @@ public class Vault {
 	private final Mounter mounter;
 	private final Settings settings;
 	private final BooleanProperty showingStats;
+	private final StringBinding keyLoader;
 
 	private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
 
@@ -104,6 +105,7 @@ public class Vault {
 		this.settings = settings;
 		this.showingStats = new SimpleBooleanProperty(false);
 		this.quickAccessEntry = new AtomicReference<>(null);
+		this.keyLoader = Bindings.createStringBinding(this::getKeyLoader, vaultSettings.keyLoader);
 	}
 
 	// ******************************************************************************
@@ -340,6 +342,14 @@ public class Vault {
 		return handle == null ? null : handle.mountObj().getMountpoint();
 	}
 
+	public StringBinding keyLoaderProperty() {
+		return keyLoader;
+	}
+
+	public String getKeyLoader() {
+		return vaultSettings.keyLoader.get();
+	}
+
 	public StringBinding displayablePathProperty() {
 		return displayablePath;
 	}

+ 18 - 0
src/main/java/org/cryptomator/common/vaults/VaultListManager.java

@@ -27,6 +27,7 @@ import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.util.Collection;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.ResourceBundle;
 
@@ -73,11 +74,27 @@ public class VaultListManager {
 		return get(normalizedPathToVault) //
 				.orElseGet(() -> {
 					Vault newVault = create(newVaultSettings(normalizedPathToVault));
+					setVaultScheme(newVault);
 					vaultList.add(newVault);
 					return newVault;
 				});
 	}
 
+	private void setVaultScheme(Vault vault) {
+		try {
+			var keyLoader = vault.getVaultSettings().keyLoader;
+			if (Objects.isNull(keyLoader.get())) {
+				var vaultConfig = vault.getVaultConfigCache().get();
+				var keyIdScheme = vaultConfig.getKeyId().getScheme();
+				keyLoader.set(keyIdScheme);
+			}
+		} catch (NoSuchFileException e) {
+			LOG.error("NoSuchFileException", e);
+		} catch (IOException e) {
+			throw new RuntimeException("Unexpected Exception", e);
+		}
+	}
+
 	private VaultSettings newVaultSettings(Path path) {
 		VaultSettings vaultSettings = VaultSettings.withRandomId();
 		vaultSettings.path.set(path);
@@ -101,6 +118,7 @@ public class VaultListManager {
 	private void addAll(Collection<VaultSettings> vaultSettings) {
 		Collection<Vault> vaults = vaultSettings.stream().map(this::create).toList();
 		vaultList.addAll(vaults);
+		vaults.forEach(this::setVaultScheme);
 	}
 
 	private Optional<Vault> get(Path vaultPath) {

+ 2 - 0
src/main/java/org/cryptomator/ui/convertvault/HubToPasswordConvertController.java

@@ -15,6 +15,7 @@ import org.cryptomator.ui.common.FxController;
 import org.cryptomator.ui.common.FxmlFile;
 import org.cryptomator.ui.common.FxmlScene;
 import org.cryptomator.ui.fxapp.FxApplicationWindows;
+import org.cryptomator.ui.keyloading.masterkeyfile.MasterkeyFileLoadingStrategy;
 import org.cryptomator.ui.recoverykey.RecoveryKeyFactory;
 import org.jetbrains.annotations.VisibleForTesting;
 import org.slf4j.Logger;
@@ -108,6 +109,7 @@ public class HubToPasswordConvertController implements FxController {
 				.thenRunAsync(this::convertInternal, backgroundExecutorService) //
 				.whenCompleteAsync((result, exception) -> {
 					if (exception == null) {
+						vault.getVaultSettings().keyLoader.set(MasterkeyFileLoadingStrategy.SCHEME);
 						LOG.info("Conversion of vault {} succeeded.", vault.getPath());
 						window.setScene(successScene.get());
 					} else {

+ 2 - 2
src/main/java/org/cryptomator/ui/sharevault/ShareVaultController.java

@@ -33,8 +33,8 @@ public class ShareVaultController implements FxController {
 		this.window = window;
 		this.application = application;
 		this.vault = vault;
-		var vaultScheme = vault.getVaultConfigCache().getUnchecked().getKeyId().getScheme();
-		this.hubVault = (vaultScheme.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTP) || vaultScheme.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTPS));
+		var vaultKeyLoader = vault.getVaultSettings().keyLoader.get();
+		this.hubVault = (vaultKeyLoader.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTP) || vaultKeyLoader.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTPS));
 	}
 
 	@FXML

+ 3 - 3
src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java

@@ -42,11 +42,11 @@ public class VaultOptionsController implements FxController {
 		window.setOnShowing(this::windowWillAppear);
 		selectedTabProperty.addListener(observable -> this.selectChosenTab());
 		tabPane.getSelectionModel().selectedItemProperty().addListener(observable -> this.selectedTabChanged());
-		var vaultScheme = vault.getVaultConfigCache().getUnchecked().getKeyId().getScheme();
-		if(!vaultScheme.equals(MasterkeyFileLoadingStrategy.SCHEME)){
+		var vaultKeyLoader = vault.getVaultSettings().keyLoader.get();
+		if(!vaultKeyLoader.equals(MasterkeyFileLoadingStrategy.SCHEME)){
 			tabPane.getTabs().remove(keyTab);
 		}
-		if(!(vaultScheme.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTP) || vaultScheme.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTPS))){
+		if(!(vaultKeyLoader.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTP) || vaultKeyLoader.equals(HubKeyLoadingStrategy.SCHEME_HUB_HTTPS))){
 			tabPane.getTabs().remove(hubTab);
 		}