packages feed

ficketed-0.1.0.0: Main.hs

module Main where

import Control.Applicative (optional)

import Data.Semigroup ((<>))

import qualified Options.Applicative as Opt

import Network.Socketed.Internal (withStdinPassthrough)
import Network.Socketed.Application.Ficketed (
      FicketedOptions(..), runFicketedServer
   )

import System.IO (hFlush, stdout)

params :: Opt.Parser FicketedOptions
params = FicketedOptions
   <$> optional (
         Opt.argument Opt.str
         ( Opt.help "directory to host"
         <> Opt.metavar "PATH")
      )
   <*> Opt.option Opt.auto
      ( Opt.long "port"
      <> Opt.short 'p'
      <> Opt.help "port number the server will be running on"
      <> Opt.showDefault
      <> Opt.value 3001
      <> Opt.metavar "INT" )
   <*> Opt.strOption
      ( Opt.long "bind"
      <> Opt.short 'b'
      <> Opt.help "host ip the server will be bind to"
      <> Opt.showDefault
      <> Opt.value "0.0.0.0"
      <> Opt.metavar "STRING" )
   <*> Opt.option Opt.auto
      ( Opt.long "wsport"
      <> Opt.short 'w'
      <> Opt.help "port of the socketed server"
      <> Opt.showDefault
      <> Opt.value 3000
      <> Opt.metavar "INT" )
   <*> Opt.strOption
      ( Opt.long "wsbind"
      <> Opt.short 's'
      <> Opt.help "host of the socketed server"
      <> Opt.showDefault
      <> Opt.value "0.0.0.0"
      <> Opt.metavar "STRING")
   <*> Opt.strOption
      ( Opt.long "skipedMimes"
      <> Opt.short 'x'
      <> Opt.help "skip update script for mime types listed in this list"
      <> Opt.showDefault
      <> Opt.value "text/css"
      <> Opt.metavar "COMMA SEPERATED LIST")
   <*> Opt.strOption
      ( Opt.long "extraMimes"
      <> Opt.short 'e'
      <> Opt.help "additional mime types to be subject for refreshing"
      <> Opt.showDefault
      <> Opt.value "application/json,application/x-sh"
      <> Opt.metavar "COMMA SEPERATED LIST")
   <*> Opt.strOption
      ( Opt.long "htmlMimes"
      <> Opt.short 'l'
      <> Opt.help "mime types that will not have escape html performed"
      <> Opt.showDefault
      <> Opt.value "text/html,text/javascipt"
      <> Opt.metavar "COMMA SEPERATED LIST")
   <*> Opt.strOption
      ( Opt.long "textExts"
      <> Opt.short 't'
      <> Opt.help "additional file extensions to be treated as text/plain"
      <> Opt.showDefault
      <> Opt.value "md,yaml"
      <> Opt.metavar "COMMA SEPERATED LIST")

main :: IO ()
main = putStrLn "\n" >> hFlush stdout -- kick off socketed server
      >> Opt.execParser opts >>= withStdinPassthrough . runFicketedServer
   where
      opts = Opt.info (Opt.helper <*> params)
         (
            Opt.fullDesc
            <> Opt.progDesc "ficketed"
            <> Opt.header "ficketed"
         )