46 lines
1.0 KiB
Haskell
46 lines
1.0 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
module Config
|
|
( parserOpts
|
|
, AppConfig(..)
|
|
) where
|
|
|
|
import Options.Applicative
|
|
import Data.Text (Text)
|
|
|
|
data AppConfig = AppConfig
|
|
{ appPort :: Int
|
|
, appDbFile :: FilePath
|
|
, appUser :: Text
|
|
, appPassHash :: Text
|
|
} deriving (Show, Eq)
|
|
|
|
appConfig :: Parser AppConfig
|
|
appConfig = AppConfig
|
|
<$> option auto
|
|
( long "port"
|
|
<> help "port to listen"
|
|
<> showDefault
|
|
<> value 8000
|
|
<> metavar "INT")
|
|
<*> strOption
|
|
( long "dbpath"
|
|
<> help "sqlite db file path"
|
|
<> showDefault
|
|
<> value "quotes.db"
|
|
<> metavar "TARGET")
|
|
<*> strOption
|
|
( long "user"
|
|
<> help "basic auth user (for writes)"
|
|
<> showDefault
|
|
<> value "root"
|
|
<> metavar "USER")
|
|
<*> strOption
|
|
( long "password"
|
|
<> help "password hash for basic auth user, generate with argon2")
|
|
|
|
parserOpts :: ParserInfo AppConfig
|
|
parserOpts = info (appConfig <**> helper)
|
|
( fullDesc
|
|
<> progDesc "Serve Quotes API"
|
|
<> header "quotes api" )
|