{- Copyright 2016 Joey Hess - - Licensed under the GNU AGPL version 3 or higher. -} module CmdLine (CmdLine(..), Mode(..), get, parse) where import Types import Options.Applicative import qualified Data.ByteString.UTF8 as BU8 data CmdLine = CmdLine { mode :: Mode , name :: Name , keytype :: KeyType , testMode :: Bool } deriving (Show) data Mode = Backup | Restore deriving (Show) parse :: Parser CmdLine parse = CmdLine <$> (backup <|> restore) <*> nameopt <*> keytypeopt <*> testmodeswitch where backup = flag' Backup ( long "backup" <> help "Store a secret key in keysafe." ) restore = flag' Restore ( long "restore" <> help "Retrieve a secret key from keysafe." ) nameopt = Name . BU8.fromString <$> strOption ( long "name" <> help "Some name that is associated with the key. Should be something you can remember when restoring it." ) keytypeopt = KeyType . BU8.fromString <$> strOption ( long "type" <> help "Type of key (eg, \"gpg\")." ) testmodeswitch = switch ( long "testmode" <> help "Avoid using expensive cryptographic operation to secure key. Use for testing only, not with real secret keys." ) get :: IO CmdLine get = execParser opts where opts = info (helper <*> parse) ( fullDesc <> header "keysafe - securely back up secret keys" )