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
{-|
Create a new Env from a Mollie API key.
This key should start with either `test_` or `live_`.
-}
createEnv :: Text.Text -- ^ key
-> 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
}
{-|
Runs handlers with the provided environment against the Mollie API.
-}
runMollie :: Env -> Mollie a -> IO a
runMollie env query = Reader.runReaderT query env