You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2024/11/06 23:01:27 UTC
(sling-whiteboard) branch feat/clear-access-tokens created (now 49479979)
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a change to branch feat/clear-access-tokens
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
at 49479979 feat(oidc-rp): allow clearing access tokens
This branch includes the following new commits:
new 49479979 feat(oidc-rp): allow clearing access tokens
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(sling-whiteboard) 01/01: feat(oidc-rp): allow clearing access tokens
Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch feat/clear-access-tokens
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit 494799791b98610868ec684d582c16c0d078cc8e
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Thu Nov 7 00:01:05 2024 +0100
feat(oidc-rp): allow clearing access tokens
---
.../sling/extensions/oauth_client/OAuthTokenStore.java | 2 ++
.../oauth_client/impl/JcrUserHomeOAuthTokenStore.java | 15 +++++++++++++++
.../oauth_client/impl/RedisOAuthTokenStore.java | 10 ++++++++++
.../oauth_client/impl/OAuthCallbackServletTest.java | 6 ++++++
4 files changed, 33 insertions(+)
diff --git a/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/OAuthTokenStore.java b/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/OAuthTokenStore.java
index f8de5f6a..639b4923 100644
--- a/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/OAuthTokenStore.java
+++ b/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/OAuthTokenStore.java
@@ -44,4 +44,6 @@ public interface OAuthTokenStore {
OAuthToken getRefreshToken(ClientConnection connection, ResourceResolver resolver) throws OAuthException;
void persistTokens(ClientConnection connection, ResourceResolver resolver, OAuthTokens tokens) throws OAuthException;
+
+ void clearAccessToken(ClientConnection connection, ResourceResolver resolver) throws OAuthException;
}
diff --git a/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/JcrUserHomeOAuthTokenStore.java b/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/JcrUserHomeOAuthTokenStore.java
index 1c854d9a..d25d083a 100644
--- a/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/JcrUserHomeOAuthTokenStore.java
+++ b/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/JcrUserHomeOAuthTokenStore.java
@@ -135,4 +135,19 @@ public class JcrUserHomeOAuthTokenStore implements OAuthTokenStore {
private String nodePath(ClientConnection connection) {
return "oauth-tokens/" + connection.name();
}
+
+ @Override
+ public void clearAccessToken(ClientConnection connection, ResourceResolver resolver) throws OAuthException {
+ try {
+ User currentUser = resolver.adaptTo(User.class);
+ Session session = resolver.adaptTo(Session.class);
+
+ currentUser.removeProperty(propertyPath(connection, PROPERTY_NAME_ACCESS_TOKEN));
+ currentUser.removeProperty(propertyPath(connection, PROPERTY_NAME_EXPIRES_AT));
+
+ session.save();
+ } catch (RepositoryException e) {
+ throw new OAuthException(e);
+ }
+ }
}
diff --git a/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/RedisOAuthTokenStore.java b/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/RedisOAuthTokenStore.java
index 76fe3653..63fe9140 100644
--- a/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/RedisOAuthTokenStore.java
+++ b/org.apache.sling.servlets.oidc-rp/src/main/java/org/apache/sling/extensions/oauth_client/impl/RedisOAuthTokenStore.java
@@ -105,6 +105,16 @@ public class RedisOAuthTokenStore implements OAuthTokenStore {
}
}
+ @Override
+ public void clearAccessToken(ClientConnection connection, ResourceResolver resolver) throws OAuthException {
+ String userId = resolver.getUserID();
+
+ try (Jedis jedis = pool.getResource()) {
+ jedis.del(keyFor(userId, connection, KEY_SEGMENT_ACCESS_TOKEN));
+ }
+
+ }
+
private void setWithExpiry(Jedis jedis, String key, String value, long expiry) {
jedis.set(key, value);
if ( expiry > 0 )
diff --git a/org.apache.sling.servlets.oidc-rp/src/test/java/org/apache/sling/extensions/oauth_client/impl/OAuthCallbackServletTest.java b/org.apache.sling.servlets.oidc-rp/src/test/java/org/apache/sling/extensions/oauth_client/impl/OAuthCallbackServletTest.java
index 3946c17c..2691f337 100644
--- a/org.apache.sling.servlets.oidc-rp/src/test/java/org/apache/sling/extensions/oauth_client/impl/OAuthCallbackServletTest.java
+++ b/org.apache.sling.servlets.oidc-rp/src/test/java/org/apache/sling/extensions/oauth_client/impl/OAuthCallbackServletTest.java
@@ -72,6 +72,12 @@ class OAuthCallbackServletTest {
public OAuthToken getAccessToken(ClientConnection connection, ResourceResolver resolver) throws OAuthException {
throw new IllegalStateException("Not implemented");
}
+
+ @Override
+ public void clearAccessToken(ClientConnection connection, ResourceResolver resolver) throws OAuthException {
+ throw new IllegalStateException("Not implemented");
+ }
+
public OAuthTokens getTokens() {
return tokens;
}