Browse Source

Merge pull request #2445 from purejava/disable-keyrings

fixes #2047, fixes #2219
Sebastian Stenzel 2 years ago
parent
commit
cc24a4c9ae

+ 4 - 1
src/main/java/org/cryptomator/common/keychain/KeychainModule.java

@@ -23,11 +23,14 @@ public class KeychainModule {
 	@Singleton
 	static ObjectExpression<KeychainAccessProvider> provideKeychainAccessProvider(Settings settings, List<KeychainAccessProvider> providers) {
 		return Bindings.createObjectBinding(() -> {
+			if (!settings.useKeychain().get()) {
+				return null;
+			}
 			var selectedProviderClass = settings.keychainProvider().get();
 			var selectedProvider = providers.stream().filter(provider -> provider.getClass().getName().equals(selectedProviderClass)).findAny();
 			var fallbackProvider = providers.stream().findFirst().orElse(null);
 			return selectedProvider.orElse(fallbackProvider);
-		}, settings.keychainProvider());
+		}, settings.keychainProvider(), settings.useKeychain());
 	}
 
 }

+ 5 - 0
src/main/java/org/cryptomator/common/settings/Settings.java

@@ -33,6 +33,7 @@ public class Settings {
 	public static final boolean DEFAULT_CHECK_FOR_UPDATES = false;
 	public static final boolean DEFAULT_START_HIDDEN = false;
 	public static final boolean DEFAULT_AUTO_CLOSE_VAULTS = false;
+	public static final boolean DEFAULT_USE_KEYCHAIN = true;
 	public static final int DEFAULT_PORT = 42427;
 	public static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
 	public static final WebDavUrlScheme DEFAULT_GVFS_SCHEME = WebDavUrlScheme.DAV;
@@ -53,6 +54,7 @@ public class Settings {
 	private final BooleanProperty checkForUpdates = new SimpleBooleanProperty(DEFAULT_CHECK_FOR_UPDATES);
 	private final BooleanProperty startHidden = new SimpleBooleanProperty(DEFAULT_START_HIDDEN);
 	private final BooleanProperty autoCloseVaults = new SimpleBooleanProperty(DEFAULT_AUTO_CLOSE_VAULTS);
+	private final BooleanProperty useKeychain = new SimpleBooleanProperty(DEFAULT_USE_KEYCHAIN);
 	private final IntegerProperty port = new SimpleIntegerProperty(DEFAULT_PORT);
 	private final IntegerProperty numTrayNotifications = new SimpleIntegerProperty(DEFAULT_NUM_TRAY_NOTIFICATIONS);
 	private final ObjectProperty<WebDavUrlScheme> preferredGvfsScheme = new SimpleObjectProperty<>(DEFAULT_GVFS_SCHEME);
@@ -85,6 +87,7 @@ public class Settings {
 		checkForUpdates.addListener(this::somethingChanged);
 		startHidden.addListener(this::somethingChanged);
 		autoCloseVaults.addListener(this::somethingChanged);
+		useKeychain.addListener(this::somethingChanged);
 		port.addListener(this::somethingChanged);
 		numTrayNotifications.addListener(this::somethingChanged);
 		preferredGvfsScheme.addListener(this::somethingChanged);
@@ -140,6 +143,8 @@ public class Settings {
 		return autoCloseVaults;
 	}
 
+	public BooleanProperty useKeychain() { return useKeychain; }
+
 	public IntegerProperty port() {
 		return port;
 	}

+ 2 - 0
src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java

@@ -50,6 +50,7 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
 		out.name("theme").value(value.theme().get().name());
 		out.name("uiOrientation").value(value.userInterfaceOrientation().get().name());
 		out.name("keychainProvider").value(value.keychainProvider().get());
+		out.name("useKeychain").value(value.useKeychain().get());
 		out.name("licenseKey").value(value.licenseKey().get());
 		out.name("showMinimizeButton").value(value.showMinimizeButton().get());
 		out.name("showTrayIcon").value(value.showTrayIcon().get());
@@ -92,6 +93,7 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
 				case "theme" -> settings.theme().set(parseUiTheme(in.nextString()));
 				case "uiOrientation" -> settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString()));
 				case "keychainProvider" -> settings.keychainProvider().set(in.nextString());
+				case "useKeychain" -> settings.useKeychain().set(in.nextBoolean());
 				case "licenseKey" -> settings.licenseKey().set(in.nextString());
 				case "showMinimizeButton" -> settings.showMinimizeButton().set(in.nextBoolean());
 				case "showTrayIcon" -> settings.showTrayIcon().set(in.nextBoolean());

+ 3 - 0
src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java

@@ -34,6 +34,7 @@ public class GeneralPreferencesController implements FxController {
 	private final Environment environment;
 	private final List<KeychainAccessProvider> keychainAccessProviders;
 	private final FxApplicationWindows appWindows;
+	public CheckBox useKeychainCheckbox;
 	public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
 	public CheckBox startHiddenCheckbox;
 	public CheckBox autoCloseVaultsCheckbox;
@@ -64,6 +65,8 @@ public class GeneralPreferencesController implements FxController {
 		keychainBackendChoiceBox.setValue(keychainSettingsConverter.fromString(settings.keychainProvider().get()));
 		keychainBackendChoiceBox.setConverter(new KeychainProviderDisplayNameConverter());
 		Bindings.bindBidirectional(settings.keychainProvider(), keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
+		useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain());
+		keychainBackendChoiceBox.disableProperty().bind(useKeychainCheckbox.selectedProperty().not());
 	}
 
 	public boolean isAutoStartSupported() {

+ 1 - 2
src/main/resources/fxml/preferences_general.fxml

@@ -4,7 +4,6 @@
 <?import javafx.scene.control.CheckBox?>
 <?import javafx.scene.control.ChoiceBox?>
 <?import javafx.scene.control.Hyperlink?>
-<?import javafx.scene.control.Label?>
 <?import javafx.scene.control.ToggleGroup?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
@@ -27,7 +26,7 @@
 		<CheckBox fx:id="autoCloseVaultsCheckbox" text="%preferences.general.autoCloseVaults" />
 
 		<HBox spacing="12" alignment="CENTER_LEFT">
-			<Label text="%preferences.general.keychainBackend"/>
+			<CheckBox fx:id="useKeychainCheckbox" text="%preferences.general.keychainBackend"/>
 			<ChoiceBox fx:id="keychainBackendChoiceBox"/>
 		</HBox>