From b64264ef8b363932dca97e3b1dc0f1341802e143 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sat, 26 Jun 2021 17:49:18 +0200 Subject: [PATCH 01/16] updated 3rd party licenses [ci skip] --- src/main/resources/license/THIRD-PARTY.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/license/THIRD-PARTY.txt b/src/main/resources/license/THIRD-PARTY.txt index e756db0eb..2d234f01c 100644 --- a/src/main/resources/license/THIRD-PARTY.txt +++ b/src/main/resources/license/THIRD-PARTY.txt @@ -19,7 +19,7 @@ Cryptomator uses 45 third-party dependencies under the following licenses: - jnr-ffi (com.github.jnr:jnr-ffi:2.1.12 - http://github.com/jnr/jnr-ffi) - FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/) - Gson (com.google.code.gson:gson:2.8.6 - https://github.com/google/gson/gson) - - Dagger (com.google.dagger:dagger:2.35.1 - https://github.com/google/dagger) + - Dagger (com.google.dagger:dagger:2.37 - https://github.com/google/dagger) - error-prone annotations (com.google.errorprone:error_prone_annotations:2.5.1 - http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations) - Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess) - Guava: Google Core Libraries for Java (com.google.guava:guava:30.1.1-jre - https://github.com/google/guava/guava) @@ -29,7 +29,7 @@ Cryptomator uses 45 third-party dependencies under the following licenses: - javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/) - Java Native Access (net.java.dev.jna:jna:5.7.0 - https://github.com/java-native-access/jna) - Java Native Access Platform (net.java.dev.jna:jna-platform:5.7.0 - https://github.com/java-native-access/jna) - - Apache Commons Lang (org.apache.commons:commons-lang3:3.11 - https://commons.apache.org/proper/commons-lang/) + - Apache Commons Lang (org.apache.commons:commons-lang3:3.12.0 - https://commons.apache.org/proper/commons-lang/) - Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.14 - http://hc.apache.org/httpcomponents-core-ga) - Jackrabbit WebDAV Library (org.apache.jackrabbit:jackrabbit-webdav:2.21.5 - http://jackrabbit.apache.org/jackrabbit-webdav/) - Jetty :: Http Utility (org.eclipse.jetty:jetty-http:10.0.3 - https://eclipse.org/jetty/jetty-http) @@ -74,14 +74,14 @@ Cryptomator uses 45 third-party dependencies under the following licenses: - Java Native Access (net.java.dev.jna:jna:5.7.0 - https://github.com/java-native-access/jna) - Java Native Access Platform (net.java.dev.jna:jna-platform:5.7.0 - https://github.com/java-native-access/jna) MIT License: - - java jwt (com.auth0:java-jwt:3.15.0 - https://github.com/auth0/java-jwt) + - java jwt (com.auth0:java-jwt:3.17.0 - https://github.com/auth0/java-jwt) - jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - http://github.com/jnr/jnr-x86asm) - jnr-fuse (com.github.serceman:jnr-fuse:0.5.5 - https://github.com/SerCeMan/jnr-fuse) - zxcvbn4j (com.nulab-inc:zxcvbn:1.3.0 - https://github.com/nulab/zxcvbn4j) - Checker Qual (org.checkerframework:checker-qual:3.8.0 - https://checkerframework.org) - - SLF4J API Module (org.slf4j:slf4j-api:1.7.30 - http://www.slf4j.org) + - SLF4J API Module (org.slf4j:slf4j-api:1.7.31 - http://www.slf4j.org) The BSD 2-Clause License: - - EasyBind (com.tobiasdiez:easybind:2.1.0 - https://github.com/tobiasdiez/EasyBind) + - EasyBind (com.tobiasdiez:easybind:2.2 - https://github.com/tobiasdiez/EasyBind) Cryptomator uses other third-party assets under the following licenses: SIL OFL 1.1 License: From cadd071ebd7577dfc3273c613fa773c50ced5b1d Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 28 Jun 2021 18:42:10 +0200 Subject: [PATCH 02/16] update cryptofs --- pom.xml | 2 +- .../ui/addvaultwizard/CreateNewVaultPasswordController.java | 4 ++-- src/main/java/org/cryptomator/ui/health/HealthCheckTask.java | 3 ++- src/main/java/org/cryptomator/ui/health/ResultFixApplier.java | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 4673375ae..cfe5c7e55 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 16 - 2.1.0-beta7 + 2.1.0-beta8 1.0.0-rc1 1.0.0-beta2 1.0.0-beta2 diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java index 4b4e02ed2..28b8384bb 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java @@ -5,8 +5,8 @@ import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.VaultListManager; import org.cryptomator.cryptofs.CryptoFileSystemProperties; import org.cryptomator.cryptofs.CryptoFileSystemProvider; -import org.cryptomator.cryptofs.VaultCipherCombo; import org.cryptomator.cryptolib.api.CryptoException; +import org.cryptomator.cryptolib.api.CryptorProvider; import org.cryptomator.cryptolib.api.Masterkey; import org.cryptomator.cryptolib.api.MasterkeyLoader; import org.cryptomator.cryptolib.common.MasterkeyFileAccess; @@ -182,7 +182,7 @@ public class CreateNewVaultPasswordController implements FxController { // 2. initialize vault: try { MasterkeyLoader loader = ignored -> masterkey.clone(); - CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties().withCipherCombo(VaultCipherCombo.SIV_CTRMAC).withKeyLoader(loader).build(); + CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties().withCipherCombo(CryptorProvider.Scheme.SIV_CTRMAC).withKeyLoader(loader).build(); CryptoFileSystemProvider.initialize(path, fsProps, DEFAULT_KEY_ID); // 3. write vault-internal readme file: diff --git a/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java b/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java index 7acbfc1c2..e64891fd4 100644 --- a/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java +++ b/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java @@ -3,6 +3,7 @@ package org.cryptomator.ui.health; import org.cryptomator.cryptofs.VaultConfig; import org.cryptomator.cryptofs.health.api.DiagnosticResult; import org.cryptomator.cryptofs.health.api.HealthCheck; +import org.cryptomator.cryptolib.api.CryptorProvider; import org.cryptomator.cryptolib.api.Masterkey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,7 +55,7 @@ class HealthCheckTask extends Task { protected Void call() { Instant start = Instant.now(); try (var masterkeyClone = masterkey.clone(); // - var cryptor = vaultConfig.getCipherCombo().getCryptorProvider(csprng).withKey(masterkeyClone)) { + var cryptor = CryptorProvider.forScheme(vaultConfig.getCipherCombo()).provide(masterkeyClone, csprng)) { check.check(vaultPath, vaultConfig, masterkeyClone, cryptor, result -> { if (isCancelled()) { throw new CancellationException(); diff --git a/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java b/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java index 3c5403ab7..feea6eae0 100644 --- a/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java +++ b/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java @@ -4,6 +4,7 @@ import com.google.common.base.Preconditions; import org.cryptomator.common.vaults.Vault; import org.cryptomator.cryptofs.VaultConfig; import org.cryptomator.cryptofs.health.api.DiagnosticResult; +import org.cryptomator.cryptolib.api.CryptorProvider; import org.cryptomator.cryptolib.api.Masterkey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +36,7 @@ class ResultFixApplier { public void fix(DiagnosticResult result) { Preconditions.checkArgument(result.getSeverity() == DiagnosticResult.Severity.WARN, "Unfixable result"); try (var masterkeyClone = masterkey.clone(); // - var cryptor = vaultConfig.getCipherCombo().getCryptorProvider(csprng).withKey(masterkeyClone)) { + var cryptor = CryptorProvider.forScheme(vaultConfig.getCipherCombo()).provide(masterkeyClone, csprng)) { result.fix(vaultPath, vaultConfig, masterkeyClone, cryptor); } catch (Exception e) { LOG.error("Failed to apply fix", e); From c6aceb3e59dd2cb5c8b46d99a9b8fd9b5ae86aba Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 28 Jun 2021 18:52:34 +0200 Subject: [PATCH 03/16] don't setPassphraseStored to true after changing pw, when it isn't actually stored --- .../org/cryptomator/common/keychain/KeychainManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cryptomator/common/keychain/KeychainManager.java b/src/main/java/org/cryptomator/common/keychain/KeychainManager.java index 64db08018..57af6c685 100644 --- a/src/main/java/org/cryptomator/common/keychain/KeychainManager.java +++ b/src/main/java/org/cryptomator/common/keychain/KeychainManager.java @@ -59,8 +59,10 @@ public class KeychainManager implements KeychainAccessProvider { @Override public void changePassphrase(String key, CharSequence passphrase) throws KeychainAccessException { - getKeychainOrFail().changePassphrase(key, passphrase); - setPassphraseStored(key, true); + if (isPassphraseStored(key)) { + getKeychainOrFail().changePassphrase(key, passphrase); + setPassphraseStored(key, true); + } } @Override From a96115ecd6cc218c5314e8c20b98cd56204edc07 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 29 Jun 2021 09:57:45 +0200 Subject: [PATCH 04/16] Feature: revamp health workflow init (#1695) * Add health tab to vault options: * health tool is started from there * health tool closes old Window and creates new one * added info and remarks about health tool * adds confirmation checkbox before starting health tool * close vault options window when starting health workflow * Remove AutoLock tab, move options to general tab Co-authored-by: Snyk bot Co-authored-by: Tobias Hagemann Co-authored-by: Sebastian Stenzel --- .../ui/controls/FontAwesome5Icon.java | 2 +- .../ui/health/HealthCheckComponent.java | 8 +++ .../ui/health/HealthCheckModule.java | 6 ++- .../AutoLockVaultOptionsController.java | 51 ------------------- .../GeneralVaultOptionsController.java | 35 +++++++++---- .../HealthVaultOptionsController.java | 30 +++++++++++ .../vaultoptions/SelectedVaultOptionsTab.java | 6 ++- .../vaultoptions/VaultOptionsController.java | 2 + .../ui/vaultoptions/VaultOptionsModule.java | 5 +- src/main/resources/fxml/health_start.fxml | 1 - src/main/resources/fxml/vault_options.fxml | 6 +-- .../fxml/vault_options_autolock.fxml | 26 ---------- .../resources/fxml/vault_options_general.fxml | 13 ++++- .../resources/fxml/vault_options_health.fxml | 49 ++++++++++++++++++ src/main/resources/i18n/strings.properties | 18 ++++--- 15 files changed, 153 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/org/cryptomator/ui/vaultoptions/AutoLockVaultOptionsController.java create mode 100644 src/main/java/org/cryptomator/ui/vaultoptions/HealthVaultOptionsController.java delete mode 100644 src/main/resources/fxml/vault_options_autolock.fxml create mode 100644 src/main/resources/fxml/vault_options_health.fxml diff --git a/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java b/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java index a273447bb..6ec3cddb4 100644 --- a/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java +++ b/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java @@ -39,7 +39,7 @@ public enum FontAwesome5Icon { REDO("\uF01E"), // SEARCH("\uF002"), // SPINNER("\uF110"), // - STOPWATCH("\uF2F2"), // + STETHOSCOPE("\uF0f1"), // SYNC("\uF021"), // TIMES("\uF00D"), // TRASH("\uF1F8"), // diff --git a/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java b/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java index 48b16f694..365ab63df 100644 --- a/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java +++ b/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java @@ -7,6 +7,7 @@ import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import javax.inject.Named; import javafx.scene.Scene; import javafx.stage.Stage; @@ -17,6 +18,9 @@ public interface HealthCheckComponent { @HealthCheckWindow Stage window(); + @Named("windowToClose") + Stage windowToClose(); + @FxmlScene(FxmlFile.HEALTH_START) Lazy scene(); @@ -24,6 +28,7 @@ public interface HealthCheckComponent { Stage stage = window(); stage.setScene(scene().get()); stage.show(); + windowToClose().close(); return stage; } @@ -33,6 +38,9 @@ public interface HealthCheckComponent { @BindsInstance Builder vault(@HealthCheckWindow Vault vault); + @BindsInstance + Builder windowToClose(@Named("windowToClose") Stage window); + HealthCheckComponent build(); } diff --git a/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java b/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java index e33a9f2f1..061aee4ce 100644 --- a/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java +++ b/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java @@ -19,6 +19,8 @@ import org.cryptomator.ui.keyloading.KeyLoadingComponent; import org.cryptomator.ui.keyloading.KeyLoadingStrategy; import org.cryptomator.ui.mainwindow.MainWindow; +import javax.annotation.Nullable; +import javax.inject.Named; import javax.inject.Provider; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; @@ -86,10 +88,10 @@ abstract class HealthCheckModule { @HealthCheckScoped static Stage provideStage(StageFactory factory, @MainWindow Stage owner, ResourceBundle resourceBundle, ChangeListener showingListener) { Stage stage = factory.create(); - stage.setTitle(resourceBundle.getString("health.title")); - stage.setResizable(true); stage.initModality(Modality.WINDOW_MODAL); stage.initOwner(owner); + stage.setTitle(resourceBundle.getString("health.title")); + stage.setResizable(true); stage.showingProperty().addListener(showingListener); // bind masterkey lifecycle to window return stage; } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/AutoLockVaultOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/AutoLockVaultOptionsController.java deleted file mode 100644 index 1bb74690f..000000000 --- a/src/main/java/org/cryptomator/ui/vaultoptions/AutoLockVaultOptionsController.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.cryptomator.ui.vaultoptions; - -import org.cryptomator.common.vaults.Vault; -import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.controls.NumericTextField; - -import javax.inject.Inject; -import javafx.beans.binding.Bindings; -import javafx.fxml.FXML; -import javafx.scene.control.CheckBox; -import javafx.util.StringConverter; - -@VaultOptionsScoped -public class AutoLockVaultOptionsController implements FxController { - - private final Vault vault; - - public CheckBox lockAfterTimeCheckbox; - public NumericTextField lockTimeInMinutesTextField; - - @Inject - AutoLockVaultOptionsController(@VaultOptionsWindow Vault vault) { - this.vault = vault; - } - - @FXML - public void initialize() { - lockAfterTimeCheckbox.selectedProperty().bindBidirectional(vault.getVaultSettings().autoLockWhenIdle()); - Bindings.bindBidirectional(lockTimeInMinutesTextField.textProperty(), vault.getVaultSettings().autoLockIdleSeconds(), new IdleTimeSecondsConverter()); - } - - private static class IdleTimeSecondsConverter extends StringConverter { - - @Override - public String toString(Number seconds) { - int minutes = seconds.intValue() / 60; // int-truncate - return Integer.toString(minutes); - } - - @Override - public Number fromString(String string) { - try { - int minutes = Integer.valueOf(string); - return minutes * 60; - } catch (NumberFormatException e) { - return 0; - } - } - } - -} diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java index 79d3b53ad..0ccea096e 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java @@ -3,10 +3,11 @@ package org.cryptomator.ui.vaultoptions; import org.cryptomator.common.settings.WhenUnlocked; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.health.HealthCheckComponent; +import org.cryptomator.ui.controls.NumericTextField; import javax.inject.Inject; import javafx.beans.Observable; +import javafx.beans.binding.Bindings; import javafx.fxml.FXML; import javafx.scene.control.CheckBox; import javafx.scene.control.ChoiceBox; @@ -23,18 +24,18 @@ public class GeneralVaultOptionsController implements FxController { private final Stage window; private final Vault vault; - private final HealthCheckComponent.Builder healthCheckWindow; private final ResourceBundle resourceBundle; public TextField vaultName; public CheckBox unlockOnStartupCheckbox; public ChoiceBox actionAfterUnlockChoiceBox; + public CheckBox lockAfterTimeCheckbox; + public NumericTextField lockTimeInMinutesTextField; @Inject - GeneralVaultOptionsController(@VaultOptionsWindow Stage window, @VaultOptionsWindow Vault vault, HealthCheckComponent.Builder healthCheckWindow, ResourceBundle resourceBundle) { + GeneralVaultOptionsController(@VaultOptionsWindow Stage window, @VaultOptionsWindow Vault vault, ResourceBundle resourceBundle) { this.window = window; this.vault = vault; - this.healthCheckWindow = healthCheckWindow; this.resourceBundle = resourceBundle; } @@ -47,6 +48,8 @@ public class GeneralVaultOptionsController implements FxController { actionAfterUnlockChoiceBox.getItems().addAll(WhenUnlocked.values()); actionAfterUnlockChoiceBox.valueProperty().bindBidirectional(vault.getVaultSettings().actionAfterUnlock()); actionAfterUnlockChoiceBox.setConverter(new WhenUnlockedConverter(resourceBundle)); + lockAfterTimeCheckbox.selectedProperty().bindBidirectional(vault.getVaultSettings().autoLockWhenIdle()); + Bindings.bindBidirectional(lockTimeInMinutesTextField.textProperty(), vault.getVaultSettings().autoLockIdleSeconds(), new IdleTimeSecondsConverter()); } private void trimVaultNameOnFocusLoss(Observable observable, Boolean wasFocussed, Boolean isFocussed) { @@ -64,12 +67,6 @@ public class GeneralVaultOptionsController implements FxController { } } - @FXML - public void showHealthCheck() { - healthCheckWindow.vault(vault).build().showHealthCheckWindow(); - } - - private static class WhenUnlockedConverter extends StringConverter { private final ResourceBundle resourceBundle; @@ -89,4 +86,22 @@ public class GeneralVaultOptionsController implements FxController { } } + private static class IdleTimeSecondsConverter extends StringConverter { + + @Override + public String toString(Number seconds) { + int minutes = seconds.intValue() / 60; // int-truncate + return Integer.toString(minutes); + } + + @Override + public Number fromString(String string) { + try { + int minutes = Integer.valueOf(string); + return minutes * 60; + } catch (NumberFormatException e) { + return 0; + } + } + } } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/HealthVaultOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/HealthVaultOptionsController.java new file mode 100644 index 000000000..ee8bf1df0 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/vaultoptions/HealthVaultOptionsController.java @@ -0,0 +1,30 @@ +package org.cryptomator.ui.vaultoptions; + +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.health.HealthCheckComponent; + +import javax.inject.Inject; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.stage.Stage; + +@VaultOptionsScoped +public class HealthVaultOptionsController implements FxController { + + @Inject + public HealthVaultOptionsController(@VaultOptionsWindow Stage window, @VaultOptionsWindow Vault vault, HealthCheckComponent.Builder healthCheckWindow) { + this.window = window; + this.vault = vault; + this.healthCheckWindow = healthCheckWindow; + } + + @FXML + public void startHealthCheck(ActionEvent event) { + healthCheckWindow.vault(vault).windowToClose(window).build().showHealthCheckWindow(); + } + + private final Stage window; + private final Vault vault; + private final HealthCheckComponent.Builder healthCheckWindow; +} diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/SelectedVaultOptionsTab.java b/src/main/java/org/cryptomator/ui/vaultoptions/SelectedVaultOptionsTab.java index 03a4922d4..bfaff147a 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/SelectedVaultOptionsTab.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/SelectedVaultOptionsTab.java @@ -23,7 +23,11 @@ public enum SelectedVaultOptionsTab { /** * Show Auto-Lock tab - * */ AUTOLOCK, + + /** + * Show health tab + */ + HEALTH; } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java index 20dac7594..662232a49 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java @@ -24,6 +24,7 @@ public class VaultOptionsController implements FxController { public Tab mountTab; public Tab keyTab; public Tab autoLockTab; + public Tab healthTab; @Inject VaultOptionsController(@VaultOptionsWindow Stage window, ObjectProperty selectedTabProperty) { @@ -49,6 +50,7 @@ public class VaultOptionsController implements FxController { case MOUNT -> mountTab; case KEY -> keyTab; case AUTOLOCK -> autoLockTab; + case HEALTH -> healthTab; }; } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java index 89cef234b..2de9421a0 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java @@ -86,7 +86,6 @@ abstract class VaultOptionsModule { @Binds @IntoMap - @FxControllerKey(AutoLockVaultOptionsController.class) - abstract FxController bindAutoLockVaultOptionsController(AutoLockVaultOptionsController controller); - + @FxControllerKey(HealthVaultOptionsController.class) + abstract FxController bindHealthOptionsController(HealthVaultOptionsController controller); } diff --git a/src/main/resources/fxml/health_start.fxml b/src/main/resources/fxml/health_start.fxml index 79d946884..63db32ce8 100644 --- a/src/main/resources/fxml/health_start.fxml +++ b/src/main/resources/fxml/health_start.fxml @@ -17,7 +17,6 @@ -