packages feed

hulk-0.2.0: src/Hulk/Config.hs

-- | Configuration parser for the server.

module Hulk.Config
    (Config(..)
    ,getConfig)
    where

import Hulk.Types

import Data.Word
import Data.ConfigFile
import Data.Text (pack)

getConfig :: FilePath -> IO Config
getConfig conf = do
  contents <- readFile conf
  let config = do
        c <- readstring emptyCP contents
        hostname <- get c "LISTEN" "hostname"
        listen <- get c "LISTEN" "port"
        motd <- get c "STRINGS" "motd_file"
        preface <- get c "STRINGS" "preface_file"
        passwd <- get c "AUTH" "passwd_file"
        key <- get c "AUTH" "passwd_key"
        users <- get c "USERS" "data_dir"
        logs <- get c "LOGS" "event_log"
        chans <- fmap words $ get c "LOGS" "channels"
        return Config
          { configListen    = fromIntegral (listen::Word16)
          , configMotd      = Just motd
          , configHostname  = pack hostname
          , configPasswd    = passwd
          , configPasswdKey = key
          , configPreface   = Just preface
          , configUserData  = users
          , configLogFile   = logs
          , configLogChans  = map pack chans
          }
  case config of
    Left cperr   -> error $ show cperr
    Right config' -> return config'