[java-identity-provider] branch master updated: IDP-1301 - Expose Entity Attributes by default to Velocity Templates
Scott Cantor
cantor.2 at osu.edu
Mon Dec 16 20:34:18 EST 2019
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=bd581f56fa3d57534a75ca32273b61dbd61b0b07
The following commit(s) were added to refs/heads/master by this push:
new bd581f5 IDP-1301 - Expose Entity Attributes by default to Velocity Templates
bd581f5 is described below
commit bd581f56fa3d57534a75ca32273b61dbd61b0b07
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Dec 16 19:34:14 2019 -0600
IDP-1301 - Expose Entity Attributes by default to Velocity Templates
https://issues.shibboleth.net/jira/browse/IDP-1301
---
.../idp/attribute/AttributesMapContainer.java | 46 ++++++++++++++++++++--
.../spring/AttributeMappingNodeProcessorTest.java | 4 ++
.../idp/ui/context/RelyingPartyUIContext.java | 35 ++++++++++++++++
3 files changed, 81 insertions(+), 4 deletions(-)
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/AttributesMapContainer.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/AttributesMapContainer.java
index b39c52f..aac2996 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/AttributesMapContainer.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/AttributesMapContainer.java
@@ -17,9 +17,22 @@
package net.shibboleth.idp.attribute;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import com.google.common.collect.Multimap;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+
/**
* Container for decoded attributes. This gives us a distinguished class to look for in the
* {@link org.opensaml.core.xml.XMLObject#getObjectMetadata()}.
@@ -27,20 +40,45 @@ import com.google.common.collect.Multimap;
public final class AttributesMapContainer implements Supplier<Multimap<String,IdPAttribute>> {
/** The map we are encapsulating.*/
- private final Multimap<String,IdPAttribute> providedValue;
+ @Nullable @NonnullElements private final Multimap<String,IdPAttribute> providedValue;
/**
* Constructor.
*
* @param value the value to return.
*/
- public AttributesMapContainer(final Multimap<String,IdPAttribute> value) {
+ public AttributesMapContainer(@Nullable @NonnullElements final Multimap<String,IdPAttribute> value) {
providedValue = value;
}
/** {@inheritDoc} */
- @Override public Multimap<String,IdPAttribute> get() {
+ @Override
+ @Nullable @NonnullElements public Multimap<String,IdPAttribute> get() {
return providedValue;
}
-}
+ /**
+ * Shorthand method that returns a collapsed copy of the String values of a given
+ * IdPAttribute in the container, or an empty collection.
+ *
+ * @param id attribute ID
+ *
+ * @return unmodifiable collection of string values
+ */
+ @Nonnull @NonnullElements @NotLive @Unmodifiable public Collection<String> getStringValues(
+ @Nonnull @NotEmpty final String id) {
+
+ if (providedValue != null) {
+ return providedValue.get(id)
+ .stream()
+ .map(IdPAttribute::getValues)
+ .flatMap(List::stream)
+ .filter(StringAttributeValue.class::isInstance)
+ .map(StringAttributeValue.class::cast)
+ .map(StringAttributeValue::getValue)
+ .collect(Collectors.toUnmodifiableList());
+ }
+ return Collections.emptyList();
+ }
+
+}
\ No newline at end of file
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java
index 063703d..d50f1ac 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java
@@ -21,6 +21,7 @@ import static org.testng.Assert.*;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import org.opensaml.core.xml.XMLObjectBaseTestCase;
@@ -122,6 +123,9 @@ public class AttributeMappingNodeProcessorTest extends XMLObjectBaseTestCase {
StringAttributeValue sav = (StringAttributeValue) attr.getValues().iterator().next();
assertEquals(sav.getValue(), "http://id.incommon.org/category/research-and-scholarship");
+
+ assertEquals(container.getStringValues("http://macedir.org/entity-category"),
+ Collections.singletonList("http://id.incommon.org/category/research-and-scholarship"));
}
@Test public void requiredAttributes() throws FilterException {
diff --git a/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java b/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java
index 9853893..6fa6bf9 100644
--- a/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java
+++ b/idp-ui/src/main/java/net/shibboleth/idp/ui/context/RelyingPartyUIContext.java
@@ -19,7 +19,9 @@ package net.shibboleth.idp.ui.context;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
@@ -30,6 +32,7 @@ import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import org.opensaml.core.xml.XMLObject;
import org.opensaml.messaging.context.BaseContext;
import org.opensaml.saml.ext.saml2mdui.Logo;
import org.opensaml.saml.ext.saml2mdui.UIInfo;
@@ -42,11 +45,14 @@ import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import net.shibboleth.idp.attribute.AttributesMapContainer;
import net.shibboleth.idp.saml.metadata.ACSUIInfo;
import net.shibboleth.idp.saml.metadata.IdPUIInfo;
import net.shibboleth.idp.saml.metadata.OrganizationUIInfo;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -127,6 +133,35 @@ public final class RelyingPartyUIContext extends BaseContext {
}
/**
+ * Shorthand method that returns a collapsed copy of the String values of a given
+ * mapped Entity Attribute in the metadata, or an empty collection.
+ *
+ * @param id attribute ID
+ *
+ * @return unmodifiable collection of string values
+ *
+ * @since 4.0.0
+ */
+ @Nonnull @NonnullElements @NotLive @Unmodifiable public Collection<String> getEntityAttributeStringValues(
+ @Nonnull @NotEmpty final String id) {
+
+ XMLObject object = getRPEntityDescriptor();
+ if (object == null) {
+ return Collections.emptyList();
+ }
+
+ final List<String> accumulator = new ArrayList<>();
+
+ while (object != null) {
+ object.getObjectMetadata().get(AttributesMapContainer.class).forEach(
+ c -> accumulator.addAll(c.getStringValues(id)));
+ object = object.getParent();
+ }
+
+ return List.copyOf(accumulator);
+ }
+
+ /**
* Get the {@link ACSUIInfo} for the request.
*
* @return Returns the RP's {@link ACSUIInfo}.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list