module Application
( makeApplication
, getApplicationDev
, makeFoundation
) where
import Import hiding (loadConfig)
import Settings
import StaticFiles (staticSite)
import Yesod.Auth (getAuth)
import Yesod.Default.Config
import Yesod.Default.Main
import Yesod.Default.Handlers
import Network.Wai.Middleware.RequestLogger (logStdout, logStdoutDev)
import Network.HTTP.Conduit (newManager, def)
import qualified Data.Text as T
import qualified Network.BSD as NS
import Handler.Home
import Handler.Tags
import Handler.View
import Handler.Pager
import Handler.Raw
import Handler.Compose
mkYesodDispatch "App" resourcesApp
makeApplication :: AppConfig DefaultEnv Extra -> IO Application
makeApplication conf = do
foundation <- makeFoundation conf
app <- toWaiAppPlain foundation
return $ logWare app
where
logWare = if development then logStdoutDev
else logStdout
makeFoundation :: AppConfig DefaultEnv Extra -> IO App
makeFoundation conf = do
manager <- newManager def
s <- staticSite
conf' <- case (extraMessageIDDomain $ appExtra conf) of
"" -> do u <- NS.getHostName
return $ conf { appExtra = (appExtra conf) { extraMessageIDDomain = T.pack u} }
_ -> return conf
return $ App conf' s manager $ extraHashedPwd $ appExtra conf'
getApplicationDev :: IO (Int, Application)
getApplicationDev =
defaultDevelApp loader makeApplication
where
loader = loadConfig (configSettings Development)
{ csParseExtra = parseExtra
}