{-# LANGUAGE OverloadedStrings #-} module Web.Simple.Static where import Control.Monad import Control.Monad.IO.Class import qualified Data.Text as T import Network.Wai import Network.HTTP.Types import Network.Mime import Web.Simple.Controller import System.Directory import System.FilePath serveStatic :: FilePath -> Controller a () serveStatic baseDir = do req <- request let fp = foldl () baseDir (map T.unpack $ pathInfo req) exists <- liftIO $ doesFileExist fp when exists $ do respond $ responseFile status200 [(hContentType, defaultMimeLookup $ T.pack $ takeFileName fp)] fp Nothing when (null $ takeExtension fp) $ do let fpIdx = fp "index.html" existsIdx <- liftIO $ doesFileExist fpIdx when existsIdx $ do respond $ responseFile status200 [(hContentType, "text/html")] fpIdx Nothing