From 74998676655463ab6240c863d1891da3886484da Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Mon, 2 Dec 2024 08:12:00 +0100 Subject: [PATCH] Revert "Use overloaded method storePassword instead of a new one" This reverts commit aa34ad52e628a95e0adef5c540bca389dd38f24c. --- .../cryptomator/common/keychain/KeychainManager.java | 5 +++-- .../masterkeyfile/MasterkeyFileLoadingStrategy.java | 6 +++++- .../ui/vaultoptions/MasterkeyOptionsController.java | 10 +++++++++- .../cryptomator/common/keychain/MapKeychainAccess.java | 5 +++++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cryptomator/common/keychain/KeychainManager.java b/src/main/java/org/cryptomator/common/keychain/KeychainManager.java index 9d71121b8..734594345 100644 --- a/src/main/java/org/cryptomator/common/keychain/KeychainManager.java +++ b/src/main/java/org/cryptomator/common/keychain/KeychainManager.java @@ -49,8 +49,9 @@ public class KeychainManager implements KeychainAccessProvider { setPassphraseStored(key, true); } - public void storePassphrase(String key, String displayName, CharSequence passphrase, boolean requireOsAuthentication) throws KeychainAccessException { - getKeychainOrFail().storePassphrase(key, displayName, passphrase, requireOsAuthentication); + @Override + public void storePassphraseForAuthenticatedUser(String key, String displayName, CharSequence passphrase) throws KeychainAccessException { + getKeychainOrFail().storePassphraseForAuthenticatedUser(key, displayName, passphrase); setPassphraseStored(key, true); } diff --git a/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java b/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java index 1e50df139..405365ac6 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java +++ b/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java @@ -114,7 +114,11 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy { private void savePasswordToSystemkeychain(Passphrase passphrase) { if (keychain.isSupported()) { try { - keychain.storePassphrase(vault.getId(), vault.getDisplayName(), passphrase, vault.getVaultSettings().needAuthenticatedUser.get()); + if (vault.getVaultSettings().needAuthenticatedUser.get()) { + keychain.storePassphraseForAuthenticatedUser(vault.getId(), vault.getDisplayName(), passphrase); + } else { + keychain.storePassphrase(vault.getId(), vault.getDisplayName(), passphrase); + } } catch (KeychainAccessException e) { LOG.error("Failed to store passphrase in system keychain.", e); } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java index 8c0c6ea24..aa627215c 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MasterkeyOptionsController.java @@ -54,6 +54,10 @@ public class MasterkeyOptionsController implements FxController { public void initialize() { needAuthenticatedUserCheckbox.selectedProperty().bindBidirectional(vault.getVaultSettings().needAuthenticatedUser); needAuthenticatedUserCheckbox.selectedProperty().addListener(this::needAuthenticatedUserCheckboxToggled); + // ToDo Remove or adjust, as soon as there are implementations for integrations-api KeychainAccessProvider:storePassphraseForAuthenticatedUser for other OSes + if (!SystemUtils.IS_OS_MAC) { + needAuthenticatedUserCheckbox.setVisible(false); + } } /** @@ -70,7 +74,11 @@ public class MasterkeyOptionsController implements FxController { if (keychain.isPassphraseStored(vaultId)) { var passphrase = keychain.loadPassphrase(vaultId); keychain.deletePassphrase(vaultId); - keychain.storePassphrase(vaultId, vault.getId(), new Passphrase(passphrase), isSet); + if (isSet) { + keychain.storePassphraseForAuthenticatedUser(vaultId, vault.getId(), new Passphrase(passphrase)); + } else { + keychain.storePassphrase(vaultId, vault.getId(), new Passphrase(passphrase)); + } } } catch (KeychainAccessException e) { LOG.error("Failed to migrate item in system keychain due to access control change.", e); diff --git a/src/test/java/org/cryptomator/common/keychain/MapKeychainAccess.java b/src/test/java/org/cryptomator/common/keychain/MapKeychainAccess.java index 73c8da522..d81fee25e 100644 --- a/src/test/java/org/cryptomator/common/keychain/MapKeychainAccess.java +++ b/src/test/java/org/cryptomator/common/keychain/MapKeychainAccess.java @@ -29,6 +29,11 @@ class MapKeychainAccess implements KeychainAccessProvider { map.put(key, pw); } + @Override + public void storePassphraseForAuthenticatedUser(String key, String displayName,CharSequence passphrase) { + storePassphrase(key, displayName, passphrase); + } + @Override public char[] loadPassphrase(String key) { return map.get(key);