module Network.MoHWS.Configuration where
import qualified Data.Set as Set
import qualified Network.MoHWS.Logger.Level as LogLevel
import qualified Data.Accessor.Basic as Accessor
import Network.Socket (PortNumber, )
import qualified Data.List as List
import qualified Data.Version as Ver
import qualified Paths_mohws as Global
data T ext = Cons {
user :: String,
group :: String,
listen :: [(Maybe String, PortNumber)],
requestTimeout :: Int,
keepAliveTimeout :: Int,
maxClients :: Int,
serverAdmin :: String,
serverName :: String,
serverAlias :: Set.Set String,
useCanonicalName :: Bool,
hostnameLookups :: Bool,
documentRoot :: FilePath,
accessFileName :: FilePath,
indexes :: Bool,
followSymbolicLinks :: Bool,
chunkSize :: Int,
typesConfig :: String,
defaultType :: String,
addLanguage :: [(String,String)],
languagePriority :: [String],
customLogs :: [(FilePath, String)],
errorLogFile :: FilePath,
logLevel :: LogLevel.T,
extension :: ext
}
deriving Show
deflt :: ext -> T ext
deflt ext = Cons {
user = "nobody",
group = "nobody",
listen = [(Nothing,80)],
requestTimeout = 300,
keepAliveTimeout = 15,
maxClients = 150,
serverAdmin = "",
serverName = "",
serverAlias = Set.empty,
useCanonicalName = False,
hostnameLookups = False,
documentRoot = ".",
accessFileName = ".htaccess",
indexes = False,
followSymbolicLinks = False,
chunkSize = 4096,
typesConfig = "/etc/mime.types",
defaultType = "text/plain",
addLanguage = [],
languagePriority = [],
customLogs = [("http-access.log",
"%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"")],
errorLogFile = "httpd-error.log",
logLevel = LogLevel.Warn,
extension = ext
}
serverSoftware, serverVersion :: String
serverSoftware = "MoHWS"
serverVersion =
concat $ List.intersperse "." $ map show $
Ver.versionBranch Global.version
extensionAcc :: Accessor.T (T ext) ext
extensionAcc =
Accessor.fromSetGet (\e c -> c{extension=e}) extension
instance Functor T where
fmap f c = Cons {
user = user c,
group = group c,
listen = listen c,
requestTimeout = requestTimeout c,
keepAliveTimeout = keepAliveTimeout c,
maxClients = maxClients c,
serverAdmin = serverAdmin c,
serverName = serverName c,
serverAlias = serverAlias c,
useCanonicalName = useCanonicalName c,
hostnameLookups = hostnameLookups c,
documentRoot = documentRoot c,
accessFileName = accessFileName c,
indexes = indexes c,
followSymbolicLinks = followSymbolicLinks c,
chunkSize = chunkSize c,
typesConfig = typesConfig c,
defaultType = defaultType c,
addLanguage = addLanguage c,
languagePriority = languagePriority c,
customLogs = customLogs c,
errorLogFile = errorLogFile c,
logLevel = logLevel c,
extension = f $ extension c
}