{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Main (
main
) where
import Data.Maybe (fromJust)
import Data.Version (showVersion)
import Paths_sproxy_web (getDataDir, version) -- from cabal
import System.Environment (getArgs)
import Text.InterpolatedString.Perl6 (qc)
import qualified System.Console.Docopt.NoTH as O
import Server (server)
usage :: IO String
usage = do
dataDir <- getDataDir
return $
"sproxy-web " ++ showVersion version ++
" web interface to the sproxy database" ++ [qc|
Usage:
sproxy-web [options]
Options:
-c, --connstr=CONNSTR PostgreSQL connection string [default: dbname=sproxy]
-d, --datadir=DIR Data directory including static files [default: {dataDir}]
-s, --socket=SOCK Listen on this UNIX socket [default: /tmp/sproxy-web.sock]
-p, --port=PORT Instead of UNIX socket, listen on this TCP port (localhost)
-h, --help Show this message
|]
main :: IO ()
main = do
doco <- O.parseUsageOrExit =<< usage
args <- O.parseArgsOrExit doco =<< getArgs
if args `O.isPresent` O.longOption "help"
then putStrLn $ O.usage doco
else do
let
port = O.getArg args $ O.longOption "port"
connstr = fromJust $ O.getArg args $ O.longOption "connstr"
socket = fromJust $ O.getArg args $ O.longOption "socket"
datadir = fromJust $ O.getArg args $ O.longOption "datadir"
let listen = case port of
Nothing -> Right socket
Just p -> Left $ read p
server listen connstr datadir