packages feed

paranoia-0.1.0.0: app/Main.hs

module Main where

import Logger (FileLogger(..))
import Proxy
import Control.Applicative
import Options.Applicative
import System.Posix.Daemonize (daemonize)



data ProxyConfig = ProxyConfig {
    port :: Int,
    logPath :: String,
    logFormat :: String,
    daemon :: Bool
}

proxyConfigParser :: Parser ProxyConfig
proxyConfigParser = ProxyConfig
        <$> option auto
        ( long "port" <> short 'p'
          <> metavar "PORT" <> value 8080
          <> help "proxy port" )
        <*> strOption
        ( long "log-path" <> short 'l'
          <> metavar "PATH" <> value "./log"
          <> help "log directory path" )
        <*> strOption
        ( long "log-format" <> short 'f'
          <> metavar "FORMAT" <> value "%time %remote %method %host %path %query\n%headers\n"
          <> help "log format like '%time %remote %method %host %path %query %headers'" )
        <*> switch
        ( long "daemon" <> short 'd'
          <> help "run as daemon" )


execProxy config = runProxy (port config) (FileLogger (logPath config) (Main.logFormat config))
exe config = if (daemon config) then daemonize $ execProxy config else execProxy config

main :: IO ()
main = execParser opts >>= exe
          where
              opts = info (helper <*> proxyConfigParser)
                            ( fullDesc
                              <> progDesc "HTTP Proxy server using Warp and http-client"
                              <> header "paranoia - a HTTP Proxy server" )