diff options
Diffstat (limited to 'Config.hs')
-rw-r--r-- | Config.hs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Config.hs b/Config.hs new file mode 100644 index 0000000..be1d449 --- /dev/null +++ b/Config.hs @@ -0,0 +1,52 @@ +{- +Config.hs: ShareGuard configuration file parsing + + Copyright (C) 2011 Clint Adams <clint@gnu.org> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +-} + +module Config ( + getConfig, + database, + rootdir, + Config(..) +) where + +import Data.ConfigFile +import Control.Monad.Error +import System.Exit +import Data.Either.Utils + +data Config = Config { cdb :: String + , crd :: String + } deriving(Show) + +database :: Config -> String +database x = cdb x + +rootdir :: Config -> String +rootdir x = crd x + +getConfig :: FilePath -> IO Config +getConfig file = do + rv <- runErrorT $ + do + cp <- join $ liftIO $ readfile emptyCP file + db <- get cp "DEFAULT" "database" + rd <- get cp "DEFAULT" "rootdir" + let cnf = Config { cdb = db, crd = rd } + return cnf + return $ forceEither rv |