{-# LANGUAGE RecordWildCards #-} module Network.Haskbot.Internal.Environment ( Haskbot , ActionH , ScottyH , Environment (..) , getAppEnv , getSlackEndpoint ) where import Control.Concurrent.STM.TVar (TVar, newTVarIO) import Control.Monad.Reader (ReaderT) import qualified Data.ByteString.Lazy as BL import qualified Data.Text.Lazy as TL import qualified Network.Connection as N import qualified Network.HTTP.Conduit as N import System.Environment (getEnv) import Web.Scotty.Trans (ActionT, ScottyT) type Haskbot = ReaderT Environment IO type ScottyH = ScottyT TL.Text Haskbot type ActionH = ActionT TL.Text Haskbot data Environment = Environment { networkConn :: N.Manager , incQueue :: TVar [BL.ByteString] } -- constants tokenVar :: String tokenVar = "HASKBOT_ENDPOINT" -- public functions getSlackEndpoint :: IO String getSlackEndpoint = getEnv tokenVar getAppEnv :: IO Environment getAppEnv = do networkConn <- getNetworkInfo >>= N.newManager incQueue <- newTVarIO [] return $ Environment {..} -- private functions getNetworkInfo :: IO N.ManagerSettings getNetworkInfo = return $ N.mkManagerSettings tlsInfo Nothing where tlsInfo = N.TLSSettingsSimple False False False