From 38b3c9aa72f90e7fec0f27492c67e88e54f0eac8 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 21 Apr 2022 16:43:24 +0200 Subject: [PATCH] Added a way to remove user from cache --- .../gcat/persistence/ckan/CKANUserCache.java | 10 ++++++++++ src/main/java/org/gcube/gcat/rest/User.java | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java index e4f06ec..9fc899e 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java @@ -59,6 +59,16 @@ public abstract class CKANUserCache { return ckanUser; } + public static void removeUserFromCache() { + SecretManager secretManager = SecretManagerProvider.instance.get(); + String context = secretManager.getContext(); + Cache userCache = userCachePerContext.get(context); + if(userCache != null) { + String gcubeUsername = secretManager.getUser().getUsername(); + userCache.remove(gcubeUsername); + } + } + @Override protected void finalize() throws Throwable { super.finalize(); diff --git a/src/main/java/org/gcube/gcat/rest/User.java b/src/main/java/org/gcube/gcat/rest/User.java index 0807e96..c1235a6 100644 --- a/src/main/java/org/gcube/gcat/rest/User.java +++ b/src/main/java/org/gcube/gcat/rest/User.java @@ -10,11 +10,14 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import org.gcube.gcat.annotation.PURGE; //import org.gcube.common.authorization.control.annotations.AuthorizationControl; import org.gcube.gcat.api.GCatConstants; //import org.gcube.gcat.api.roles.Role; import org.gcube.gcat.persistence.ckan.CKANUser; +import org.gcube.gcat.persistence.ckan.CKANUserCache; /** * @author Luca Frosini (ISTI - CNR) @@ -66,8 +69,19 @@ public class User extends REST implements org.gcube.gcat.api.interface @DELETE @Path("/{" + USER_ID_PARAMETER + "}") // @AuthorizationControl(allowedRoles={Role.CATALOGUE_MANAGER}, exception=NotAuthorizedException.class) + /* + * Purge user form cache + */ public Response delete(@PathParam(USER_ID_PARAMETER) String username) { - return super.delete(username, false); + CKANUserCache.removeUserFromCache(); + return Response.status(Status.NO_CONTENT).build(); + } + + @PURGE + @Path("/{" + USER_ID_PARAMETER + "}") +// @AuthorizationControl(allowedRoles={Role.CATALOGUE_MANAGER}, exception=NotAuthorizedException.class) + public Response purge(@PathParam(USER_ID_PARAMETER) String username) { + return super.delete(username, true); } }