{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-unused-imports#-}
module Data.KeyStore.CLI.Command
( CLI(..)
, Command(..)
, parseCLI
, parseCLI'
, cliInfo
, cliParser
, paramsParser
, runParse
)
where
import Data.KeyStore.KS.Opt
import Data.KeyStore.Types
import Data.KeyStore.IO.IC
import Data.Monoid
import Data.String
import Text.KSRegex
import qualified Data.Text as T
import Options.Applicative
import System.Environment
import System.Exit
import System.IO
data CLI =
CLI
{ CLI -> CtxParams
cli_params :: CtxParams
, CLI -> Command
cli_command :: Command
}
deriving (Int -> CLI -> ShowS
[CLI] -> ShowS
CLI -> String
(Int -> CLI -> ShowS)
-> (CLI -> String) -> ([CLI] -> ShowS) -> Show CLI
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CLI] -> ShowS
$cshowList :: [CLI] -> ShowS
show :: CLI -> String
$cshow :: CLI -> String
showsPrec :: Int -> CLI -> ShowS
$cshowsPrec :: Int -> CLI -> ShowS
Show)
data Command
= Version
| Keystore
| Initialise FilePath
| UpdateSettings FilePath
| ListSettings
| ListSettingOpts (Maybe OptEnum)
| AddTrigger TriggerID Pattern FilePath
| RmvTrigger TriggerID
| ListTriggers
| Create Name Comment Identity (Maybe EnvVar) (Maybe FilePath) [Safeguard]
| CreateKeyPair Name Comment Identity [Safeguard]
| Secure Name (Maybe FilePath) [Safeguard]
| List
| Info [Name]
| ShowIdentity Bool Name
| Bool Name
| ShowDate Bool Name
| ShowHash Bool Name
| Bool Name
| ShowHashSalt Bool Name
| ShowPublic Bool Name
| ShowSecret Bool Name
| Encrypt Name FilePath FilePath
| Decrypt FilePath FilePath
| Sign Name FilePath FilePath
| Verify FilePath FilePath
| Delete [Name]
deriving (Int -> Command -> ShowS
[Command] -> ShowS
Command -> String
(Int -> Command -> ShowS)
-> (Command -> String) -> ([Command] -> ShowS) -> Show Command
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Command] -> ShowS
$cshowList :: [Command] -> ShowS
show :: Command -> String
$cshow :: Command -> String
showsPrec :: Int -> Command -> ShowS
$cshowsPrec :: Int -> Command -> ShowS
Show)
parseCLI :: IO CLI
parseCLI :: IO CLI
parseCLI = IO [String]
getArgs IO [String] -> ([String] -> IO CLI) -> IO CLI
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [String] -> IO CLI
parseCLI'
parseCLI' :: [String] -> IO CLI
parseCLI' :: [String] -> IO CLI
parseCLI' = ParserInfo CLI -> [String] -> IO CLI
forall a. ParserInfo a -> [String] -> IO a
runParse ParserInfo CLI
cliInfo
cliInfo :: ParserInfo CLI
cliInfo :: ParserInfo CLI
cliInfo =
Parser CLI -> InfoMod CLI -> ParserInfo CLI
forall a. Parser a -> InfoMod a -> ParserInfo a
info (Parser (CLI -> CLI)
forall a. Parser (a -> a)
helper Parser (CLI -> CLI) -> Parser CLI -> Parser CLI
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser CLI
cliParser)
( InfoMod CLI
forall a. InfoMod a
fullDesc
InfoMod CLI -> InfoMod CLI -> InfoMod CLI
forall a. Semigroup a => a -> a -> a
<> String -> InfoMod CLI
forall a. String -> InfoMod a
progDesc String
"for storing secret things"
InfoMod CLI -> InfoMod CLI -> InfoMod CLI
forall a. Semigroup a => a -> a -> a
<> String -> InfoMod CLI
forall a. String -> InfoMod a
header String
"ks - key store management"
InfoMod CLI -> InfoMod CLI -> InfoMod CLI
forall a. Semigroup a => a -> a -> a
<> String -> InfoMod CLI
forall a. String -> InfoMod a
footer String
"'ks COMMAND --help' to get help on each command")
cliParser :: Parser CLI
cliParser :: Parser CLI
cliParser =
CtxParams -> Command -> CLI
CLI
(CtxParams -> Command -> CLI)
-> Parser CtxParams -> Parser (Command -> CLI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser CtxParams
paramsParser
Parser (Command -> CLI) -> Parser Command -> Parser CLI
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Command
p_command
paramsParser :: Parser CtxParams
paramsParser :: Parser CtxParams
paramsParser =
Maybe String -> Maybe Bool -> Maybe Bool -> CtxParams
CtxParams
(Maybe String -> Maybe Bool -> Maybe Bool -> CtxParams)
-> Parser (Maybe String)
-> Parser (Maybe Bool -> Maybe Bool -> CtxParams)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser String -> Parser (Maybe String)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser String
p_store
Parser (Maybe Bool -> Maybe Bool -> CtxParams)
-> Parser (Maybe Bool) -> Parser (Maybe Bool -> CtxParams)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Bool -> Parser (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Bool
p_debug_flg Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Bool
p_no_debug_flg )
Parser (Maybe Bool -> CtxParams)
-> Parser (Maybe Bool) -> Parser CtxParams
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Bool -> Parser (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Bool
p_readonly_flg Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Bool
p_writeback_flg)
p_store :: Parser FilePath
p_store :: Parser String
p_store =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
(Mod OptionFields String -> Parser String)
-> Mod OptionFields String -> Parser String
forall a b. (a -> b) -> a -> b
$ String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"store"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"FILE"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"the file containing the key store"
p_debug_flg :: Parser Bool
p_debug_flg :: Parser Bool
p_debug_flg =
Bool -> Mod FlagFields Bool -> Parser Bool
forall a. a -> Mod FlagFields a -> Parser a
flag' Bool
True
(Mod FlagFields Bool -> Parser Bool)
-> Mod FlagFields Bool -> Parser Bool
forall a b. (a -> b) -> a -> b
$ String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"debug"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'd'
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"enable debug logging"
p_no_debug_flg :: Parser Bool
p_no_debug_flg :: Parser Bool
p_no_debug_flg =
Bool -> Mod FlagFields Bool -> Parser Bool
forall a. a -> Mod FlagFields a -> Parser a
flag' Bool
False
(Mod FlagFields Bool -> Parser Bool)
-> Mod FlagFields Bool -> Parser Bool
forall a b. (a -> b) -> a -> b
$ String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"no-debug"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'q'
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"disable debug logging"
p_readonly_flg :: Parser Bool
p_readonly_flg :: Parser Bool
p_readonly_flg =
Bool -> Mod FlagFields Bool -> Parser Bool
forall a. a -> Mod FlagFields a -> Parser a
flag' Bool
True
(Mod FlagFields Bool -> Parser Bool)
-> Mod FlagFields Bool -> Parser Bool
forall a b. (a -> b) -> a -> b
$ String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"readonly"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'r'
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"disable updating of keystore"
p_writeback_flg :: Parser Bool
p_writeback_flg :: Parser Bool
p_writeback_flg =
Bool -> Mod FlagFields Bool -> Parser Bool
forall a. a -> Mod FlagFields a -> Parser a
flag' Bool
False
(Mod FlagFields Bool -> Parser Bool)
-> Mod FlagFields Bool -> Parser Bool
forall a b. (a -> b) -> a -> b
$ String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"writeback"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'w'
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"write back the keystore"
p_command :: Parser Command
p_command :: Parser Command
p_command =
Mod CommandFields Command -> Parser Command
forall a. Mod CommandFields a -> Parser a
subparser
(Mod CommandFields Command -> Parser Command)
-> Mod CommandFields Command -> Parser Command
forall a b. (a -> b) -> a -> b
$ String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"version" ParserInfo Command
pi_version
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"keystore" ParserInfo Command
pi_keystore
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"initialise" ParserInfo Command
pi_initialise
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"update-settings" ParserInfo Command
pi_update_settings
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"list-settings" ParserInfo Command
pi_list_settings
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"list-setting-opts" ParserInfo Command
pi_list_setting_opts
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"add-trigger" ParserInfo Command
pi_add_trigger
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"rmv-trigger" ParserInfo Command
pi_rmv_trigger
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"list-triggers" ParserInfo Command
pi_list_triggers
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"create" ParserInfo Command
pi_create
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"create-key-pair" ParserInfo Command
pi_create_key_pair
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"secure" ParserInfo Command
pi_secure
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"list" ParserInfo Command
pi_list
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"info" ParserInfo Command
pi_info
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-identity" ParserInfo Command
pi_show_identity
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-comment" ParserInfo Command
pi_show_comment
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-date" ParserInfo Command
pi_show_date
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-hash" ParserInfo Command
pi_show_hash
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-hash-comment" ParserInfo Command
pi_show_hash_comment
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-hash-salt" ParserInfo Command
pi_show_hash_salt
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-public" ParserInfo Command
pi_show_public
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"show-secret" ParserInfo Command
pi_show_secret
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"encrypt" ParserInfo Command
pi_encrypt
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"decrypt" ParserInfo Command
pi_decrypt
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"sign" ParserInfo Command
pi_sign
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"verify" ParserInfo Command
pi_verify
Mod CommandFields Command
-> Mod CommandFields Command -> Mod CommandFields Command
forall a. Semigroup a => a -> a -> a
<> String -> ParserInfo Command -> Mod CommandFields Command
forall a. String -> ParserInfo a -> Mod CommandFields a
command String
"delete" ParserInfo Command
pi_delete
pi_version
, pi_keystore
, pi_initialise
, pi_update_settings
, pi_list_settings
, pi_list_setting_opts
, pi_add_trigger
, pi_rmv_trigger
, pi_list_triggers
, pi_create
, pi_create_key_pair
, pi_secure
, pi_list
, pi_info
, pi_show_identity
, pi_show_comment
, pi_show_date
, pi_show_hash
, pi_show_hash_comment
, pi_show_hash_salt
, pi_show_public
, pi_show_secret
, pi_encrypt
, pi_decrypt
, pi_sign
, pi_verify
, pi_delete :: ParserInfo Command
pi_version :: ParserInfo Command
pi_version =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Command -> Parser Command
forall (f :: * -> *) a. Applicative f => a -> f a
pure Command
Version)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"report the version of this package")
pi_keystore :: ParserInfo Command
pi_keystore =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Command -> Parser Command
forall (f :: * -> *) a. Applicative f => a -> f a
pure Command
Keystore)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"list the details of the keystore")
pi_initialise :: ParserInfo Command
pi_initialise =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(String -> Command
Initialise
(String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser String
p_file String
"FILE" String
"home of the new keystore"))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"initialise a new key store")
pi_update_settings :: ParserInfo Command
pi_update_settings =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(String -> Command
UpdateSettings
(String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser String
p_file String
"JSON-SETTINGS-FILE" String
"new settings"))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"update the keystore settings")
pi_list_settings :: ParserInfo Command
pi_list_settings =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(Command -> Parser Command
forall (f :: * -> *) a. Applicative f => a -> f a
pure Command
ListSettings))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"dump the keystore settings on stdout")
pi_list_setting_opts :: ParserInfo Command
pi_list_setting_opts =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(Maybe OptEnum -> Command
ListSettingOpts
(Maybe OptEnum -> Command)
-> Parser (Maybe OptEnum) -> Parser Command
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser OptEnum -> Parser (Maybe OptEnum)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser OptEnum
p_opt))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"list the settings options")
pi_add_trigger :: ParserInfo Command
pi_add_trigger =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(TriggerID -> Pattern -> String -> Command
AddTrigger
(TriggerID -> Pattern -> String -> Command)
-> Parser TriggerID -> Parser (Pattern -> String -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser TriggerID
p_trigger_id
Parser (Pattern -> String -> Command)
-> Parser Pattern -> Parser (String -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Pattern
p_pattern
Parser (String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"JSON-SETTINGS-FILE" String
"conditional settings"))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"add trigger")
pi_rmv_trigger :: ParserInfo Command
pi_rmv_trigger =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(TriggerID -> Command
RmvTrigger
(TriggerID -> Command) -> Parser TriggerID -> Parser Command
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser TriggerID
p_trigger_id))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"remove trigger")
pi_list_triggers :: ParserInfo Command
pi_list_triggers =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(Command -> Parser Command
forall (f :: * -> *) a. Applicative f => a -> f a
pure Command
ListTriggers))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"remove trigger")
pi_create :: ParserInfo Command
pi_create =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Parser (Command -> Command)
forall a. Parser (a -> a)
helper Parser (Command -> Command) -> Parser Command -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(Name
-> Comment
-> Identity
-> Maybe EnvVar
-> Maybe String
-> [Safeguard]
-> Command
Create
(Name
-> Comment
-> Identity
-> Maybe EnvVar
-> Maybe String
-> [Safeguard]
-> Command)
-> Parser Name
-> Parser
(Comment
-> Identity
-> Maybe EnvVar
-> Maybe String
-> [Safeguard]
-> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name
p_name
Parser
(Comment
-> Identity
-> Maybe EnvVar
-> Maybe String
-> [Safeguard]
-> Command)
-> Parser Comment
-> Parser
(Identity
-> Maybe EnvVar -> Maybe String -> [Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Comment
p_comment
Parser
(Identity
-> Maybe EnvVar -> Maybe String -> [Safeguard] -> Command)
-> Parser Identity
-> Parser (Maybe EnvVar -> Maybe String -> [Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Identity
p_identity
Parser (Maybe EnvVar -> Maybe String -> [Safeguard] -> Command)
-> Parser (Maybe EnvVar)
-> Parser (Maybe String -> [Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser EnvVar -> Parser (Maybe EnvVar)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser EnvVar
p_env_var
Parser (Maybe String -> [Safeguard] -> Command)
-> Parser (Maybe String) -> Parser ([Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String -> Parser (Maybe String)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser String
p_key_text
Parser ([Safeguard] -> Command)
-> Parser [Safeguard] -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Safeguard -> Parser [Safeguard]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Safeguard
p_safeguard))
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"create a key")
pi_create_key_pair :: ParserInfo Command
pi_create_key_pair =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Name -> Comment -> Identity -> [Safeguard] -> Command
CreateKeyPair
(Name -> Comment -> Identity -> [Safeguard] -> Command)
-> Parser Name
-> Parser (Comment -> Identity -> [Safeguard] -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name
p_name
Parser (Comment -> Identity -> [Safeguard] -> Command)
-> Parser Comment -> Parser (Identity -> [Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Comment
p_comment
Parser (Identity -> [Safeguard] -> Command)
-> Parser Identity -> Parser ([Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Identity
p_identity
Parser ([Safeguard] -> Command)
-> Parser [Safeguard] -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Safeguard -> Parser [Safeguard]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Safeguard
p_safeguard)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"create an RSA key pair")
pi_secure :: ParserInfo Command
pi_secure =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Name -> Maybe String -> [Safeguard] -> Command
Secure
(Name -> Maybe String -> [Safeguard] -> Command)
-> Parser Name -> Parser (Maybe String -> [Safeguard] -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name
p_name
Parser (Maybe String -> [Safeguard] -> Command)
-> Parser (Maybe String) -> Parser ([Safeguard] -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String -> Parser (Maybe String)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser String
p_key_text
Parser ([Safeguard] -> Command)
-> Parser [Safeguard] -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Safeguard -> Parser [Safeguard]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Safeguard
p_safeguard)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"insert an encrypted copy of the named secret key")
pi_list :: ParserInfo Command
pi_list =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Command -> Parser Command
forall (f :: * -> *) a. Applicative f => a -> f a
pure Command
List)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"list individual keys or all keys in the store")
pi_info :: ParserInfo Command
pi_info =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
([Name] -> Command
Info
([Name] -> Command) -> Parser [Name] -> Parser Command
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name -> Parser [Name]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"list individual keys or all keys in the store")
pi_show_identity :: ParserInfo Command
pi_show_identity =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowIdentity
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the hash of the secret text")
=
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowComment
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the hash of the secret text")
pi_show_date :: ParserInfo Command
pi_show_date =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowDate
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the hash of the secret text")
pi_show_hash :: ParserInfo Command
pi_show_hash =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowHash
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the hash of the secret text")
=
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowHashComment
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the hash of the secret text")
pi_show_hash_salt :: ParserInfo Command
pi_show_hash_salt =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowHashSalt
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the hash of the secret text")
pi_show_public :: ParserInfo Command
pi_show_public =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowPublic
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the public key (DER format)")
pi_show_secret :: ParserInfo Command
pi_show_secret =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Bool -> Name -> Command
ShowSecret
(Bool -> Name -> Command)
-> Parser Bool -> Parser (Name -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Bool
p_armour
Parser (Name -> Command) -> Parser Name -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"show the secret text")
pi_encrypt :: ParserInfo Command
pi_encrypt =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Name -> String -> String -> Command
Encrypt
(Name -> String -> String -> Command)
-> Parser Name -> Parser (String -> String -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name
p_name
Parser (String -> String -> Command)
-> Parser String -> Parser (String -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"INPUT-FILE" String
"file to encrypt"
Parser (String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"OUTPUT-FILE" String
"encrypted file")
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"encrypt a file with a named public key")
pi_decrypt :: ParserInfo Command
pi_decrypt =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(String -> String -> Command
Decrypt
(String -> String -> Command)
-> Parser String -> Parser (String -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser String
p_file String
"INPUT-FILE" String
"file to decrypt"
Parser (String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"OUTPUT-FILE" String
"decrypted file")
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"decrypt a file with the private key")
pi_sign :: ParserInfo Command
pi_sign =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(Name -> String -> String -> Command
Sign
(Name -> String -> String -> Command)
-> Parser Name -> Parser (String -> String -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name
p_name
Parser (String -> String -> Command)
-> Parser String -> Parser (String -> Command)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"INPUT-FILE" String
"file to sign"
Parser (String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"OUTPUT-FILE" String
"file to place the signature")
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"sign a file with a named private key")
pi_verify :: ParserInfo Command
pi_verify =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
(String -> String -> Command
Verify
(String -> String -> Command)
-> Parser String -> Parser (String -> Command)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser String
p_file String
"INPUT-FILE" String
"file that was signed"
Parser (String -> Command) -> Parser String -> Parser Command
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> String -> Parser String
p_file String
"SIGNATURE-FILE" String
"signature to verify")
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"verify a file with the public key")
pi_delete :: ParserInfo Command
pi_delete =
Parser Command -> InfoMod Command -> ParserInfo Command
forall a. Parser a -> InfoMod a -> ParserInfo a
h_info
([Name] -> Command
Delete
([Name] -> Command) -> Parser [Name] -> Parser Command
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Name -> Parser [Name]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Name
p_name)
(String -> InfoMod Command
forall a. String -> InfoMod a
progDesc String
"delete one or more (unused) keys")
p_trigger_id :: Parser TriggerID
p_trigger_id :: Parser TriggerID
p_trigger_id =
ReadM TriggerID -> Mod ArgumentFields TriggerID -> Parser TriggerID
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String TriggerID) -> ReadM TriggerID
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String TriggerID) -> ReadM TriggerID)
-> (String -> Either String TriggerID) -> ReadM TriggerID
forall a b. (a -> b) -> a -> b
$ TriggerID -> Either String TriggerID
forall a b. b -> Either a b
Right (TriggerID -> Either String TriggerID)
-> (String -> TriggerID) -> String -> Either String TriggerID
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> TriggerID
TriggerID (Text -> TriggerID) -> (String -> Text) -> String -> TriggerID
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack)
(Mod ArgumentFields TriggerID -> Parser TriggerID)
-> Mod ArgumentFields TriggerID -> Parser TriggerID
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields TriggerID
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"TRIGGER"
Mod ArgumentFields TriggerID
-> Mod ArgumentFields TriggerID -> Mod ArgumentFields TriggerID
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields TriggerID
forall (f :: * -> *) a. String -> Mod f a
help String
"name of the triggered settings"
p_pattern :: Parser Pattern
p_pattern :: Parser Pattern
p_pattern =
ReadM Pattern -> Mod ArgumentFields Pattern -> Parser Pattern
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String Pattern) -> ReadM Pattern
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String Pattern) -> ReadM Pattern)
-> (String -> Either String Pattern) -> ReadM Pattern
forall a b. (a -> b) -> a -> b
$ Pattern -> Either String Pattern
forall a b. b -> Either a b
Right (Pattern -> Either String Pattern)
-> (String -> Pattern) -> String -> Either String Pattern
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Pattern
mk)
(Mod ArgumentFields Pattern -> Parser Pattern)
-> Mod ArgumentFields Pattern -> Parser Pattern
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields Pattern
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"REGEX"
Mod ArgumentFields Pattern
-> Mod ArgumentFields Pattern -> Mod ArgumentFields Pattern
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields Pattern
forall (f :: * -> *) a. String -> Mod f a
help String
"POSIX regular expression for selecting matching keys"
where
mk :: String -> Pattern
mk String
s = String -> Regex -> Pattern
Pattern String
s (Regex -> Pattern) -> Regex -> Pattern
forall a b. (a -> b) -> a -> b
$ String -> Regex
mkRegex String
s
p_name :: Parser Name
p_name :: Parser Name
p_name =
ReadM Name -> Mod ArgumentFields Name -> Parser Name
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String Name) -> ReadM Name
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String Name) -> ReadM Name)
-> (String -> Either String Name) -> ReadM Name
forall a b. (a -> b) -> a -> b
$ (Reason -> Either String Name)
-> (Name -> Either String Name)
-> Either Reason Name
-> Either String Name
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (String -> Either String Name
forall a b. a -> Either a b
Left (String -> Either String Name)
-> (Reason -> String) -> Reason -> Either String Name
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Reason -> String
showReason) Name -> Either String Name
forall a b. b -> Either a b
Right (Either Reason Name -> Either String Name)
-> (String -> Either Reason Name) -> String -> Either String Name
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either Reason Name
name)
(Mod ArgumentFields Name -> Parser Name)
-> Mod ArgumentFields Name -> Parser Name
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields Name
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"NAME"
Mod ArgumentFields Name
-> Mod ArgumentFields Name -> Mod ArgumentFields Name
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields Name
forall (f :: * -> *) a. String -> Mod f a
help String
"name of the key"
p_comment :: Parser Comment
=
ReadM Comment -> Mod ArgumentFields Comment -> Parser Comment
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String Comment) -> ReadM Comment
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String Comment) -> ReadM Comment)
-> (String -> Either String Comment) -> ReadM Comment
forall a b. (a -> b) -> a -> b
$ Comment -> Either String Comment
forall a b. b -> Either a b
Right (Comment -> Either String Comment)
-> (String -> Comment) -> String -> Either String Comment
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Comment
Comment (Text -> Comment) -> (String -> Text) -> String -> Comment
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack)
(Mod ArgumentFields Comment -> Parser Comment)
-> Mod ArgumentFields Comment -> Parser Comment
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields Comment
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"COMMENT"
Mod ArgumentFields Comment
-> Mod ArgumentFields Comment -> Mod ArgumentFields Comment
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields Comment
forall (f :: * -> *) a. String -> Mod f a
help String
"comment text"
p_identity :: Parser Identity
p_identity :: Parser Identity
p_identity = (Maybe Identity -> Identity)
-> Parser (Maybe Identity) -> Parser Identity
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Identity -> (Identity -> Identity) -> Maybe Identity -> Identity
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Identity
"" Identity -> Identity
forall a. a -> a
id) (Parser (Maybe Identity) -> Parser Identity)
-> Parser (Maybe Identity) -> Parser Identity
forall a b. (a -> b) -> a -> b
$ Parser Identity -> Parser (Maybe Identity)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Identity -> Parser (Maybe Identity))
-> Parser Identity -> Parser (Maybe Identity)
forall a b. (a -> b) -> a -> b
$
ReadM Identity -> Mod ArgumentFields Identity -> Parser Identity
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String Identity) -> ReadM Identity
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String Identity) -> ReadM Identity)
-> (String -> Either String Identity) -> ReadM Identity
forall a b. (a -> b) -> a -> b
$ Identity -> Either String Identity
forall a b. b -> Either a b
Right (Identity -> Either String Identity)
-> (String -> Identity) -> String -> Either String Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Identity
Identity (Text -> Identity) -> (String -> Text) -> String -> Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack)
(Mod ArgumentFields Identity -> Parser Identity)
-> Mod ArgumentFields Identity -> Parser Identity
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields Identity
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"KEY-IDENTITY"
Mod ArgumentFields Identity
-> Mod ArgumentFields Identity -> Mod ArgumentFields Identity
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields Identity
forall (f :: * -> *) a. String -> Mod f a
help String
"identity of the key"
p_env_var :: Parser EnvVar
p_env_var :: Parser EnvVar
p_env_var =
ReadM EnvVar -> Mod ArgumentFields EnvVar -> Parser EnvVar
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String EnvVar) -> ReadM EnvVar
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String EnvVar) -> ReadM EnvVar)
-> (String -> Either String EnvVar) -> ReadM EnvVar
forall a b. (a -> b) -> a -> b
$ EnvVar -> Either String EnvVar
forall a b. b -> Either a b
Right (EnvVar -> Either String EnvVar)
-> (String -> EnvVar) -> String -> Either String EnvVar
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> EnvVar
forall a. IsString a => String -> a
fromString)
(Mod ArgumentFields EnvVar -> Parser EnvVar)
-> Mod ArgumentFields EnvVar -> Parser EnvVar
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields EnvVar
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"ENV-VAR"
Mod ArgumentFields EnvVar
-> Mod ArgumentFields EnvVar -> Mod ArgumentFields EnvVar
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields EnvVar
forall (f :: * -> *) a. String -> Mod f a
help String
"environment variable to hold the key's value"
p_safeguard :: Parser Safeguard
p_safeguard :: Parser Safeguard
p_safeguard =
ReadM Safeguard -> Mod OptionFields Safeguard -> Parser Safeguard
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ((String -> Either String Safeguard) -> ReadM Safeguard
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String Safeguard) -> ReadM Safeguard)
-> (String -> Either String Safeguard) -> ReadM Safeguard
forall a b. (a -> b) -> a -> b
$ (Reason -> Either String Safeguard)
-> (Safeguard -> Either String Safeguard)
-> Either Reason Safeguard
-> Either String Safeguard
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (String -> Either String Safeguard
forall a b. a -> Either a b
Left (String -> Either String Safeguard)
-> (Reason -> String) -> Reason -> Either String Safeguard
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Reason -> String
showReason) Safeguard -> Either String Safeguard
forall a b. b -> Either a b
Right (Either Reason Safeguard -> Either String Safeguard)
-> (String -> Either Reason Safeguard)
-> String
-> Either String Safeguard
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either Reason Safeguard
parseSafeguard)
(Mod OptionFields Safeguard -> Parser Safeguard)
-> Mod OptionFields Safeguard -> Parser Safeguard
forall a b. (a -> b) -> a -> b
$ String -> Mod OptionFields Safeguard
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"safeguard"
Mod OptionFields Safeguard
-> Mod OptionFields Safeguard -> Mod OptionFields Safeguard
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Safeguard
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"SAFEGUARD"
Mod OptionFields Safeguard
-> Mod OptionFields Safeguard -> Mod OptionFields Safeguard
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Safeguard
forall (f :: * -> *) a. String -> Mod f a
help String
"keys used to encrypt the secret key"
p_key_text :: Parser FilePath
p_key_text :: Parser String
p_key_text =
Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
(Mod OptionFields String -> Parser String)
-> Mod OptionFields String -> Parser String
forall a b. (a -> b) -> a -> b
$ String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"key-file"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"FILE"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"secret key file"
p_file :: String -> String -> Parser FilePath
p_file :: String -> String -> Parser String
p_file String
mtv String
hlp =
ReadM String -> Mod ArgumentFields String -> Parser String
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ReadM String
forall s. IsString s => ReadM s
str
(Mod ArgumentFields String -> Parser String)
-> Mod ArgumentFields String -> Parser String
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
mtv
Mod ArgumentFields String
-> Mod ArgumentFields String -> Mod ArgumentFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields String
forall (f :: * -> *) a. String -> Mod f a
help String
hlp
p_armour :: Parser Bool
p_armour :: Parser Bool
p_armour =
Mod FlagFields Bool -> Parser Bool
switch
(Mod FlagFields Bool -> Parser Bool)
-> Mod FlagFields Bool -> Parser Bool
forall a b. (a -> b) -> a -> b
$ String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"base-64"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"base-64 encode the result"
p_opt :: Parser OptEnum
p_opt :: Parser OptEnum
p_opt =
ReadM OptEnum -> Mod ArgumentFields OptEnum -> Parser OptEnum
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Either String OptEnum) -> ReadM OptEnum
forall a. (String -> Either String a) -> ReadM a
eitherReader ((String -> Either String OptEnum) -> ReadM OptEnum)
-> (String -> Either String OptEnum) -> ReadM OptEnum
forall a b. (a -> b) -> a -> b
$ Either String OptEnum
-> (OptEnum -> Either String OptEnum)
-> Maybe OptEnum
-> Either String OptEnum
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Either String OptEnum
forall a b. a -> Either a b
Left String
"bad SETTING-OPT") OptEnum -> Either String OptEnum
forall a b. b -> Either a b
Right (Maybe OptEnum -> Either String OptEnum)
-> (String -> Maybe OptEnum) -> String -> Either String OptEnum
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Maybe OptEnum
parseOpt (Text -> Maybe OptEnum)
-> (String -> Text) -> String -> Maybe OptEnum
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack)
(Mod ArgumentFields OptEnum -> Parser OptEnum)
-> Mod ArgumentFields OptEnum -> Parser OptEnum
forall a b. (a -> b) -> a -> b
$ String -> Mod ArgumentFields OptEnum
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"SETTING-OPT"
Mod ArgumentFields OptEnum
-> Mod ArgumentFields OptEnum -> Mod ArgumentFields OptEnum
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields OptEnum
forall (f :: * -> *) a. String -> Mod f a
help String
"name of a keystore setting option"
h_info :: Parser a -> InfoMod a -> ParserInfo a
h_info :: Parser a -> InfoMod a -> ParserInfo a
h_info Parser a
pr = Parser a -> InfoMod a -> ParserInfo a
forall a. Parser a -> InfoMod a -> ParserInfo a
info (Parser (a -> a)
forall a. Parser (a -> a)
helper Parser (a -> a) -> Parser a -> Parser a
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser a
pr)
runParse :: ParserInfo a -> [String] -> IO a
runParse :: ParserInfo a -> [String] -> IO a
runParse ParserInfo a
pinfo [String]
args =
case ParserPrefs -> ParserInfo a -> [String] -> ParserResult a
forall a. ParserPrefs -> ParserInfo a -> [String] -> ParserResult a
execParserPure (PrefsMod -> ParserPrefs
prefs PrefsMod
forall m. Monoid m => m
idm) ParserInfo a
pinfo [String]
args of
Success a
a -> a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return a
a
Failure ParserFailure ParserHelp
failure -> do
String
progn <- IO String
getProgName
let (ParserHelp
msg, ExitCode
exit, Int
_) = ParserFailure ParserHelp -> String -> (ParserHelp, ExitCode, Int)
forall h. ParserFailure h -> String -> (h, ExitCode, Int)
execFailure ParserFailure ParserHelp
failure String
progn
case ExitCode
exit of
ExitCode
ExitSuccess -> String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ ParserHelp -> String
forall a. Show a => a -> String
show ParserHelp
msg
ExitCode
_ -> Handle -> String -> IO ()
hPutStrLn Handle
stderr (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ ParserHelp -> String
forall a. Show a => a -> String
show ParserHelp
msg
ExitCode -> IO a
forall a. ExitCode -> IO a
exitWith ExitCode
exit
CompletionInvoked CompletionResult
compl -> do
String
progn <- IO String
getProgName
String
msg <- CompletionResult -> String -> IO String
execCompletion CompletionResult
compl String
progn
String -> IO ()
putStr String
msg
ExitCode -> IO a
forall a. ExitCode -> IO a
exitWith ExitCode
ExitSuccess