1
- {-# LANGUAGE LambdaCase #-}
2
- {-# LANGUAGE OverloadedStrings #-}
3
-
4
1
module Security.Advisories.Queries
5
2
( listVersionAffectedBy
6
3
, listVersionRangeAffectedBy
@@ -9,19 +6,16 @@ module Security.Advisories.Queries
9
6
)
10
7
where
11
8
12
- import Control.Monad (forM_ )
13
- import System.Exit (exitFailure )
14
- import System.IO (stderr , hPrint )
15
-
9
+ import Control.Monad.IO.Class (MonadIO )
16
10
import Data.Text (Text )
17
- import qualified Data.Text.IO as T
18
11
import Distribution.Types.Version (Version )
19
12
import Distribution.Types.VersionInterval (asVersionIntervals )
20
13
import Distribution.Types.VersionRange (VersionRange , anyVersion , earlierVersion , intersectVersionRanges , noVersion , orLaterVersion , unionVersionRanges , withinRange )
21
14
import Validation (Validation (.. ))
22
15
23
16
import Security.Advisories.Definition
24
17
import Security.Advisories.Filesystem
18
+ import Security.Advisories.Parse
25
19
26
20
-- | Check whether a package and a version is concerned by an advisory
27
21
isVersionAffectedBy :: Text -> Version -> Advisory -> Bool
@@ -57,21 +51,15 @@ isAffectedByHelper checkWithRange queryPackageName queryVersionish =
57
51
(maybe anyVersion earlierVersion (affectedVersionRangeFixed avr))
58
52
59
53
-- | List the advisories matching a package name and a version
60
- listVersionAffectedBy :: FilePath -> Text -> Version -> IO [ Advisory ]
54
+ listVersionAffectedBy :: MonadIO m => FilePath -> Text -> Version -> m ( Validation [ ParseAdvisoryError ] [ Advisory ])
61
55
listVersionAffectedBy = listAffectedByHelper isVersionAffectedBy
62
56
63
57
-- | List the advisories matching a package name and a version range
64
- listVersionRangeAffectedBy :: FilePath -> Text -> VersionRange -> IO [ Advisory ]
58
+ listVersionRangeAffectedBy :: MonadIO m => FilePath -> Text -> VersionRange -> m ( Validation [ ParseAdvisoryError ] [ Advisory ])
65
59
listVersionRangeAffectedBy = listAffectedByHelper isVersionRangeAffectedBy
66
60
67
61
-- | Helper function for 'listVersionAffectedBy' and 'listVersionRangeAffectedBy'
68
- listAffectedByHelper :: (Text -> a -> Advisory -> Bool ) -> FilePath -> Text -> a -> IO [ Advisory ]
62
+ listAffectedByHelper :: MonadIO m => (Text -> a -> Advisory -> Bool ) -> FilePath -> Text -> a -> m ( Validation [ ParseAdvisoryError ] [ Advisory ])
69
63
listAffectedByHelper checkAffectedBy root queryPackageName queryVersionish =
70
- listAdvisories root >>= \ case
71
- Failure errors -> do
72
- T. hPutStrLn stderr " Cannot parse some advisories"
73
- forM_ errors $
74
- hPrint stderr
75
- exitFailure
76
- Success advisories ->
77
- return $ filter (checkAffectedBy queryPackageName queryVersionish) advisories
64
+ fmap (filter (checkAffectedBy queryPackageName queryVersionish)) <$>
65
+ listAdvisories root
0 commit comments