module Mollie.API
( Mollie
, Env
, createEnv
, runMollie
, Reader.liftIO
) where
import qualified Control.Monad.Reader as Reader
import qualified Data.Text as Text
import Mollie.API.Internal
import qualified Network.HTTP.Client as HTTP
import qualified Network.HTTP.Client.OpenSSL as HTTP
import qualified OpenSSL.Session as OpenSSL
import qualified Paths_mollie_api_haskell as Self
createEnv :: Text.Text
-> IO Env
createEnv key = HTTP.withOpenSSL $ do
sslContext <- OpenSSL.context
OpenSSL.contextSetVerificationMode sslContext OpenSSL.VerifyPeer
{ OpenSSL.vpFailIfNoPeerCert = True
, OpenSSL.vpClientOnce = False
, OpenSSL.vpCallback = Nothing
}
cacert <- Self.getDataFileName "data/cacert.pem"
OpenSSL.contextSetCAFile sslContext cacert
manager <- HTTP.newManager . HTTP.opensslManagerSettings $ return sslContext
return Env
{ env_key = key
, env_manager = manager
}
runMollie :: Env -> Mollie a -> IO a
runMollie env query = Reader.runReaderT query env