From 386bdd3490cb0197ab2806d024cdfe8c21bf6501 Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Wed, 28 Jun 2023 12:24:14 +0200 Subject: [PATCH 01/19] added new AdvancedSettings scene in AddVaultWizard --- .../ui/addvaultwizard/AddVaultModule.java | 19 ++++ ...ateNewVaultAdvancedSettingsController.java | 96 +++++++++++++++++++ .../CreateNewVaultLocationController.java | 22 ++++- .../CreateNewVaultPasswordController.java | 33 ++++++- .../org/cryptomator/ui/common/FxmlFile.java | 1 + .../fxml/addvault_new_advanced_settings.fxml | 69 +++++++++++++ .../resources/fxml/addvault_new_location.fxml | 5 + src/main/resources/i18n/strings.properties | 6 ++ 8 files changed, 245 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultAdvancedSettingsController.java create mode 100644 src/main/resources/fxml/addvault_new_advanced_settings.fxml diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java b/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java index 02327aaf4..42841a72f 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java @@ -65,6 +65,13 @@ public abstract class AddVaultModule { return new SimpleStringProperty(""); } + @Provides + @Named("shorteningThreshold") + @AddVaultWizardScoped + static StringProperty provideShorteningThreshold() { + return new SimpleStringProperty(); + } + @Provides @AddVaultWizardWindow @AddVaultWizardScoped @@ -130,6 +137,13 @@ public abstract class AddVaultModule { return fxmlLoaders.createScene(FxmlFile.ADDVAULT_SUCCESS); } + @Provides + @FxmlScene(FxmlFile.ADDVAULT_NEW_ADVANCED_SETTINGS) + @AddVaultWizardScoped + static Scene provideCreateNewVaultAdvancedSettingsScene(@AddVaultWizardWindow FxmlLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_ADVANCED_SETTINGS); + } + // ------------------ @Binds @@ -181,4 +195,9 @@ public abstract class AddVaultModule { @FxControllerKey(AddVaultSuccessController.class) abstract FxController bindAddVaultSuccessController(AddVaultSuccessController controller); + @Binds + @IntoMap + @FxControllerKey(CreateNewVaultAdvancedSettingsController.class) + abstract FxController bindCreateNewVaultAdvancedSettingsController(CreateNewVaultAdvancedSettingsController controller); + } diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultAdvancedSettingsController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultAdvancedSettingsController.java new file mode 100644 index 000000000..a18b9e70d --- /dev/null +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultAdvancedSettingsController.java @@ -0,0 +1,96 @@ +package org.cryptomator.ui.addvaultwizard; + +import dagger.Lazy; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; +import org.cryptomator.ui.controls.NumericTextField; + +import javax.inject.Inject; +import javax.inject.Named; +import javafx.application.Application; +import javafx.beans.binding.Bindings; +import javafx.beans.binding.BooleanBinding; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.scene.Scene; +import javafx.stage.Stage; +import java.nio.file.Path; +import java.util.ResourceBundle; + +@AddVaultWizardScoped +public class CreateNewVaultAdvancedSettingsController implements FxController { + + private static final String DOCS_MOUNTING_URL = "https://docs.cryptomator.org/en/1.7/security/architecture/#name-shortening"; + private final Stage window; + private final Lazy chooseLocationScene; + private final Lazy choosePasswordScene; + private final ObjectProperty vaultPath; + private final StringProperty vaultName; + private final ResourceBundle resourceBundle; + private final StringProperty shorteningThreshold; + public NumericTextField shorteningThresholdTextField; + private final BooleanBinding validShorteningThreshold; + private final Lazy application; + + @Inject + CreateNewVaultAdvancedSettingsController(@AddVaultWizardWindow Stage window, // + Lazy application, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy chooseLocationScene, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy choosePasswordScene, // + ObjectProperty vaultPath, // + @Named("vaultName") StringProperty vaultName, // + ResourceBundle resourceBundle, // + @Named("shorteningThreshold") StringProperty shorteningThreshold) { + this.window = window; + this.application = application; + this.chooseLocationScene = chooseLocationScene; + this.choosePasswordScene = choosePasswordScene; + this.vaultPath = vaultPath; + this.vaultName = vaultName; + this.resourceBundle = resourceBundle; + this.shorteningThreshold = shorteningThreshold; + this.validShorteningThreshold = Bindings.createBooleanBinding(this::isValidShorteningThreshold, shorteningThreshold); + } + + @FXML + public void initialize() { + shorteningThreshold.bindBidirectional(shorteningThresholdTextField.textProperty()); + } + + @FXML + public void back() { + window.setScene(chooseLocationScene.get()); + } + + @FXML + public void next() { window.setScene(choosePasswordScene.get()); } + + public BooleanBinding validShorteningThresholdProperty() { + return validShorteningThreshold; + } + + public boolean isValidShorteningThreshold() { + if(shorteningThresholdTextField != null){ + try { + var value = Integer.parseInt(shorteningThresholdTextField.getText()); + if (value < 36 || value > 220) { + return false; + } + else{ + return true; + } + } catch (NumberFormatException e) { + return false; + } + } + else { + return false; + } + } + + public void openDocs() { + application.get().getHostServices().showDocument(DOCS_MOUNTING_URL); + } +} \ No newline at end of file diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java index 25febe5e1..7e62f4aab 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java @@ -8,11 +8,14 @@ import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.controls.FontAwesome5IconView; +import org.cryptomator.ui.controls.NumericTextField; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; +import javafx.beans.Observable; +import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanBinding; import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; @@ -21,6 +24,7 @@ import javafx.beans.property.StringProperty; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.scene.Scene; +import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; import javafx.scene.control.Toggle; @@ -49,6 +53,7 @@ public class CreateNewVaultLocationController implements FxController { private final Stage window; private final Lazy chooseNameScene; private final Lazy choosePasswordScene; + private final Lazy chooseAdvancedSettingsScene; private final List locationPresetBtns; private final ObjectProperty vaultPath; private final StringProperty vaultName; @@ -66,12 +71,20 @@ public class CreateNewVaultLocationController implements FxController { public Label locationStatusLabel; public FontAwesome5IconView goodLocation; public FontAwesome5IconView badLocation; + public CheckBox advancedSettingsCheckBox; @Inject - CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy choosePasswordScene, ObjectProperty vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) { + CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy chooseNameScene, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy choosePasswordScene, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_ADVANCED_SETTINGS) Lazy chooseAdvancedSettingsScene, // + ObjectProperty vaultPath, // + @Named("vaultName") StringProperty vaultName, // + ResourceBundle resourceBundle) { this.window = window; this.chooseNameScene = chooseNameScene; this.choosePasswordScene = choosePasswordScene; + this.chooseAdvancedSettingsScene = chooseAdvancedSettingsScene; this.vaultPath = vaultPath; this.vaultName = vaultName; this.resourceBundle = resourceBundle; @@ -151,7 +164,12 @@ public class CreateNewVaultLocationController implements FxController { @FXML public void next() { if (validVaultPath.getValue()) { - window.setScene(choosePasswordScene.get()); + if(advancedSettingsCheckBox.isSelected()){ + window.setScene(chooseAdvancedSettingsScene.get()); + } + else { + window.setScene(choosePasswordScene.get()); + } } } diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java index 81c6ce2da..9adfc3569 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java @@ -16,7 +16,6 @@ import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.changepassword.NewPasswordController; import org.cryptomator.ui.common.Tasks; import org.cryptomator.ui.fxapp.FxApplicationWindows; -import org.cryptomator.ui.keyloading.masterkeyfile.MasterkeyFileLoadingStrategy; import org.cryptomator.ui.recoverykey.RecoveryKeyFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +36,6 @@ import javafx.scene.control.ToggleGroup; import javafx.stage.Stage; import java.io.IOException; import java.io.UncheckedIOException; -import java.net.URI; import java.nio.channels.WritableByteChannel; import java.nio.file.FileSystem; import java.nio.file.Files; @@ -82,8 +80,26 @@ public class CreateNewVaultPasswordController implements FxController { public Toggle skipRecoveryKey; public NewPasswordController newPasswordSceneController; + private final StringProperty shorteningThreshold; + @Inject - CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy chooseLocationScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY) Lazy recoveryKeyScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy successScene, FxApplicationWindows appWindows, ExecutorService executor, RecoveryKeyFactory recoveryKeyFactory, @Named("vaultName") StringProperty vaultName, ObjectProperty vaultPath, @AddVaultWizardWindow ObjectProperty vault, @Named("recoveryKey") StringProperty recoveryKey, VaultListManager vaultListManager, ResourceBundle resourceBundle, ReadmeGenerator readmeGenerator, SecureRandom csprng, MasterkeyFileAccess masterkeyFileAccess) { + CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy chooseLocationScene, // + @FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY) Lazy recoveryKeyScene, // + @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy successScene, // + FxApplicationWindows appWindows, // + ExecutorService executor, // + RecoveryKeyFactory recoveryKeyFactory, // + @Named("vaultName") StringProperty vaultName, // + ObjectProperty vaultPath, // + @AddVaultWizardWindow ObjectProperty vault, // + @Named("recoveryKey") StringProperty recoveryKey, // + VaultListManager vaultListManager, // + ResourceBundle resourceBundle, // + @Named("shorteningThreshold") StringProperty shorteningThreshold, // + ReadmeGenerator readmeGenerator, // + SecureRandom csprng, // + MasterkeyFileAccess masterkeyFileAccess) { this.window = window; this.chooseLocationScene = chooseLocationScene; this.recoveryKeyScene = recoveryKeyScene; @@ -103,6 +119,11 @@ public class CreateNewVaultPasswordController implements FxController { this.processing = new SimpleBooleanProperty(); this.readyToCreateVault = new SimpleBooleanProperty(); this.createVaultButtonState = Bindings.when(processing).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY); + this.shorteningThreshold = shorteningThreshold; + if(this.shorteningThreshold.isNull().get()) + { + this.shorteningThreshold.set("220"); + } } @FXML @@ -176,7 +197,11 @@ public class CreateNewVaultPasswordController implements FxController { // 2. initialize vault: try { MasterkeyLoader loader = ignored -> masterkey.copy(); - CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties().withCipherCombo(CryptorProvider.Scheme.SIV_GCM).withKeyLoader(loader).build(); + CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties() // + .withCipherCombo(CryptorProvider.Scheme.SIV_GCM) // + .withKeyLoader(loader) // + .withShorteningThreshold(Integer.parseInt(shorteningThreshold.getValue())) + .build(); CryptoFileSystemProvider.initialize(path, fsProps, DEFAULT_KEY_ID); // 3. write vault-internal readme file: diff --git a/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/src/main/java/org/cryptomator/ui/common/FxmlFile.java index 3bec75899..f7b164525 100644 --- a/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -4,6 +4,7 @@ public enum FxmlFile { ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), // ADDVAULT_NEW_NAME("/fxml/addvault_new_name.fxml"), // ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"), // + ADDVAULT_NEW_ADVANCED_SETTINGS("/fxml/addvault_new_advanced_settings.fxml"), // ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), // ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), // ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), // diff --git a/src/main/resources/fxml/addvault_new_advanced_settings.fxml b/src/main/resources/fxml/addvault_new_advanced_settings.fxml new file mode 100644 index 000000000..a30586ef8 --- /dev/null +++ b/src/main/resources/fxml/addvault_new_advanced_settings.fxml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +