added logout endpoint

This commit is contained in:
David Mosbach 2024-03-02 21:05:25 +00:00
parent ba9bc7f784
commit 26d2255c25
2 changed files with 43 additions and 3 deletions

View File

@ -5,7 +5,12 @@
{-# Language OverloadedStrings, MultiParamTypeClasses, FlexibleInstances, QuasiQuotes #-}
module LoginForm (HTML(..), Html, loginPage) where
module LoginForm
( HTML(..)
, Html
, loginPage
, logoutPage
) where
import Prelude hiding (head)
@ -66,4 +71,16 @@ loginPage headers = docTypeHtml $ head' >> body'
.then(url => window.location.replace(url.substring(1, url.length - 1)));
// Response.redirect(url);
};
|]
|]
logoutPage :: Html
logoutPage = docTypeHtml $ head' >> body'
where
head' = head $ do
meta ! A.charset "UTF-8"
meta ! A.name "viewport" ! A.content "width=device-width, initial-scale=1.0"
title "UniWorX Oauth2 Mock Server"
body' = body $ do
h1 "UniWorX Oauth2 Mock Server"
p "Logout successful."

View File

@ -171,7 +171,7 @@ loginServer = decideLogin
codeServer :: forall user userData . UserData user userData => AuthServer user AuthCode
codeServer creds scopes client url mState = addHeader ("oa2_auth_cookie=" <> creds) <$>
codeServer creds scopes client url mState = addHeader ("oa2_auth_cookie=\"" <> creds <> "\"") <$>
handleCreds @user @userData creds scopes client url mState Nothing
handleCreds :: forall user userData . UserData user userData
@ -341,6 +341,29 @@ userListEndpoint = handleUserData
Nothing -> return . QLeft $ QError "UserDoesNotExist"
--------------
---- Logout ----
--------------
type Logout = "logout"
:> QueryParam "post_logout_redirect_uri" QRedirect
:> HeaderR "Cookie" QCookie
:> Get '[HTML] (Headers '[Header "Set-Cookie" Text] Html)
logoutEndpoint :: forall user userData . UserData user userData => AuthServer user Logout
logoutEndpoint = logout
where
logout :: Maybe QRedirect
-> QCookie
-> AuthHandler user (Headers '[Header "Set-Cookie" Text] Html)
logout mUri cookie = do
let mCreds = lookup "oa2_auth_cookie" . parseCookiesText $ encodeUtf8 cookie
unless (isJust mCreds) $ throwError err401 { errBody = "Missing auth cookie" }
addHeader "oa2_auth_cookie=\"\"" <$> case mUri of
Just uri -> throwError err303 { errHeaders = [("Location", encodeUtf8 uri)]}
Nothing -> return logoutPage
-------------------
---- Server Main ----
-------------------