{-# LANGUAGE OverloadedStrings #-}
module Network.Wai.OpenId
( openIdComplete
, Identifier (..)
, oirOpLocal
, getForwardUrl
, runResourceT
) where
import Control.Arrow ((***))
import Control.Exception (try)
import Control.Monad.Trans.Resource (runResourceT)
import qualified Data.Text as T
import Data.Text.Encoding (decodeUtf8With)
import Data.Text.Encoding.Error (lenientDecode)
import Network.HTTP.Client (Manager)
import Network.Wai (Request, queryString)
import Web.Authenticate.OpenId (AuthenticateException (..),
Identifier (..), OpenIdResponse,
authenticateClaimed,
getForwardUrl, oirOpLocal)
openIdComplete :: Request -> Manager -> IO (Either AuthenticateException OpenIdResponse)
openIdComplete req man =
try $ runResourceT $ authenticateClaimed params man
where
dec = decodeUtf8With lenientDecode
params = map (dec *** maybe "" dec) $ queryString req