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)