{- lat - tool to track alerts from LWN.
- Copyright (C) 2010 Magnus Therning
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, version 3 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-}
module Commands
( doCommand
) where
import System.Console.CmdArgs
import System.Directory
import Data.Version (showVersion)
import Paths_lat (version)
import qualified Commands.Distro as D
import qualified Commands.Vulns as V
import qualified Commands.ArgTypes as CAT
-- {{{1 doCommand
doCommand = do
home <- getAppUserDataDirectory "lat"
-- &= help "Linux Alert Tracker - track alerts on LWN.net" &= program "lat" &= summary ver
cmdArgs (_allCmds home) >>= _doCommand
_doCommand a@(CAT.DistroAdd {}) = D.distroAdd a
_doCommand a@(CAT.DistroList {}) = D.distroList a
_doCommand a@(CAT.VulnUpdate {}) = V.vulnUpdate a
_doCommand a@(CAT.VulnList {}) = V.vulnList a
_doCommand a@(CAT.VulnReport {}) = V.vulnReport a
-- {{{1 Command line arg definitions
_allCmds h = modes cmds &= help "Linux Alert Tracker - track alerts on LWN.net" &= program "lat" &= summary ver
where
cmds = map (\ f -> f h) [_distroAddArgs, _distroListArgs, _vulnUpdateArgs, _vulnListArgs, _vulnReportArgs]
ver = "lat v" ++ (showVersion version) ++ " Copyright 2010 Magnus Therning "
_configAttrib = help "Set dir for configuration" &= opt "~/.lat" &= typDir
_distroAddArgs h = CAT.DistroAdd
{ CAT.config = h &= _configAttrib
, CAT.name = def &= argPos 0 &= typ "NAME"
, CAT.url = def &= argPos 1 &= typ "URL"
} &= help "add a distribution"
_distroListArgs h = CAT.DistroList
{ CAT.config = h &= _configAttrib
} &= help "list distributions"
_vulnUpdateArgs h = CAT.VulnUpdate
{ CAT.config = h &= _configAttrib
, CAT.dry = def &= help "Dry run"
} &= help "update the vulnerability database"
_vulnListArgs h = CAT.VulnList
{ CAT.config = h &= _configAttrib
, CAT.typ = enum
[ CAT.Unreported &= help "List unreported issues (default)"
, CAT.Reported &= help "List reported issues"
, CAT.All &= help "List all issues"
]
, CAT.size = enum
[ CAT.Small &= help "Output format: small"
, CAT.Normal &= help "Output format: normal" &= name "n"
, CAT.Full &= help "Output format: full"
]
, CAT.nofilter = def &= help "Filter off" &= explicit &= name "nofilter"
} &= help "list known vulnerabilities"
_vulnReportArgs h = CAT.VulnReport
{ CAT.config = h &= _configAttrib
, CAT.nofilter = def &= help "Filter off" &= explicit &= name "nofilter"
} &= help "report (process) vulnerabilities"