46 lines
1.5 KiB
Haskell
46 lines
1.5 KiB
Haskell
module Core.HTTP where
|
|
|
|
import qualified Core.Configuration as Conf
|
|
import qualified Core.Handlers as Handle
|
|
|
|
import Control.Monad ( mapM_ )
|
|
import Data.String ( fromString )
|
|
import Network.Wai.Handler.Warp ( Port, run )
|
|
import Network.Wai.Middleware.RequestLogger ( logStdoutDev )
|
|
import Network.Wai.Middleware.Static
|
|
import System.FilePath ( takeFileName )
|
|
|
|
|
|
import Web.Twain
|
|
|
|
-- Get the port to listen on from the ENV and start the webserver
|
|
main :: [FilePath] -> IO ()
|
|
main mdFiles = do
|
|
port <- Conf.appPort
|
|
run (read port :: Int) $
|
|
foldr ($) (notFound Handle.missing) (app mdFiles)
|
|
where
|
|
app mdFiles = preProcessors
|
|
++ routes
|
|
++ (map mdFileToRoute mdFiles)
|
|
++ postProcessors
|
|
|
|
|
|
-- These Middlewares are executed before any routes are reached
|
|
preProcessors :: [Middleware]
|
|
preProcessors = [ logStdoutDev
|
|
, staticPolicy $ noDots >-> addBase "data/assets/public"
|
|
]
|
|
|
|
-- These Middlewares are executed after all other routes are exhausted
|
|
postProcessors :: [Middleware]
|
|
postProcessors = []
|
|
|
|
-- The application's core routes expressed as a list of WAI Middlewares
|
|
routes :: [Middleware]
|
|
routes =
|
|
[ get "/" Handle.index ]
|
|
|
|
mdFileToRoute :: FilePath -> Middleware
|
|
mdFileToRoute fp = get (fromString $ "/posts/" ++ fp) (Handle.posts fp)
|