packages feed

batchd-0.1.1.0: src/batchd-admin.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DeriveDataTypeable #-}

import Control.Monad.Trans
import Control.Monad.Reader
import Options.Applicative
import qualified Database.Persist.Sql as Sql
import System.Log.Heavy
import Text.Localize.IO (setupTranslations)

import Batchd.Core.Common.Localize (translationPolicy)
import Batchd.Common.Config
import Batchd.Common.Data (migrateAll)
import Batchd.Daemon.Logging (getLoggingSettings)
import Batchd.Daemon.Database
import Batchd.Daemon.Auth
import Batchd.Daemon.CmdLine

main :: IO ()
main = do
  cmdline <- execParser adminParserInfo
  cfgR <- loadGlobalConfig (globalConfigPath $ adminCommon cmdline)
  setupTranslations translationPolicy
  let cmd = adminCommand cmdline
  case cfgR of
    Left err -> fail $ show err
    Right cfg -> do
      let logSettings = getLoggingSettings cfg
      case cmd of
        CreateSuperuser {} -> do
            password <- getPassword2
            withLoggingT logSettings $ do
              logger <- ask
              liftIO $ createSuperUser cfg logger (username cmd) password
            return ()
        Passwd name -> do
            password <- getPassword2
            withLoggingT logSettings $ do
              logger <- ask
              liftIO $ changePassword cfg logger name password
            return ()
        Migrate -> do
          withLoggingT logSettings $ do
              logger <- ask
              pool <- liftIO $ getPool cfg logger
              Sql.runSqlPool (Sql.runMigration migrateAll) pool