hoauth2-2.9.0: src/Network/OAuth2/Experiment/Flows/UserInfoRequest.hs
{-# LANGUAGE FlexibleContexts #-}
module Network.OAuth2.Experiment.Flows.UserInfoRequest where
import Control.Monad.IO.Class (MonadIO (..))
import Control.Monad.Trans.Except (ExceptT (..))
import Data.Aeson (FromJSON)
import Data.ByteString.Lazy.Char8 qualified as BSL
import Network.HTTP.Conduit
import Network.OAuth.OAuth2
import Network.OAuth2.Experiment.Types
import URI.ByteString (URI)
-------------------------------------------------------------------------------
-- User Info Request --
-------------------------------------------------------------------------------
class HasUserInfoRequest a
-- | Standard approach of fetching /userinfo
conduitUserInfoRequest ::
(MonadIO m, HasUserInfoRequest a, FromJSON b) =>
IdpApplication i a ->
Manager ->
AccessToken ->
ExceptT BSL.ByteString m b
conduitUserInfoRequest = conduitUserInfoRequestWithCustomMethod authGetJSON
-- | Usually 'conduitUserInfoRequest' is good enough.
-- But some IdP has different approach to fetch user information rather than GET.
-- This method gives the flexiblity.
conduitUserInfoRequestWithCustomMethod ::
(MonadIO m, HasUserInfoRequest a, FromJSON b) =>
( Manager ->
AccessToken ->
URI ->
ExceptT BSL.ByteString m b
) ->
IdpApplication i a ->
Manager ->
AccessToken ->
ExceptT BSL.ByteString m b
conduitUserInfoRequestWithCustomMethod fetchMethod IdpApplication {..} mgr at =
fetchMethod mgr at (idpUserInfoEndpoint idp)