Skip to content
Snippets Groups Projects
Verified Commit c6153460 authored by Dominik Frantisek Bucik's avatar Dominik Frantisek Bucik
Browse files

feat: :guitar: allow claimModifier to replace old value (configurable)

parent 15036d01
No related branches found
No related tags found
1 merge request!392feat: 🎸 allow claimModifier to replace old value (configurable)
Pipeline #424620 passed
package cz.muni.ics.oidc.server.claims; package cz.muni.ics.oidc.server.claims;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
...@@ -15,9 +16,13 @@ public abstract class ClaimModifier { ...@@ -15,9 +16,13 @@ public abstract class ClaimModifier {
private final String claimName; private final String claimName;
private final String modifierName; private final String modifierName;
@Getter
private final boolean replaceOldValue;
public ClaimModifier(ClaimModifierInitContext ctx) { public ClaimModifier(ClaimModifierInitContext ctx) {
this.claimName = ctx.getClaimName(); this.claimName = ctx.getClaimName();
this.modifierName = ctx.getModifierName(); this.modifierName = ctx.getModifierName();
this.replaceOldValue = ctx.isReplaceOldValue();
log.debug("{} - claim modifier initialized", ctx.getClaimName()); log.debug("{} - claim modifier initialized", ctx.getClaimName());
} }
......
...@@ -15,12 +15,13 @@ import java.util.Properties; ...@@ -15,12 +15,13 @@ import java.util.Properties;
public class ClaimModifierInitContext extends ClaimInitContext { public class ClaimModifierInitContext extends ClaimInitContext {
private final String modifierName; private final String modifierName;
private final boolean replaceOldValue;
public ClaimModifierInitContext(String propertyPrefix, Properties properties, String claimName, String modifierName) { public ClaimModifierInitContext(String propertyPrefix, Properties properties, String claimName, String modifierName) {
super(propertyPrefix, properties, claimName); super(propertyPrefix, properties, claimName);
this.modifierName = modifierName; this.modifierName = modifierName;
this.replaceOldValue = Boolean.parseBoolean(getProperty("replaceOldValue", "true"));
log.debug("{}:{} - context: property prefix for modifier configured to '{}'", log.debug("{}:{} - context: property prefix for modifier configured to '{}'",
claimName, modifierName, propertyPrefix); claimName, modifierName, propertyPrefix);
} }
......
...@@ -303,15 +303,19 @@ public class PerunUserInfoCacheLoader extends CacheLoader<UserInfoCacheKey, User ...@@ -303,15 +303,19 @@ public class PerunUserInfoCacheLoader extends CacheLoader<UserInfoCacheKey, User
return TextNode.valueOf(modifier.modify(claimInJson.asText())); return TextNode.valueOf(modifier.modify(claimInJson.asText()));
} else if (claimInJson.isArray()) { } else if (claimInJson.isArray()) {
ArrayNode arrayNode = (ArrayNode) claimInJson; ArrayNode arrayNode = (ArrayNode) claimInJson;
ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode();
for (int i = 0; i < arrayNode.size(); i++) { for (int i = 0; i < arrayNode.size(); i++) {
JsonNode item = arrayNode.get(i); JsonNode item = arrayNode.get(i);
if (item.isTextual()) { if (item.isTextual()) {
String original = item.asText(); String original = item.asText();
String modified = modifier.modify(original); String modified = modifier.modify(original);
arrayNode.set(i, TextNode.valueOf(modified)); if (!modifier.isReplaceOldValue()) {
newArrayNode.add(TextNode.valueOf(original));
}
newArrayNode.add(TextNode.valueOf(modified));
} }
} }
return arrayNode; return newArrayNode;
} else { } else {
log.warn("Original value is neither string nor array of strings - cannot modify values"); log.warn("Original value is neither string nor array of strings - cannot modify values");
return orig; return orig;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment