packages feed

x509-system 1.6.3 → 1.6.4

raw patch · 2 files changed

+3/−56 lines, 2 filesdep ~x509-store

Dependency ranges changed: x509-store

Files

System/X509/Unix.hs view
@@ -16,22 +16,12 @@     ( getSystemCertificateStore     ) where -import System.Directory (getDirectoryContents, doesFileExist, doesDirectoryExist) import System.Environment (getEnv)-import System.FilePath ((</>))--import Data.List (isPrefixOf)-import Data.PEM (PEM(..), pemParseBS)-import Data.Either-import qualified Data.ByteString as B-import Data.X509 import Data.X509.CertificateStore  import Control.Applicative ((<$>))-import Control.Monad (filterM) import qualified Control.Exception as E -import Data.Char import Data.Maybe (catMaybes) import Data.Monoid (mconcat) @@ -46,54 +36,11 @@ envPathOverride :: String envPathOverride = "SYSTEM_CERTIFICATE_PATH" --- List all the path susceptible to contains a certificate in a directory------ if the parameter is not a directory, hilarity follows.-listDirectoryCerts :: FilePath -> IO [FilePath]-listDirectoryCerts path =-    getDirContents >>= filterM doesFileExist-  where-    isHashedFile s = length s == 10-                  && isDigit (s !! 9)-                  && (s !! 8) == '.'-                  && all isHexDigit (take 8 s)-    isCert x = (not $ isPrefixOf "." x) && (not $ isHashedFile x)--    getDirContents = E.catch (map (path </>) . filter isCert <$> getDirectoryContents path) emptyPaths-            where emptyPaths :: E.IOException -> IO [FilePath]-                  emptyPaths _ = return []--makeCertStore :: FilePath -> IO (Maybe CertificateStore)-makeCertStore path = do-    isDir  <- doesDirectoryExist path-    isFile <- doesFileExist path-    wrapStore <$> (if isDir then makeDirStore else if isFile then makeFileStore else return [])-  where-    wrapStore :: [SignedCertificate] -> Maybe CertificateStore-    wrapStore [] = Nothing-    wrapStore l  = Just $ makeCertificateStore l--    makeFileStore = readCertificates path-    makeDirStore  = do-        certFiles <- listDirectoryCerts path-        concat <$> mapM readCertificates certFiles-- getSystemCertificateStore :: IO CertificateStore-getSystemCertificateStore = mconcat . catMaybes <$> (getSystemPaths >>= mapM makeCertStore)+getSystemCertificateStore = mconcat . catMaybes <$> (getSystemPaths >>= mapM readCertificateStore)  getSystemPaths :: IO [FilePath] getSystemPaths = E.catch ((:[]) <$> getEnv envPathOverride) inDefault     where         inDefault :: E.IOException -> IO [FilePath]         inDefault _ = return defaultSystemPaths---- Try to read certificate from the content of a file.------ The file may contains multiple certificates-readCertificates :: FilePath -> IO [SignedCertificate]-readCertificates file = E.catch (either (const []) (rights . map getCert) . pemParseBS <$> B.readFile file) skipIOError-    where-        getCert = decodeSignedCertificate . pemContent-        skipIOError :: E.IOException -> IO [SignedCertificate]-        skipIOError _ = return []
x509-system.cabal view
@@ -1,5 +1,5 @@ Name:                x509-system-Version:             1.6.3+Version:             1.6.4 Description:         System X.509 handling License:             BSD3 License-file:        LICENSE@@ -23,7 +23,7 @@                    , process                    , pem >= 0.1 && < 0.3                    , x509 >= 1.6 && < 1.7-                   , x509-store >= 1.6 && < 1.7+                   , x509-store >= 1.6.2 && < 1.7   Exposed-modules:   System.X509                      System.X509.Unix                      System.X509.MacOS