module Servant.Auth.Wordpress
(
wpAuthHandler
, wpAuthorizedOnlyHandler
, WPAuthorization(..)
, WPAuthConfig(..)
, CookieName(..)
, AuthScheme(..)
, WordpressKey
, wpConfigKey
, WordpressSalt
, wpConfigSalt
, UserAuthData(..)
, WordpressUserId(..)
, WordpressUserPass(..)
, SessionToken(..)
, decodeSessionTokens
, WPAuthError(..)
, CookieHeaderError(..)
, CookieParseError(..)
, CookieValidationError(..)
)
where
import Network.Wai ( Request
, requestHeaders
, queryString
)
import Servant ( Handler )
import Servant.Server.Experimental.Auth
( AuthHandler
, mkAuthHandler
)
import Wordpress.Auth ( WPAuthConfig(..)
, UserAuthData(..)
, WPAuthorization(..)
, authorizeWordpressRequest
, WPAuthError(..)
, AuthScheme(..)
, CookieName(..)
, CookieHeaderError(..)
, CookieParseError(..)
, CookieValidationError(..)
, WordpressUserId(..)
, WordpressUserPass(..)
, SessionToken(..)
, decodeSessionTokens
, WordpressKey
, wpConfigKey
, WordpressSalt
, wpConfigSalt
, findCookie
)
wpAuthHandler
:: WPAuthConfig Handler a -> AuthHandler Request (WPAuthorization a)
wpAuthHandler :: WPAuthConfig Handler a -> AuthHandler Request (WPAuthorization a)
wpAuthHandler = (Request -> Handler (WPAuthorization a))
-> AuthHandler Request (WPAuthorization a)
forall r usr. (r -> Handler usr) -> AuthHandler r usr
mkAuthHandler ((Request -> Handler (WPAuthorization a))
-> AuthHandler Request (WPAuthorization a))
-> (WPAuthConfig Handler a
-> Request -> Handler (WPAuthorization a))
-> WPAuthConfig Handler a
-> AuthHandler Request (WPAuthorization a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WPAuthConfig Handler a -> Request -> Handler (WPAuthorization a)
forall a.
WPAuthConfig Handler a -> Request -> Handler (WPAuthorization a)
handler
wpAuthorizedOnlyHandler
:: WPAuthConfig Handler a
-> (WPAuthError -> Handler a)
-> AuthHandler Request a
wpAuthorizedOnlyHandler :: WPAuthConfig Handler a
-> (WPAuthError -> Handler a) -> AuthHandler Request a
wpAuthorizedOnlyHandler WPAuthConfig Handler a
cfg WPAuthError -> Handler a
authFailure = (Request -> Handler a) -> AuthHandler Request a
forall r usr. (r -> Handler usr) -> AuthHandler r usr
mkAuthHandler ((Request -> Handler a) -> AuthHandler Request a)
-> (Request -> Handler a) -> AuthHandler Request a
forall a b. (a -> b) -> a -> b
$ \Request
req -> do
WPAuthorization a
result <- WPAuthConfig Handler a -> Request -> Handler (WPAuthorization a)
forall a.
WPAuthConfig Handler a -> Request -> Handler (WPAuthorization a)
handler WPAuthConfig Handler a
cfg Request
req
case WPAuthorization a
result of
WPAuthorizedUser a
uData -> a -> Handler a
forall (m :: * -> *) a. Monad m => a -> m a
return a
uData
WPAuthorization a
WPAnonymousUser -> do
CookieName
name <- WPAuthConfig Handler a -> Handler CookieName
forall (m :: * -> *) a. WPAuthConfig m a -> m CookieName
getCookieName WPAuthConfig Handler a
cfg
WPAuthError -> Handler a
authFailure
(WPAuthError -> Handler a) -> WPAuthError -> Handler a
forall a b. (a -> b) -> a -> b
$ (CookieHeaderError -> WPAuthError)
-> (Text -> WPAuthError)
-> Either CookieHeaderError Text
-> WPAuthError
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either CookieHeaderError -> WPAuthError
EHeader (WPAuthError -> Text -> WPAuthError
forall a b. a -> b -> a
const (WPAuthError -> Text -> WPAuthError)
-> WPAuthError -> Text -> WPAuthError
forall a b. (a -> b) -> a -> b
$ CookieHeaderError -> WPAuthError
EHeader CookieHeaderError
NoCookieMatches)
(Either CookieHeaderError Text -> WPAuthError)
-> Either CookieHeaderError Text -> WPAuthError
forall a b. (a -> b) -> a -> b
$ CookieName -> RequestHeaders -> Either CookieHeaderError Text
findCookie CookieName
name (Request -> RequestHeaders
requestHeaders Request
req)
handler :: WPAuthConfig Handler a -> Request -> Handler (WPAuthorization a)
handler :: WPAuthConfig Handler a -> Request -> Handler (WPAuthorization a)
handler WPAuthConfig Handler a
cfg Request
req =
WPAuthConfig Handler a
-> RequestHeaders -> [QueryItem] -> Handler (WPAuthorization a)
forall (m :: * -> *) a.
MonadIO m =>
WPAuthConfig m a
-> RequestHeaders -> [QueryItem] -> m (WPAuthorization a)
authorizeWordpressRequest WPAuthConfig Handler a
cfg (Request -> RequestHeaders
requestHeaders Request
req) (Request -> [QueryItem]
queryString Request
req)