add lookupBasicAuth and lookupBearerAuth functions

This commit is contained in:
Aleksey Uimanov 2015-03-26 17:19:53 +05:00
parent e64773cd41
commit 79dc6c33b9

View File

@ -52,6 +52,9 @@ module Yesod.Core.Handler
, lookupCookie
, lookupFile
, lookupHeader
-- **** Lookup authentication data
, lookupBasicAuth
, lookupBearerAuth
-- **** Multi-lookup
, lookupGetParams
, lookupPostParams
@ -166,6 +169,8 @@ import Control.Monad.IO.Class (MonadIO, liftIO)
import qualified Network.HTTP.Types as H
import qualified Network.Wai as W
import Network.Wai.Middleware.HttpAuth
( extractBasicAuth, extractBearerAuth )
import Control.Monad.Trans.Class (lift)
import qualified Data.Text as T
@ -972,6 +977,26 @@ lookupHeaders key = do
req <- waiRequest
return $ lookup' key $ W.requestHeaders req
-- | Lookup basic authentication data from __Authorization__ header of
-- request. Returns user name and password
lookupBasicAuth :: (MonadHandler m) => m (Maybe (Text, Text))
lookupBasicAuth = fmap (>>= getBA)
(lookupHeader "Authorization")
where
getBA bs = (\(x, y) -> ( decodeUtf8With lenientDecode x
, decodeUtf8With lenientDecode y))
<$> extractBasicAuth bs
-- | Lookup bearer authentication datafrom __Authorization__ header of
-- request. Returns bearer token value
lookupBearerAuth :: (MonadHandler m) => m (Maybe Text)
lookupBearerAuth = fmap (>>= getBR)
(lookupHeader "Authorization")
where
getBR bs = decodeUtf8With lenientDecode
<$> extractBearerAuth bs
-- | Lookup for GET parameters.
lookupGetParams :: MonadHandler m => Text -> m [Text]
lookupGetParams pn = do