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 -- TODO: re-enable cacert verification, disabled because it required the app to run on the build machine -- 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