smith-cli-0.0.1: main/smith.hs
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative ((<|>), some)
import qualified Options.Applicative as Options
import qualified Smith.Cli.Command.Issue as Issue
import Smith.Cli.Data.Program (Program (..))
import qualified Smith.Cli.Dispatch as Dispatch
import qualified Smith.Cli.Error as Error
import qualified Smith.Cli.Parser as Parser
import qualified Smith.Client as Smith
import Smith.Client.Data.CertificateRequest (Principal (..))
import Smith.Client.Data.Environment (Environment (..))
import qualified System.Exit as Exit
data Command =
Command Environment [Principal] (Maybe Program)
deriving (Eq, Ord, Show)
-- |
-- The 'smith' executable, designed for smith users who
-- want to request access to servers.
--
main :: IO ()
main =
Dispatch.dispatch parser >>= \a ->
case a of
Command environment principals program -> do
smith <- Error.runOrFlailT Smith.renderSmithConfigureError $
Smith.configureT
Error.runOrFlailT Issue.renderIssueError $
Issue.issue smith environment principals program
Exit.exitSuccess
-- FUTURE default to current user, not root?
parser :: Options.Parser Command
parser =
Command
<$> Parser.environment
<*> ((some Parser.principal) <|> pure [Principal "root"])
<*> Options.optional Parser.program