module Network.Wai.Application.Classic.Def where
import Control.Applicative
import Control.Exception
import Data.ByteString (ByteString)
import Network.HTTP.Date
import Network.Wai.Application.Classic.Path
import Network.Wai.Application.Classic.Types
import Network.Wai.Logger
import System.Posix
defaultClassicAppSpec :: ClassicAppSpec
defaultClassicAppSpec = ClassicAppSpec {
softwareName = "Classic"
, logger = defaultLogger
, dater = defaultDater
, statusFileDir = "/usr/local/share/html/status/"
}
defaultLogger :: ApacheLogger
defaultLogger _ _ _ = return ()
defaultDater :: IO ByteString
defaultDater = formatHTTPDate . epochTimeToHTTPDate <$> epochTime
defaultFileAppSpec :: FileAppSpec
defaultFileAppSpec = FileAppSpec {
indexFile = "index.html"
, isHTML = defaultIsHTml
, getFileInfo = defaultGetFileInfo
}
defaultIsHTml :: Path -> Bool
defaultIsHTml file = ".html" `isSuffixOf` file || ".htm" `isSuffixOf` file
defaultGetFileInfo :: Path -> IO FileInfo
defaultGetFileInfo path = do
fs <- getFileStatus sfile
if not (isDirectory fs) then
return FileInfo {
fileInfoName = path
, fileInfoSize = size fs
, fileInfoTime = time fs
, fileInfoDate = formatHTTPDate (time fs)
}
else
throwIO $ userError "does not exist"
where
sfile = pathString path
size = fromIntegral . fileSize
time = epochTimeToHTTPDate . modificationTime
defaultCgiAppSpec :: CgiAppSpec
defaultCgiAppSpec = CgiAppSpec {
indexCgi = "index.cgi"
}