From d3dc1894e74db514e23add9ceff0b26848344efa Mon Sep 17 00:00:00 2001 From: Brett Chaldecott Date: Wed, 16 Apr 2025 11:08:53 +0200 Subject: [PATCH] feat: added logout url to logout method --- .../main/java/com/kinde/KindeClientSession.java | 2 ++ .../session/KindeClientKindeTokenSessionImpl.java | 2 ++ .../com/kinde/session/KindeClientSessionImpl.java | 12 +++++++++--- .../java/com/kinde/servlet/KindeLogoutServlet.java | 14 ++++++++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/kinde-core/src/main/java/com/kinde/KindeClientSession.java b/kinde-core/src/main/java/com/kinde/KindeClientSession.java index a7baaa33..3230ef92 100644 --- a/kinde-core/src/main/java/com/kinde/KindeClientSession.java +++ b/kinde-core/src/main/java/com/kinde/KindeClientSession.java @@ -24,6 +24,8 @@ public interface KindeClientSession { AuthorizationUrl register(); AuthorizationUrl logout() throws Exception; + + AuthorizationUrl logout(String logoutRedirectUri) throws Exception; UserInfo retrieveUserInfo(); } diff --git a/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java b/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java index 608f8967..3bf26dea 100644 --- a/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java +++ b/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java @@ -26,6 +26,8 @@ import com.nimbusds.openid.connect.sdk.UserInfoResponse; import com.nimbusds.openid.connect.sdk.token.OIDCTokens; import lombok.SneakyThrows; +import com.kinde.KindeClientSession; +import com.kinde.authorization.AuthorizationUrl; import java.net.URI; import java.util.Arrays; diff --git a/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java b/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java index 0dc5f322..b91e3d69 100644 --- a/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java +++ b/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java @@ -159,12 +159,18 @@ public AuthorizationUrl register() { return authorizationUrlWithParameters(parameters); } + @Override public AuthorizationUrl logout() throws Exception { - if (this.kindeConfig.logoutRedirectUri() == null || this.kindeConfig.logoutRedirectUri().isEmpty()) { - throw new Exception("Logout url is not provided"); + return logout(this.kindeConfig.logoutRedirectUri()); + } + + @Override + public AuthorizationUrl logout(String logoutRedirectUri) throws Exception { + if (logoutRedirectUri == null || logoutRedirectUri.isEmpty()) { + throw new Exception("Logout redirect URI is not provided"); } return new AuthorizationUrl(new URL(String.format("%s?redirect=%s",this.oidcMetaData.getOpMetadata().getEndSessionEndpointURI().toURL(), - this.kindeConfig.logoutRedirectUri())),null); + logoutRedirectUri)),null); } @Override diff --git a/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java b/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java index 609f885d..3e1a99af 100644 --- a/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java +++ b/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java @@ -27,11 +27,21 @@ public class KindeLogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { - AuthorizationUrl authorizationUrl = KindeSingleton + String logoutRedirectUri = req.getParameter("redirect_uri"); + AuthorizationUrl authorizationUrl; + + KindeClientSession clientSession = KindeSingleton .getInstance() .getKindeClientBuilder() .build() - .clientSession().logout(); + .clientSession(); + + if (logoutRedirectUri != null && !logoutRedirectUri.isEmpty()) { + authorizationUrl = clientSession.logout(logoutRedirectUri); + } else { + authorizationUrl = clientSession.logout(); + } + HttpSession session = req.getSession(false); if (session != null) { session.removeAttribute(ACCESS_TOKEN);