packages feed

hablog-0.4.0: app/Main.hs

-- | A simple executable to run Hablog

{-# LANGUAGE LambdaCase #-}

module Main where

import Control.Monad (void)
import Control.Concurrent (forkIO)
import System.Environment (getArgs)
import Web.Hablog

main :: IO ()
main =
  getArgs >>= \case
    [] ->
      run defaultConfig defaultPort

    ["both", portStr, tlsPortStr, key, cert] ->
      case (reads portStr, reads tlsPortStr) of
        ([(port, "")], [(tlsPort, "")]) -> do
            void $ forkIO $ run defaultConfig port
            runTLS
              TLSConfig { blogTLSPort = tlsPort, blogKey = key, blogCert = cert }
              defaultConfig
        _ ->
            putStrLn usageMsgBoth
    ["tls", portStr, key, cert] ->
      case reads portStr of
        [(port, "")] ->
            runTLS
              TLSConfig { blogTLSPort = port, blogKey = key, blogCert = cert }
              defaultConfig
        _ ->
          putStrLn usageMsgTLS
    [portStr] ->
      case reads portStr of
        [(port, "")] ->
          run defaultConfig port
        _ ->
          putStrLn usageMsg
    _ ->
      putStrLn usageMsg

usageMsg :: String
usageMsg =
  unlines
    [ "Usage: hablog <port>"
    , "or"
    , usageMsgTLS
    , "or"
    , usageMsgBoth
    ]

usageMsgTLS :: String
usageMsgTLS = "Usage: hablog tls <port> <key file> <cert file>"

usageMsgBoth :: String
usageMsgBoth = "Usage: hablog both <port> <port tls> <key file> <cert file>"