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