credential-store 0.1.0.0 → 0.1.1
raw patch · 3 files changed
+32/−9 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ System.CredentialStore: data CredentialStore
+ System.CredentialStore: deleteCredential :: CredentialStore -> String -> IO ()
+ System.CredentialStore: getCredential :: ByteArray ba => CredentialStore -> String -> IO (Maybe ba)
+ System.CredentialStore: putCredential :: ByteArray ba => CredentialStore -> String -> ba -> IO ()
+ System.CredentialStore: withCredentialStore :: (CredentialStore -> IO a) -> IO a
Files
- credential-store.cabal +1/−1
- src/System/CredentialStore.hs +26/−3
- src/System/CredentialStore/DBusSecretService.hs +5/−5
credential-store.cabal view
@@ -1,5 +1,5 @@ name: credential-store-version: 0.1.0.0+version: 0.1.1 synopsis: Library to access secure credential storage providers description: Cross-platform library for storing secrets.
src/System/CredentialStore.hs view
@@ -1,10 +1,33 @@ {-# Language CPP #-}+{-|+Cross-platform library to access system-specific credential store.++Uses Windows CredRead/CredWrite/CredDelete API on Windows,+DBus Secret Store API with gnome-keyring or kwallet as backends on Unix.+MacOS is not supported yet.++Example usage:++@+withCredentialStore $ \store -> do+ putCredential store credentialName credentialValue+ v <- getCredential store credentialName+ deleteCredential store credentialName+@+-} module System.CredentialStore- ( module X+ (+ -- * Types+ CredentialStore+ -- * Functions+ , getCredential+ , putCredential+ , deleteCredential+ , withCredentialStore ) where #ifdef WINBUILD-import System.CredentialStore.Windows as X+import System.CredentialStore.Windows #else-import System.CredentialStore.DBusSecretService as X+import System.CredentialStore.DBusSecretService #endif
src/System/CredentialStore/DBusSecretService.hs view
@@ -24,7 +24,7 @@ import qualified Data.ByteString as BS import qualified Data.Map.Strict as M --- |Abstract context for credential store communications+-- |Abstract context for credential store communications. data CredentialStore = CredentialStore { csClient :: Client , csSession :: ObjectPath@@ -86,7 +86,7 @@ } -- |Open credential store and execute function passing it as parameter.--- Store is closed even in presence of exceptions+-- Store is closed even in presence of exceptions. withCredentialStore :: (CredentialStore -> IO a) -> IO a withCredentialStore = bracket openStore closeStore where@@ -119,7 +119,7 @@ closeStore = disconnect . csClient --- |Read named credential from store+-- |Read named credential from store. Returns 'Nothing' if credential was not found. getCredential :: ByteArray ba => CredentialStore -> String -> IO (Maybe ba) getCredential store@CredentialStore{..} name = do items <- findCredentials store name@@ -144,7 +144,7 @@ credData (_, _, v, _) = v credParam (_, p, _, _) = p --- |Write named credential to store, overwriting existing one+-- |Write named credential to store, overwriting existing one. putCredential :: ByteArray ba => CredentialStore -> String -> ba -> IO () putCredential CredentialStore{..} name value = do (cred, iv) <- encryptCredential csCipher value@@ -169,7 +169,7 @@ [ path, _ ] | Just p <- fromVariant path -> when (p == noObject) $ throw (clientError "prompt required") body -> throw $ clientError $ "invalid CreateItem response" ++ show body --- |Delete named credential from store+-- |Delete named credential from store. deleteCredential :: CredentialStore -> String -> IO () deleteCredential store@CredentialStore{..} name = do items <- findCredentials store name