packages feed

breve-0.0.2.0: src/Breve/Common.hs

{-# LANGUAGE MultiParamTypeClasses #-}
module Breve.Common where

import Paths_breve            (getDataFileName)

import Control.Applicative
import Control.Monad.IO.Class (liftIO)
import Text.Printf            (printf)
import System.Environment     (lookupEnv)

import Web.Simple.Templates
import Network.Wai.Handler.Warp

data AppSettings = AppSettings { }

serverSettings :: IO (String, Settings)
serverSettings = do
  port <- maybe  3000       read <$> lookupEnv "PORT"
  host <- maybe "localhost" id   <$> lookupEnv "HOSTNAME"
  let opts = setPort port defaultSettings
      url  = if port == 80
             then printf "http://%s/"    host
             else printf "http://%s:%d/" host port
  return (url, opts)

newAppSettings :: IO AppSettings
newAppSettings = return AppSettings

instance HasTemplates IO AppSettings where
  defaultLayout = do
    main <- liftIO (getDataFileName "layouts/main.html")
    Just <$> getTemplate main