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 +1/−54
- x509-system.cabal +2/−2
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