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