cachix-0.3.8: src/Cachix/Client/Env.hs
module Cachix.Client.Env
( Env (..),
mkEnv,
cachixVersion,
customManagerSettings,
)
where
import Cachix.Client.Config (Config, readConfig)
import Cachix.Client.OptionsParser (CachixOptions (..))
import Cachix.Client.Store (Store, openStore)
import Cachix.Client.URI (getBaseUrl)
import Data.Version (showVersion)
import Network.HTTP.Client
( ManagerSettings,
managerModifyRequest,
managerResponseTimeout,
responseTimeoutNone,
)
import Network.HTTP.Client.TLS (newTlsManagerWith, tlsManagerSettings)
import Network.HTTP.Simple (setRequestHeader)
import Paths_cachix (version)
import Protolude
import Servant.Client (ClientEnv, mkClientEnv)
import System.Directory (canonicalizePath)
data Env
= Env
{ config :: Maybe Config,
clientenv :: ClientEnv,
cachixoptions :: CachixOptions,
storeAsync :: Async Store
}
mkEnv :: CachixOptions -> IO Env
mkEnv rawcachixoptions = do
store <- async openStore
-- make sure path to the config is passed as absolute to dhall logic
canonicalConfigPath <- canonicalizePath (configPath rawcachixoptions)
let cachixOptions = rawcachixoptions {configPath = canonicalConfigPath}
cfg <- readConfig $ configPath cachixOptions
manager <- newTlsManagerWith customManagerSettings
let clientEnv = mkClientEnv manager $ getBaseUrl (host cachixOptions)
return
Env
{ config = cfg,
clientenv = clientEnv,
cachixoptions = cachixOptions,
storeAsync = store
}
customManagerSettings :: ManagerSettings
customManagerSettings =
tlsManagerSettings
{ managerResponseTimeout = responseTimeoutNone,
-- managerModifyRequest :: Request -> IO Request
managerModifyRequest = return . setRequestHeader "User-Agent" [toS cachixVersion]
}
cachixVersion :: Text
cachixVersion = "cachix " <> toS (showVersion version)