{-# LANGUAGE FlexibleContexts, OverloadedStrings, ConstraintKinds #-} -- | access methods for login, creating clients... module Web.MangoPay.Access ( createCredentialsSecret ,oauthLogin ) where import Web.MangoPay.Monad import Web.MangoPay.Types import Data.Text import Network.HTTP.Conduit (applyBasicAuth) import Control.Monad (liftM) import qualified Network.HTTP.Types as HT import qualified Data.Text.Encoding as TE import Data.Maybe (isNothing) -- | populate the passphrase for our clientId IFF we don't have one createCredentialsSecret :: (MPUsableMonad m) => MangoPayT m Credentials createCredentialsSecret =do creds<- getCreds if isNothing $ cClientSecret creds then postExchange "/v2/clients" Nothing creds else return creds -- | login with given user name and password -- returns the OAuth token that can be used to generate the opaque AccessToken and carries the expiration delay oauthLogin :: (MPUsableMonad m) => Text -> Text -> MangoPayT m OAuthToken oauthLogin user pass = do req<- liftM (applyBasicAuth (TE.encodeUtf8 user) (TE.encodeUtf8 pass)) $ getPostRequest "/v2/oauth/token" Nothing ([("grant_type",Just "client_credentials")]::HT.Query) getJSONResponse req