{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Canteven.Internal ( staticSite ) where import Control.Monad (join) import Data.List ((\\)) import Data.Maybe (catMaybes) import Language.Haskell.TH (TExp, Q, runIO) import Language.Haskell.TH.Syntax (addDependentFile) import Network.HTTP.Types (ok200) import Network.Mime (defaultMimeLookup) import Network.Wai (Middleware, responseLBS, pathInfo) import System.Directory (getDirectoryContents) import System.FilePath.Posix (combine, (>)) import System.Posix.Files (isRegularFile, isDirectory, getFileStatus) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 import qualified Data.ByteString.Lazy.Char8 as BSL8 import qualified Data.Text as T {- | The Template-Haskell splice @$$(staticSite dir)@ will build a 'Middleware' that serves a set of static files determined at compile time, or else passes the request to the underlying 'Network.Wai.Application'. All files under @dir@ will be served relative to the root path of your web server, so the file @\