packages feed

wai-middleware-crowd-0.1.0.0: src/Network/Wai/OpenId.hs

{-# 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