[java-opensaml] branch main updated: OSJ-363 - Add activationCondition support to MetadataResolvers
Scott Cantor
cantor.2 at osu.edu
Wed Oct 19 16:23:38 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=5ae72825dff2f4714c32d9bcd3b49701142a44ea
The following commit(s) were added to refs/heads/main by this push:
new 5ae72825d OSJ-363 - Add activationCondition support to MetadataResolvers
5ae72825d is described below
commit 5ae72825dff2f4714c32d9bcd3b49701142a44ea
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Oct 19 12:23:36 2022 -0400
OSJ-363 - Add activationCondition support to MetadataResolvers
https://shibboleth.atlassian.net/browse/OSJ-363
---
.../resolver/ChainingMetadataResolver.java | 34 ++++++++++++++++++++++
.../impl/ChainingMetadataResolverTest.java | 21 ++++++++++---
2 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
index fdcd7d496..f064edb60 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
@@ -23,12 +23,15 @@ import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.profile.criterion.ProfileRequestContextCriterion;
import org.opensaml.saml.metadata.criteria.entity.DetectDuplicateEntityIDsCriterion;
import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
import org.opensaml.saml.saml2.metadata.EntityDescriptor;
@@ -61,6 +64,9 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
/** Strategy for detecting duplicate entityIDs across resolvers. */
@Nonnull private DetectDuplicateEntityIDs detectDuplicateEntityIDs;
+ /** Activation condition. */
+ @Nullable private Predicate<ProfileRequestContext> activationCondition;
+
/** Constructor. */
public ChainingMetadataResolver() {
resolvers = Collections.emptyList();
@@ -110,6 +116,7 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
* @param strategy the strategy to configure
*/
public void setDetectDuplicateEntityIDs(@Nullable final DetectDuplicateEntityIDs strategy) {
+ checkSetterPreconditions();
detectDuplicateEntityIDs = strategy != null ? strategy : DetectDuplicateEntityIDs.Off;
}
@@ -135,6 +142,25 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
throw new UnsupportedOperationException("Metadata filters are not supported on ChainingMetadataResolver");
}
+ /**
+ * Get an activation condition for this resolver.
+ *
+ * @return activation condition
+ */
+ @Nullable public Predicate<ProfileRequestContext> getActivationCondition() {
+ return activationCondition;
+ }
+
+ /**
+ * Set an activation condition for this resolver.
+ *
+ * @param condition condition to set
+ */
+ public void setActivationCondition(@Nullable final Predicate<ProfileRequestContext> condition) {
+ checkSetterPreconditions();
+ activationCondition = condition;
+ }
+
/** {@inheritDoc} */
@Override
@Nullable public EntityDescriptor resolveSingle(@Nullable final CriteriaSet criteria) throws ResolverException {
@@ -155,6 +181,14 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
@Nonnull public Iterable<EntityDescriptor> resolve(@Nullable final CriteriaSet criteria) throws ResolverException {
checkComponentActive();
+ if (activationCondition != null) {
+ final ProfileRequestContextCriterion prc = criteria.get(ProfileRequestContextCriterion.class);
+ if (!activationCondition.test(prc != null ? prc.getProfileRequestContext() : null)) {
+ log.info("Metadata Resolver {}: Bypassed due to failed activation condition", getId());
+ return null;
+ }
+ }
+
DetectDuplicateEntityIDs detectDuplicates = getDetectDuplicateEntityIDs();
if (criteria.contains(DetectDuplicateEntityIDsCriterion.class)) {
detectDuplicates = criteria.get(DetectDuplicateEntityIDsCriterion.class).getValue();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/ChainingMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/ChainingMetadataResolverTest.java
index 2acfc070a..c34f43f5e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/ChainingMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/ChainingMetadataResolverTest.java
@@ -33,8 +33,10 @@ import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import com.google.common.base.Predicates;
+
+import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.resolver.CriteriaSet;
-import net.shibboleth.shared.resolver.ResolverException;
public class ChainingMetadataResolverTest extends XMLObjectBaseTestCase {
@@ -76,12 +78,21 @@ public class ChainingMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setResolvers(resolvers);
metadataProvider.setId("test");
-
+ }
+
+ @Test()
+ public void testInactive() throws Exception {
+ metadataProvider.setActivationCondition(Predicates.alwaysFalse());
metadataProvider.initialize();
+
+ EntityDescriptor descriptor = metadataProvider.resolveSingle(new CriteriaSet(new EntityIdCriterion(entityID)));
+ Assert.assertNull(descriptor, "Retrieved entity descriptor was not null");
}
@Test()
- public void testGetEntityDescriptor() throws ResolverException {
+ public void testGetEntityDescriptor() throws Exception {
+ metadataProvider.initialize();
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(new CriteriaSet(new EntityIdCriterion(entityID)));
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -92,7 +103,9 @@ public class ChainingMetadataResolverTest extends XMLObjectBaseTestCase {
}
@Test()
- public void testFilterDisallowed() {
+ public void testFilterDisallowed() throws ComponentInitializationException {
+ metadataProvider.initialize();
+
try {
metadataProvider.setMetadataFilter(new SchemaValidationFilter(new SAMLSchemaBuilder(SAML1Version.SAML_11)));
Assert.fail("Should fail with an UnsupportedOperationException");
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list