tvl-depot/services/tazblog/blog/Main.hs
2019-06-28 22:55:39 +01:00

41 lines
1.4 KiB
Haskell

-- | Main module for the blog's web server
module Main where
import BlogDB (initialBlogState)
import Control.Applicative (pure, (<$>), (<*>))
import Control.Exception (bracket)
import Data.Acid
import Data.Acid.Remote
import Data.Word (Word16)
import Locales (version)
import Network (HostName, PortID (..))
import Options
import Server
data MainOptions = MainOptions {
dbHost :: String,
dbPort :: Word16,
blogPort :: Int,
resourceDir :: String
}
instance Options MainOptions where
defineOptions = pure MainOptions
<*> simpleOption "dbHost" "localhost"
"Remote acid-state database host. Default is localhost"
<*> simpleOption "dbPort" 8070
"Remote acid-state database port. Default is 8070"
<*> simpleOption "blogPort" 8000
"Port to serve the blog on. Default is 8000."
<*> simpleOption "resourceDir" "/opt/tazblog/static"
"Resources folder location."
main :: IO()
main = do
putStrLn ("TazBlog " ++ version ++ " in Haskell starting")
runCommand $ \opts _ ->
let port = PortNumber $ fromIntegral $ dbPort opts
in openRemoteState skipAuthenticationPerform (dbHost opts) port >>=
(\acid -> runBlog acid (blogPort opts) (resourceDir opts))