From f11709684727e8b767feedaf9f6706345140d546 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 28 Feb 2023 17:06:47 +0100 Subject: [PATCH] Fixing moderator issues --- .../gcat/persistence/ckan/CKANPackage.java | 19 ++++++++++++++++--- .../gcat/persistence/ckan/CKANUserCache.java | 8 +++++++- src/main/java/org/gcube/gcat/rest/Item.java | 2 +- .../java/org/gcube/gcat/rest/License.java | 2 +- .../org/gcube/gcat/social/SocialPost.java | 17 ++++++++++------- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java index 5d2649d..e59b882 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -786,7 +786,7 @@ public class CKANPackage extends CKAN implements Moderated { return itemURL; } - protected void sendSocialPost() { + protected void sendSocialPost(String userFullName) { try { boolean makePost = false; try { @@ -801,6 +801,7 @@ public class CKANPackage extends CKAN implements Moderated { if(makePost) { ArrayNode arrayNode = (ArrayNode) result.get(TAGS_KEY); SocialPost socialPost = new SocialPost(); + socialPost.setUserFullName(userFullName); socialPost.setItemID(itemID); socialPost.setItemURL(itemURL); socialPost.setItemTitle(itemTitle); @@ -910,7 +911,8 @@ public class CKANPackage extends CKAN implements Moderated { if(!isModerationEnabled()) { if(scopeBean.is(Type.VRE)) { // Actions performed after a package has been correctly created on ckan. - sendSocialPost(); + String userFullName = CKANUserCache.getCurrrentCKANUser().getNameSurname(); + sendSocialPost(userFullName); } } @@ -1372,6 +1374,15 @@ public class CKANPackage extends CKAN implements Moderated { protected void setToRejected(JsonNode jsonNode) { addExtraField(jsonNode, Moderated.SYSTEM_CM_ITEM_STATUS, CMItemStatus.REJECTED.getValue()); + /* + * This version is not properly managed by CKAN. + * It is converted to: + * searchable: "false" + * which is considered as true value. + * We need to provide a string with F as capitol letters to make it working + * ((ObjectNode) jsonNode).put(SEARCHABLE_KEY, false); + */ + ((ObjectNode) jsonNode).put(SEARCHABLE_KEY, "False"); } protected void setItemToPending(JsonNode jsonNode) { @@ -1515,7 +1526,9 @@ public class CKANPackage extends CKAN implements Moderated { if(scopeBean.is(Type.VRE)) { // Actions performed after a package has been correctly created on ckan. - sendSocialPost(); + String gcubeUsername = CKANUser.getUsernameFromCKANUsername(moderationThread.getItemAuthorCkanUsername()); + String authorFullName = CKANUserCache.getCKANUser(gcubeUsername).getNameSurname(); + sendSocialPost(authorFullName); } break; 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 5ceecc8..8ca9b5c 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java @@ -35,6 +35,12 @@ public abstract class CKANUserCache { } public synchronized static CKANUser getCurrrentCKANUser() { + SecretManager secretManager = SecretManagerProvider.instance.get(); + String gcubeUsername = secretManager.getUser().getUsername(); + return getCKANUser(gcubeUsername); + } + + public synchronized static CKANUser getCKANUser(String gcubeUsername) { SecretManager secretManager = SecretManagerProvider.instance.get(); String context = secretManager.getContext(); Cache userCache = cacheManager.getCache(context); @@ -42,7 +48,6 @@ public abstract class CKANUserCache { userCache = cacheManager.createCache(context, userCacheConfiguration); } - String gcubeUsername = secretManager.getUser().getUsername(); CKANUser ckanUser = userCache.get(gcubeUsername); if(ckanUser == null) { ckanUser = new CKANUser(); @@ -52,6 +57,7 @@ public abstract class CKANUserCache { return ckanUser; } + public synchronized static void removeUserFromCache() { SecretManager secretManager = SecretManagerProvider.instance.get(); String gcubeUsername = secretManager.getUser().getUsername(); diff --git a/src/main/java/org/gcube/gcat/rest/Item.java b/src/main/java/org/gcube/gcat/rest/Item.java index 4e2f136..43c4c7f 100644 --- a/src/main/java/org/gcube/gcat/rest/Item.java +++ b/src/main/java/org/gcube/gcat/rest/Item.java @@ -250,7 +250,7 @@ public class Item extends REST implements org.gcube.gcat.api.interf } String accept = httpHeaders.getHeaderString("Accept"); - if(accept.contains(GCatConstants.APPLICATION_JSON_API)) { + if(accept!=null && accept.contains(GCatConstants.APPLICATION_JSON_API)) { return resultAsJsonAPI(ret); } return ret; diff --git a/src/main/java/org/gcube/gcat/rest/License.java b/src/main/java/org/gcube/gcat/rest/License.java index dee47c1..0dfe8ab 100644 --- a/src/main/java/org/gcube/gcat/rest/License.java +++ b/src/main/java/org/gcube/gcat/rest/License.java @@ -40,7 +40,7 @@ public class License extends REST implements org.gcube.gcat.api.int String ret = super.list(-1, -1); String accept = httpHeaders.getHeaderString("Accept"); - if(accept.contains(GCatConstants.APPLICATION_JSON_API)) { + if(accept!=null && accept.contains(GCatConstants.APPLICATION_JSON_API)) { return resultAsJsonAPI(ret); } return ret; diff --git a/src/main/java/org/gcube/gcat/social/SocialPost.java b/src/main/java/org/gcube/gcat/social/SocialPost.java index ed5c29a..c503e10 100644 --- a/src/main/java/org/gcube/gcat/social/SocialPost.java +++ b/src/main/java/org/gcube/gcat/social/SocialPost.java @@ -6,14 +6,11 @@ import java.util.List; import org.gcube.com.fasterxml.jackson.databind.JsonNode; import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; -import org.gcube.common.authorization.library.provider.AccessTokenProvider; -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.utils.manager.SecretManager; import org.gcube.common.authorization.utils.manager.SecretManagerProvider; import org.gcube.common.authorization.utils.secret.Secret; import org.gcube.gcat.api.configuration.CatalogueConfiguration; import org.gcube.gcat.configuration.CatalogueConfigurationFactory; -import org.gcube.gcat.persistence.ckan.CKANUserCache; import org.gcube.gcat.utils.Constants; import org.gcube.portal.databook.shared.Post; import org.gcube.social_networking.social_networking_client_library.PostClient; @@ -31,6 +28,7 @@ public class SocialPost extends Thread { protected static final String NOTIFICATION_MESSAGE = "%s just published the item \"%s\"\n" + "Please find it at %s\n"; + protected String userFullName; protected String itemID; protected String itemURL; protected String itemTitle; @@ -41,6 +39,14 @@ public class SocialPost extends Thread { super(); } + public String getUserFullName() { + return userFullName; + } + + public void setUserFullName(String userFullName) { + this.userFullName = userFullName; + } + public String getItemID() { return itemID; } @@ -131,11 +137,8 @@ public class SocialPost extends Thread { public void sendSocialPost(boolean notifyUsers) { SecretManager secretManager = SecretManagerProvider.instance.get(); try { - String fullName = CKANUserCache.getCurrrentCKANUser().getNameSurname(); - - StringWriter messageWriter = new StringWriter(); - messageWriter.append(String.format(NOTIFICATION_MESSAGE, fullName, itemTitle, itemURL)); + messageWriter.append(String.format(NOTIFICATION_MESSAGE, userFullName, itemTitle, itemURL)); for(String tag : tags) { tag = tag.trim();