From f74151ead49895f86257c9abfbe90c027d91d456 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 12 Aug 2016 01:04:06 -0400 Subject: option parsing --- CmdLine.hs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 CmdLine.hs (limited to 'CmdLine.hs') diff --git a/CmdLine.hs b/CmdLine.hs new file mode 100644 index 0000000..3d45d5a --- /dev/null +++ b/CmdLine.hs @@ -0,0 +1,57 @@ +{- 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" + ) -- cgit v1.2.3