From 72e52df4e0712582f4fcab34ae48c956da186b25 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 30 Aug 2016 19:12:20 +0200 Subject: [PATCH] implemented keychain access on OS X --- main/keychain/pom.xml | 4 +++ .../keychain/MacSystemKeychainAccess.java | 26 ++++++++----------- main/pom.xml | 8 ++++++ main/ui/pom.xml | 1 - 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/main/keychain/pom.xml b/main/keychain/pom.xml index 4fab0ebc6..1983d5873 100644 --- a/main/keychain/pom.xml +++ b/main/keychain/pom.xml @@ -18,6 +18,10 @@ bcprov-jdk15on 1.54 + + org.cryptomator + jni + diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java b/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java index 55a5e6ce9..465a17ec1 100644 --- a/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java +++ b/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java @@ -1,45 +1,41 @@ package org.cryptomator.keychain; -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.security.KeyStore; +import java.nio.CharBuffer; import javax.inject.Inject; import javax.inject.Singleton; import org.apache.commons.lang3.SystemUtils; +import org.cryptomator.jni.JniModule; +import org.cryptomator.jni.MacKeychainAccess; @Singleton class MacSystemKeychainAccess implements KeychainAccessStrategy { - private final KeyStore keyStore; + private final MacKeychainAccess keychain; @Inject public MacSystemKeychainAccess() { - KeyStore ks; - try { - ks = KeyStore.getInstance("KeychainStore", "Apple"); - ks.load(null); - } catch (GeneralSecurityException | IOException e) { - ks = null; + if (JniModule.macFunctions().isPresent()) { + this.keychain = JniModule.macFunctions().get().getKeychainAccess(); + } else { + this.keychain = null; } - this.keyStore = ks; } @Override public void storePassphrase(String key, CharSequence passphrase) { - // TODO Auto-generated method stub + keychain.storePassword(key, passphrase); } @Override public CharSequence loadPassphrase(String key) { - // TODO Auto-generated method stub - return null; + return CharBuffer.wrap(keychain.loadPassword(key)); } @Override public boolean isSupported() { - return SystemUtils.IS_OS_MAC_OSX && keyStore != null; + return SystemUtils.IS_OS_MAC_OSX && keychain != null; } } diff --git a/main/pom.xml b/main/pom.xml index ef7cf60fb..e4ddb32c9 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -27,6 +27,7 @@ UTF-8 + 1.0.0-SNAPSHOT 2.1 1.7.7 4.12 @@ -122,6 +123,13 @@ ui ${project.version} + + + + org.cryptomator + jni + ${cryptomator.jni.version} + diff --git a/main/ui/pom.xml b/main/ui/pom.xml index 6ceb70390..885a875bc 100644 --- a/main/ui/pom.xml +++ b/main/ui/pom.xml @@ -57,7 +57,6 @@ org.cryptomator jni - 1.0.0-SNAPSHOT