module Config
( Config(..)
, IssuePattern
, readConfig
) where
import System.Directory
import System.FilePath
import Data.List.Split
import Data.ConfigFile
import Control.Monad.Except
import Data.ByteString.Char8 (ByteString(..), pack)
import Data.ByteString.Base64 (decodeLenient)
type IssuePattern = String
data Config = Config { getGitRepositories::[FilePath]
, getIssuePatterns::[IssuePattern]
, getJiraHost::String
, getJiraUser::ByteString
, getJiraPassword::ByteString
} deriving (Show)
readConfig :: IO (Either String Config)
readConfig = do
homePath <- getHomeDirectory
errorOrConfig <- runExceptT $ do
cp <- join $ liftIO $ readfile emptyCP (homePath </> ".tempo.conf")
repos <- get cp "git" "repos"
projects <- get cp "jira" "projects"
jiraHost <- get cp "jira" "host"
jiraUser <- get cp "jira" "user"
jiraPass <- get cp "jira" "pass"
return $ Config (splitOn "," repos)
(map projectToPattern (splitOn "," projects))
jiraHost
(pack jiraUser)
(decodeLenient . pack $ jiraPass)
return $ case errorOrConfig of
(Left err) -> Left $ show err
(Right cfg) -> Right cfg
projectToPattern :: String -> IssuePattern
projectToPattern projectCode = projectCode ++ "\\-[0-9]+"