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]
}
tokenVar :: String
tokenVar = "HASKBOT_ENDPOINT"
getSlackEndpoint :: IO String
getSlackEndpoint = getEnv tokenVar
getAppEnv :: IO Environment
getAppEnv = do
networkConn <- getNetworkInfo >>= N.newManager
incQueue <- newTVarIO []
return $ Environment {..}
getNetworkInfo :: IO N.ManagerSettings
getNetworkInfo = return $ N.mkManagerSettings tlsInfo Nothing
where tlsInfo = N.TLSSettingsSimple False False False