[java-shib-attribute] 01/02: JSATTR-39 Implement wildcard support in attribute filter
Rod Widdowson
rdw at steadingsoftware.com
Thu Apr 17 15:23:18 UTC 2025
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch main
in repository java-shib-attribute.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=badda0dd86e67e39f4b69c061512123f9b1b2bf8
commit badda0dd86e67e39f4b69c061512123f9b1b2bf8
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Thu Apr 17 09:46:22 2025 +0100
JSATTR-39 Implement wildcard support in attribute filter
https://shibboleth.atlassian.net/browse/JSATTR-39
Add a set into the work context to accumulate every attribute ID as it is filtered.
---
.../attribute/filter/AttributeFilterPolicy.java | 6 ++++++
.../filter/context/AttributeFilterWorkContext.java | 20 +++++++++++++++++-
.../context/AttributeFilterWorkContextTest.java | 24 ++++++++++++++++++----
3 files changed, 45 insertions(+), 5 deletions(-)
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
index a4d266900..0dc5b9f4d 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
@@ -27,6 +27,7 @@ import org.slf4j.Logger;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.filter.PolicyRequirementRule.Tristate;
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
+import net.shibboleth.idp.attribute.filter.context.AttributeFilterWorkContext;
import net.shibboleth.shared.annotation.ParameterName;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.annotation.constraint.NotLive;
@@ -139,6 +140,10 @@ public final class AttributeFilterPolicy extends AbstractIdentifiedInitializable
Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
+ final AttributeFilterWorkContext filterWorkContext = Constraint.isNotNull(
+ filterContext.getSubcontext(AttributeFilterWorkContext.class),
+ "Attribute filter work context can not be null");
+
if (!isApplicable(filterContext)) {
return;
}
@@ -149,6 +154,7 @@ public final class AttributeFilterPolicy extends AbstractIdentifiedInitializable
IdPAttribute attribute;
for (final AttributeRule valuePolicy : valuePolicies) {
+ filterWorkContext.addFilteredAttributeId(valuePolicy.getAttributeId());
attribute = attributes.get(valuePolicy.getAttributeId());
if (attribute != null) {
if (!attribute.getValues().isEmpty()) {
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
index 3078c217e..643117ca0 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
@@ -16,6 +16,7 @@ package net.shibboleth.idp.attribute.filter.context;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@@ -53,10 +54,14 @@ public final class AttributeFilterWorkContext extends BaseContext {
/** Values, for a given attribute, that are not permitted to be released. */
@Nonnull private final Map<String, Set<IdPAttributeValue>> deniedValues;
+ /** List of all Attribute names mentioned by a AttributeRule inside an active PolicyRule. */
+ @Nonnull private final Set<String> filteredAttributeIds;
+
/** Constructor. */
public AttributeFilterWorkContext() {
permittedValues = new HashMap<>();
deniedValues = new HashMap<>();
+ filteredAttributeIds = new HashSet<>();
}
/**
@@ -177,4 +182,17 @@ public final class AttributeFilterWorkContext extends BaseContext {
}
}
-}
\ No newline at end of file
+ /** Register an attribute ID as having been considered for filtering.
+ * @param attributeId the ID
+ */
+ public void addFilteredAttributeId(@Nonnull final String attributeId) {
+ filteredAttributeIds.add(attributeId);
+ }
+
+ /** Return all the attribute ids for activated AttributeRules.
+ * @return the set made up from multiple calls to {@link #addFilteredAttributeId(String)}
+ */
+ @Nonnull public Set<String> getFilteredAttributeIds() {
+ return filteredAttributeIds;
+ }
+}
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
index 241bdcff0..a070b5b3b 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
@@ -14,6 +14,9 @@
package net.shibboleth.idp.attribute.filter.context;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
import java.util.ArrayList;
import java.util.Arrays;
@@ -101,16 +104,16 @@ public class AttributeFilterWorkContextTest {
parent.setPrefilteredIdPAttributes(CollectionSupport.singletonList(attribute1));
context.addDeniedIdPAttributeValues("one", CollectionSupport.singletonList(aStringAttributeValue));
- Assert.assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
+ assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
context.addDeniedIdPAttributeValues("one", null);
- Assert.assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
+ assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
context.addDeniedIdPAttributeValues("one", new ArrayList<IdPAttributeValue>());
- Assert.assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
+ assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
context.addDeniedIdPAttributeValues("one", CollectionSupport.singletonList(bStringAttributeValue));
- Assert.assertEquals(context.getDeniedAttributeValues().get("one").size(), 2);
+ assertEquals(context.getDeniedAttributeValues().get("one").size(), 2);
try {
context.addDeniedIdPAttributeValues("", CollectionSupport.singletonList(bStringAttributeValue));
@@ -134,4 +137,17 @@ public class AttributeFilterWorkContextTest {
}
}
+ @Test public void testFilteredAttriutes() {
+
+ final AttributeFilterContext parent = new AttributeFilterContext();
+ final AttributeFilterWorkContext context = parent.ensureSubcontext(AttributeFilterWorkContext.class);
+
+ assertTrue(context.getFilteredAttributeIds().isEmpty());
+
+ context.addFilteredAttributeId("one");
+ context.addFilteredAttributeId("two");
+ context.addFilteredAttributeId("one");
+
+ assertEquals(context.getFilteredAttributeIds().size(), 2);
+ }
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list