From 5d2750d55c0acf3f7fb76f4b549de5e45d789300 Mon Sep 17 00:00:00 2001 From: Dominik Frantisek Bucik <bucik@ics.muni.cz> Date: Wed, 15 May 2024 17:50:25 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20claim=20modifiers=20in=20?= =?UTF-8?q?arrays=20retain=20only=20unique=20values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oidc/server/userInfo/PerunUserInfoCacheLoader.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java index bb8340173..faff1d902 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java @@ -303,18 +303,22 @@ public class PerunUserInfoCacheLoader extends CacheLoader<UserInfoCacheKey, User return TextNode.valueOf(modifier.modify(claimInJson.asText())); } else if (claimInJson.isArray()) { ArrayNode arrayNode = (ArrayNode) claimInJson; - ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode(); + Set<TextNode> uniqueValues = new HashSet<>(); for (int i = 0; i < arrayNode.size(); i++) { JsonNode item = arrayNode.get(i); if (item.isTextual()) { String original = item.asText(); String modified = modifier.modify(original); if (!modifier.isReplaceOldValue()) { - newArrayNode.add(TextNode.valueOf(original)); + uniqueValues.add(TextNode.valueOf(original)); } - newArrayNode.add(TextNode.valueOf(modified)); + uniqueValues.add(TextNode.valueOf(modified)); } } + ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode(); + for (TextNode child : uniqueValues) { + newArrayNode.add(child); + } return newArrayNode; } else { log.warn("Original value is neither string nor array of strings - cannot modify values"); -- GitLab