[java-identity-provider] 01/02: IDP-1486 Collapse the RelyingPartyMetadata Provider
Rod Widdowson
rdw at steadingsoftware.com
Fri Aug 30 10:01:11 EDT 2019
This is an automated email from the git hooks/post-receive script.
rdw 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=da2e29da9dc6509fda1e98ff5b5234c86966f9d7
commit da2e29da9dc6509fda1e98ff5b5234c86966f9d7
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Aug 30 14:24:54 2019 +0100
IDP-1486 Collapse the RelyingPartyMetadata Provider
https://issues.shibboleth.net/jira/browse/IDP-1486
We replace this with a container (which can also be a serviceable component) but which can be
restricted to the Spring project (since this is the only place we need it)
---
.../metadata/AbstractMetadataProviderParser.java | 13 +-
.../metadata/MetadataProviderContainer.java | 139 +++++++++++
.../impl/MetadataResolverServiceStrategy.java | 47 ++--
.../NodeProcessingAttachingBeanPostProcessor.java | 4 +-
.../metadata/AbstractMetadataParserTest.java | 3 +-
.../DynamicHTTPMetadataProviderParserTest.java | 15 +-
.../relyingparty/metadata/EmptyChainService.java | 10 +-
.../metadata/FilesystemMetadataParserTest.java | 10 +-
.../LocalDynamicMetadataProviderParserTest.java | 3 +-
.../metadata/RelyingPartyMetadataProvider.java | 261 ---------------------
.../impl/MetadataResolverServiceGaugeSet.java | 14 +-
.../idp/saml/profile/impl/ReloadMetadata.java | 31 +--
12 files changed, 202 insertions(+), 348 deletions(-)
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataProviderParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataProviderParser.java
index 890a0d7..cd07395 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataProviderParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataProviderParser.java
@@ -33,7 +33,6 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import net.shibboleth.ext.spring.util.SpringSupport;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
import net.shibboleth.utilities.java.support.xml.DOMTypeSupport;
import net.shibboleth.utilities.java.support.xml.ElementSupport;
@@ -41,10 +40,8 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
/**
* Parser for the MetadataProviderType in the <code>urn:mace:shibboleth:2.0:metadata</code> namespace.
*
- * This also handles the ambivalence of where the <MetadataProvider> can be found. If it is found inside a
- * <RelyingPartyGroup> or a <ChainingMetadataPRovider> then we just emit a MetadataResolver of the correct
- * type and the outer parsers will deal with the rest. If we are the top most element then we need to summon up a
- * {@link RelyingPartyMetadataProvider} and inject what we would usually create into that.
+ * If we are the top most element then we need to summon up a
+ * {@link MetadataProviderContainer} and inject what we would usually create into that.
*/
public abstract class AbstractMetadataProviderParser extends AbstractSingleBeanDefinitionParser {
@@ -89,7 +86,7 @@ public abstract class AbstractMetadataProviderParser extends AbstractSingleBeanD
/**
* Is this the element at the top of the file? Yes, if it has no parent. In
- * this situation we need to wrap the element in a {@link RelyingPartyMetadataProvider}.
+ * this situation we need to wrap the element in a {@link MetadataProviderContainer}.
*
* @param element the element.
* @return whether it is the outmost element.
@@ -113,9 +110,9 @@ public abstract class AbstractMetadataProviderParser extends AbstractSingleBeanD
protected abstract Class<? extends MetadataResolver> getNativeBeanClass(Element element);
/** {@inheritDoc} */
- @Override protected final Class<? extends MetadataResolver> getBeanClass(final Element element) {
+ @Override protected final Class<?> getBeanClass(final Element element) {
if (isTopMost(element)) {
- return RelyingPartyMetadataProvider.class;
+ return MetadataProviderContainer.class;
}
return getNativeBeanClass(element);
}
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/MetadataProviderContainer.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/MetadataProviderContainer.java
new file mode 100644
index 0000000..e5c1801
--- /dev/null
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/MetadataProviderContainer.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.profile.spring.relyingparty.metadata;
+
+import java.util.Objects;
+
+import javax.annotation.Nonnull;
+
+import org.opensaml.saml.metadata.resolver.MetadataResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.shibboleth.ext.spring.service.AbstractServiceableComponent;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
+
+/**
+ * This class is a sortable container of {@link MetadataResolver}s, wrapped into a serviceable component.
+ */
+public class MetadataProviderContainer extends AbstractServiceableComponent<MetadataResolver>
+ implements Comparable<MetadataProviderContainer> {
+
+ /** If we autogenerate a sort key it comes from this count. */
+ private static int sortKeyValue;
+
+ /** Class logger. */
+ private final Logger log = LoggerFactory.getLogger(MetadataProviderContainer.class);
+
+ /** The embedded resolver. */
+ @NonnullAfterInit private MetadataResolver resolver;
+
+ /** The key by which we sort the provider. */
+ @NonnullAfterInit private Integer sortKey;
+
+
+ /**
+ * Set the sort key.
+ *
+ * @param key what to set
+ */
+ public void setSortKey(final int key) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+ sortKey = key;
+ }
+
+ /**
+ * Set the {@link MetadataResolver} to embed.
+ *
+ * @param theResolver The {@link MetadataResolver} to embed.
+ */
+ @Nonnull public void setEmbeddedResolver(@Nonnull final MetadataResolver theResolver) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+ resolver = Constraint.isNotNull(theResolver, "MetadataResolver cannot be null");
+ }
+
+ /**
+ * Return what we are build around. Used for testing.
+ *
+ * @return the contained resolver.
+ */
+ @Nonnull public MetadataResolver getEmbeddedResolver() {
+ return resolver;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void doInitialize() throws ComponentInitializationException {
+ setId(resolver.getId());
+ super.doInitialize();
+ if (null == resolver) {
+ throw new ComponentInitializationException("MetadataResolver cannot be null");
+ }
+
+ if (null == sortKey) {
+ synchronized (MetadataProviderContainer.class) {
+ sortKeyValue++;
+ sortKey = sortKeyValue;
+ }
+ log.info("Top level Metadata Provider '{}' did not have a sort key; giving it value '{}'",
+ getId(), sortKey);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public int compareTo(final MetadataProviderContainer other) {
+ ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+ final int result = sortKey.compareTo(other.sortKey);
+ if (result != 0) {
+ return result;
+ }
+ if (equals(other)) {
+ return 0;
+ }
+ return getId().compareTo(other.getId());
+ }
+
+ /**
+ * {@inheritDoc}. We are within a spring context and so equality can be determined by ID, however we also test by
+ * sortKey just in case.
+ */
+ @Override public boolean equals(final Object other) {
+ if (null == other) {
+ return false;
+ }
+ if (!(other instanceof MetadataProviderContainer)) {
+ return false;
+ }
+ final MetadataProviderContainer otherRp = (MetadataProviderContainer) other;
+
+ return Objects.equals(otherRp.sortKey, sortKey) && Objects.equals(getId(), otherRp.getId());
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return com.google.common.base.Objects.hashCode(sortKey, getId());
+ }
+
+ /** {@inheritDoc} */
+ public MetadataResolver getComponent() {
+ return getEmbeddedResolver();
+ }
+}
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/MetadataResolverServiceStrategy.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/MetadataResolverServiceStrategy.java
index 1ede21e..7f563a5 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/MetadataResolverServiceStrategy.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/MetadataResolverServiceStrategy.java
@@ -22,25 +22,26 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
+import java.util.stream.Collectors;
import javax.annotation.Nullable;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
+import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
+import org.opensaml.saml.metadata.resolver.MetadataResolver;
+import org.springframework.beans.factory.BeanCreationException;
+import org.springframework.context.ApplicationContext;
+
+import net.shibboleth.idp.profile.spring.relyingparty.metadata.MetadataProviderContainer;
import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
import net.shibboleth.utilities.java.support.service.ServiceException;
import net.shibboleth.utilities.java.support.service.ServiceableComponent;
-import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
-import org.opensaml.saml.metadata.resolver.MetadataResolver;
-import org.springframework.beans.factory.BeanCreationException;
-import org.springframework.context.ApplicationContext;
-
/**
* Strategy for summoning up a {@link MetadataResolver} from a populated {@link ApplicationContext}. <br/>
- * This is made somewhat complex by the need to chain multiple, top level Metadata Resolvers, but to not combine, non
- * top level resolvers. The parser will create a {@link RelyingPartyMetadataProvider} for each top level resolver. If we
+ * This is made somewhat complex by the need to chain multiple, top level Metadata Resolvers, but to not combine non
+ * top level resolvers. The parser will create a {@link MetadataProviderContainer} for each top level resolver. If we
* encounter but one we are done (it is a {@link ServiceableComponent} already), otherwise we need to chain all the
* children together and wrap them into a Serviceable Component.
*
@@ -50,19 +51,19 @@ public class MetadataResolverServiceStrategy extends AbstractIdentifiableInitial
/** {@inheritDoc} */
@Nullable public ServiceableComponent<MetadataResolver> apply(@Nullable final ApplicationContext appContext) {
- final Collection<RelyingPartyMetadataProvider> resolvers =
- appContext.getBeansOfType(RelyingPartyMetadataProvider.class).values();
+ final Collection<MetadataProviderContainer> containers =
+ appContext.getBeansOfType(MetadataProviderContainer.class).values();
- if (resolvers.isEmpty()) {
+ if (containers.isEmpty()) {
throw new ServiceException("Reload did not produce any bean of type"
- + RelyingPartyMetadataProvider.class.getName());
+ + MetadataProviderContainer.class.getName());
}
- if (1 == resolvers.size()) {
+ if (1 == containers.size()) {
// done
- return resolvers.iterator().next();
+ return containers.iterator().next();
}
// initialize so we can sort
- for (final RelyingPartyMetadataProvider resolver:resolvers) {
+ for (final MetadataProviderContainer resolver:containers) {
try {
resolver.initialize();
} catch (final ComponentInitializationException e) {
@@ -70,15 +71,17 @@ public class MetadataResolverServiceStrategy extends AbstractIdentifiableInitial
}
}
- final List<RelyingPartyMetadataProvider> resolverList = new ArrayList<>(resolvers.size());
- resolverList.addAll(resolvers);
- Collections.sort(resolverList);
+ final List<MetadataProviderContainer> containerList = new ArrayList<>(containers.size());
+ containerList.addAll(containers);
+ Collections.sort(containerList);
final ChainingMetadataResolver chain = new ChainingMetadataResolver();
try {
- chain.setResolvers(resolverList);
- chain.setId("MultiFileResolverFor:"+resolvers.size()+":Resources");
+ chain.setResolvers(containerList.stream().
+ map(MetadataProviderContainer::getEmbeddedResolver).
+ collect(Collectors.toList()));
+ chain.setId("MultiFileResolverFor:"+containers.size()+":Resources");
chain.initialize();
- final RelyingPartyMetadataProvider result = new RelyingPartyMetadataProvider();
+ final MetadataProviderContainer result = new MetadataProviderContainer();
result.setEmbeddedResolver(chain);
result.initialize();
return result;
@@ -86,4 +89,4 @@ public class MetadataResolverServiceStrategy extends AbstractIdentifiableInitial
throw new ServiceException("Chaining constructor create failed", e);
}
}
-}
\ No newline at end of file
+}
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/NodeProcessingAttachingBeanPostProcessor.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/NodeProcessingAttachingBeanPostProcessor.java
index ac8da77..9cbf430 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/NodeProcessingAttachingBeanPostProcessor.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/NodeProcessingAttachingBeanPostProcessor.java
@@ -34,7 +34,6 @@ import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
import net.shibboleth.idp.saml.metadata.impl.AttributeMappingNodeProcessor;
import net.shibboleth.idp.saml.metadata.impl.ScopesNodeProcessor;
import net.shibboleth.idp.saml.metadata.impl.UIInfoNodeProcessor;
@@ -70,8 +69,7 @@ public class NodeProcessingAttachingBeanPostProcessor implements BeanPostProcess
// Checkstyle: CyclomaticComplexity OFF
/** {@inheritDoc} */
@Override public Object postProcessBeforeInitialization(final Object bean, final String beanName) {
- if (!(bean instanceof MetadataResolver) || bean instanceof ChainingMetadataResolver
- || bean instanceof RelyingPartyMetadataProvider) {
+ if (!(bean instanceof MetadataResolver) || bean instanceof ChainingMetadataResolver) {
// Do not attach to beans which just include other ones.
return bean;
}
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataParserTest.java
index 7ef9f3d..065a2ae 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractMetadataParserTest.java
@@ -40,7 +40,6 @@ import org.testng.annotations.BeforeSuite;
import net.shibboleth.ext.spring.util.ApplicationContextBuilder;
import net.shibboleth.ext.spring.util.SpringSupport;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
/**
@@ -155,7 +154,7 @@ public class AbstractMetadataParserTest extends OpenSAMLInitBaseTestCase {
return result;
}
- final RelyingPartyMetadataProvider rpProvider = context.getBean(RelyingPartyMetadataProvider.class);
+ final MetadataProviderContainer rpProvider = context.getBean(MetadataProviderContainer.class);
return claz.cast(rpProvider.getEmbeddedResolver());
}
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/DynamicHTTPMetadataProviderParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/DynamicHTTPMetadataProviderParserTest.java
index dd7c089..c2f8996 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/DynamicHTTPMetadataProviderParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/DynamicHTTPMetadataProviderParserTest.java
@@ -25,10 +25,6 @@ import java.util.Collections;
import java.util.function.Function;
import java.util.function.Predicate;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
-import net.shibboleth.utilities.java.support.repository.RepositorySupport;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-
import org.opensaml.core.criterion.EntityIdCriterion;
import org.opensaml.core.xml.persist.FilesystemLoadSaveManager;
import org.opensaml.core.xml.persist.XMLObjectLoadSaveManager;
@@ -45,6 +41,9 @@ import org.springframework.mock.env.MockPropertySource;
import org.testng.Assert;
import org.testng.annotations.Test;
+import net.shibboleth.utilities.java.support.repository.RepositorySupport;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+
public class DynamicHTTPMetadataProviderParserTest extends AbstractMetadataParserTest {
private static final String PROP_MDURL = "metadataURL";
@@ -134,8 +133,8 @@ public class DynamicHTTPMetadataProviderParserTest extends AbstractMetadataParse
final ApplicationContext appContext = getApplicationContext("dynamicResolverContext",
"dynamicPersistentCacheDirectory.xml", "beans.xml", "httpClient.xml");
- final RelyingPartyMetadataProvider rpProvider =
- appContext.getBean("dynamicPersistentCacheParamsDirectory", RelyingPartyMetadataProvider.class);
+ final MetadataProviderContainer rpProvider =
+ appContext.getBean("dynamicPersistentCacheParamsDirectory", MetadataProviderContainer.class);
final FunctionDrivenDynamicHTTPMetadataResolver resolver =
FunctionDrivenDynamicHTTPMetadataResolver.class.cast(rpProvider.getEmbeddedResolver());
Assert.assertNotNull(resolver);
@@ -163,8 +162,8 @@ public class DynamicHTTPMetadataProviderParserTest extends AbstractMetadataParse
final ApplicationContext appContext = getApplicationContext("dynamicResolverContext",
"dynamicPersistentCacheBean.xml", "beans.xml", "httpClient.xml");
- final RelyingPartyMetadataProvider rpProvider =
- appContext.getBean("dynamicPersistentCacheParamsBean", RelyingPartyMetadataProvider.class);
+ final MetadataProviderContainer rpProvider =
+ appContext.getBean("dynamicPersistentCacheParamsBean", MetadataProviderContainer.class);
final FunctionDrivenDynamicHTTPMetadataResolver resolver =
FunctionDrivenDynamicHTTPMetadataResolver.class.cast(rpProvider.getEmbeddedResolver());
Assert.assertNotNull(resolver);
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/EmptyChainService.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/EmptyChainService.java
index 441d345..5210816 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/EmptyChainService.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/EmptyChainService.java
@@ -19,15 +19,14 @@ package net.shibboleth.idp.profile.spring.relyingparty.metadata;
import java.io.IOException;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
-
import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
import org.testng.Assert;
import org.testng.annotations.Test;
+import net.shibboleth.utilities.java.support.service.ReloadableService;
+import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+
/**
*
*/
@@ -37,8 +36,7 @@ public class EmptyChainService extends AbstractMetadataParserTest {
final ReloadableService<RefreshableMetadataResolver> service = getBean(ReloadableService.class, "empty-chain-svc.xml");
final ServiceableComponent<RefreshableMetadataResolver> comp = service.getServiceableComponent();
try {
- final RelyingPartyMetadataProvider rpmp = (RelyingPartyMetadataProvider) comp.getComponent();
- final ChainingMetadataResolver chain = (ChainingMetadataResolver) rpmp.getEmbeddedResolver();
+ final ChainingMetadataResolver chain = (ChainingMetadataResolver) comp.getComponent();
Assert.assertTrue(chain.getResolvers().isEmpty());
} finally {
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FilesystemMetadataParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FilesystemMetadataParserTest.java
index 65fa08d..dbc6af4 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FilesystemMetadataParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FilesystemMetadataParserTest.java
@@ -28,8 +28,6 @@ import org.springframework.context.ApplicationContext;
import org.testng.Assert;
import org.testng.annotations.Test;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
-
public class FilesystemMetadataParserTest extends AbstractMetadataParserTest {
@Test public void entity() throws Exception {
@@ -98,8 +96,8 @@ public class FilesystemMetadataParserTest extends AbstractMetadataParserTest {
ApplicationContext appContext = getApplicationContext("filesystemResolverContext",
"filePredicatesOptions.xml", "beans.xml");
- RelyingPartyMetadataProvider rpProvider =
- appContext.getBean("filePredicatesOptions", RelyingPartyMetadataProvider.class);
+ MetadataProviderContainer rpProvider =
+ appContext.getBean("filePredicatesOptions", MetadataProviderContainer.class);
FilesystemMetadataResolver resolver =
FilesystemMetadataResolver.class.cast(rpProvider.getEmbeddedResolver());
@@ -116,8 +114,8 @@ public class FilesystemMetadataParserTest extends AbstractMetadataParserTest {
ApplicationContext appContext = getApplicationContext("filesystemResolverContext",
"fileBadRVPO.xml", "beans.xml");
- RelyingPartyMetadataProvider rpProvider =
- appContext.getBean("BadRVPO", RelyingPartyMetadataProvider.class);
+ MetadataProviderContainer rpProvider =
+ appContext.getBean("BadRVPO", MetadataProviderContainer.class);
FilesystemMetadataResolver resolver =
FilesystemMetadataResolver.class.cast(rpProvider.getEmbeddedResolver());
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/LocalDynamicMetadataProviderParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/LocalDynamicMetadataProviderParserTest.java
index 8cd8939..1afed4e 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/LocalDynamicMetadataProviderParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/LocalDynamicMetadataProviderParserTest.java
@@ -38,7 +38,6 @@ import org.testng.annotations.Test;
import com.google.common.util.concurrent.Uninterruptibles;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
import net.shibboleth.utilities.java.support.codec.StringDigester;
import net.shibboleth.utilities.java.support.codec.StringDigester.OutputFormat;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -116,7 +115,7 @@ public class LocalDynamicMetadataProviderParserTest extends AbstractMetadataPars
XMLObjectLoadSaveManager<XMLObject> sourceManager =
appContext.getBean("metadata.LocalDynamicSourceManager", XMLObjectLoadSaveManager.class);
- RelyingPartyMetadataProvider rpProvider = appContext.getBean("localDynamicWithManagerAndGenerator", RelyingPartyMetadataProvider.class);
+ MetadataProviderContainer rpProvider = appContext.getBean("localDynamicWithManagerAndGenerator", MetadataProviderContainer.class);
LocalDynamicMetadataResolver resolver = (LocalDynamicMetadataResolver) rpProvider.getEmbeddedResolver();
CriteriaSet criteria = new CriteriaSet(new EntityIdCriterion(entityID));
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java
deleted file mode 100644
index d061764..0000000
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements. See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.saml.metadata;
-
-import java.time.Instant;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import java.util.Objects;
-
-import net.shibboleth.ext.spring.service.AbstractServiceableComponent;
-import net.shibboleth.utilities.java.support.annotation.ParameterName;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
-import org.opensaml.saml.metadata.resolver.ClearableMetadataResolver;
-import org.opensaml.saml.metadata.resolver.MetadataResolver;
-import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
-import org.opensaml.saml.saml2.metadata.EntityDescriptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * This class exists primarily to allow the parsing of relying-party.xml to create a serviceable implementation of
- * {@link MetadataResolver}.
- */
-public class RelyingPartyMetadataProvider extends AbstractServiceableComponent<MetadataResolver> implements
- RefreshableMetadataResolver, ClearableMetadataResolver, Comparable<RelyingPartyMetadataProvider> {
-
- /** If we autogenerate a sort key it comes from this count. */
- private static int sortKeyValue;
-
- /** Class logger. */
- private final Logger log = LoggerFactory.getLogger(RelyingPartyMetadataProvider.class);
-
- /** The embedded resolver. */
- @NonnullAfterInit private MetadataResolver resolver;
-
- /** The key by which we sort the provider. */
- @NonnullAfterInit private Integer sortKey;
-
- /**
- * Constructor.
- *
- * @param child The {@link MetadataResolver} to embed.
- * @deprecated use properties and {@link #RelyingPartyMetadataProvider()}.
- */
- @Deprecated public RelyingPartyMetadataProvider(
- @Nonnull @ParameterName(name="child") final MetadataResolver child) {
- DeprecationSupport.warnOnce(ObjectType.METHOD, "RelyingPartyMetadataProvider(MetadataResolver)", null, null);
- resolver = Constraint.isNotNull(child, "MetadataResolver cannot be null");
- }
-
- /** Constructor. */
- public RelyingPartyMetadataProvider() {
- }
-
- /**
- * Set the sort key.
- *
- * @param key what to set
- */
- public void setSortKey(final int key) {
- ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
- sortKey = key;
- }
-
- /**
- * Set the {@link MetadataResolver} to embed.
- *
- * @param theResolver The {@link MetadataResolver} to embed.
- */
- @Nonnull public void setEmbeddedResolver(@Nonnull final MetadataResolver theResolver) {
- ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
- resolver = Constraint.isNotNull(theResolver, "MetadataResolver cannot be null");
- }
-
- /**
- * Return what we are build around. Used for testing.
- *
- * @return the parameter we got as a constructor
- */
- @Nonnull public MetadataResolver getEmbeddedResolver() {
- return resolver;
- }
-
- /** {@inheritDoc} */
- @Override @Nonnull public Iterable<EntityDescriptor> resolve(@Nullable final CriteriaSet criteria)
- throws ResolverException {
- ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
- return resolver.resolve(criteria);
- }
-
- /** {@inheritDoc} */
- @Override @Nullable public EntityDescriptor resolveSingle(@Nullable final CriteriaSet criteria)
- throws ResolverException {
- ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
- return resolver.resolveSingle(criteria);
- }
-
- /** {@inheritDoc} */
- @Override public boolean isRequireValidMetadata() {
- return resolver.isRequireValidMetadata();
- }
-
- /** {@inheritDoc} */
- @Override public void setRequireValidMetadata(final boolean requireValidMetadata) {
- ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
- resolver.setRequireValidMetadata(requireValidMetadata);
-
- }
-
- /** {@inheritDoc} */
- @Override @Nullable public MetadataFilter getMetadataFilter() {
- return resolver.getMetadataFilter();
- }
-
- /** {@inheritDoc} */
- @Override public void setMetadataFilter(@Nullable final MetadataFilter newFilter) {
- ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
- resolver.setMetadataFilter(newFilter);
- }
-
- /** {@inheritDoc} */
- @Override protected void doInitialize() throws ComponentInitializationException {
- setId(resolver.getId());
- super.doInitialize();
- if (null == resolver) {
- throw new ComponentInitializationException("MetadataResolver cannot be null");
- }
-
- if (null == sortKey) {
- synchronized (this) {
- sortKeyValue++;
- sortKey = sortKeyValue;
- }
- log.info("Top level Metadata Provider '{}' did not have a sort key; giving it value '{}'",
- getId(), sortKey);
- }
- }
-
- /** {@inheritDoc} */
- @Override @Nonnull public MetadataResolver getComponent() {
- return this;
- }
-
- /** {@inheritDoc} */
- public void clear() throws ResolverException {
- if (resolver instanceof ClearableMetadataResolver) {
- ((ClearableMetadataResolver) resolver).clear();
- }
- }
-
- /** {@inheritDoc} */
- public void clear(final String entityID) throws ResolverException {
- if (resolver instanceof ClearableMetadataResolver) {
- ((ClearableMetadataResolver) resolver).clear(entityID);
- }
- }
-
- /** {@inheritDoc} */
- @Override public void refresh() throws ResolverException {
- if (resolver instanceof RefreshableMetadataResolver) {
- ((RefreshableMetadataResolver) resolver).refresh();
- }
- }
-
- /** {@inheritDoc} */
- @Override
- public Instant getLastRefresh() {
- if (resolver instanceof RefreshableMetadataResolver) {
- return ((RefreshableMetadataResolver) resolver).getLastRefresh();
- }
- return null;
- }
-
- /** {@inheritDoc} */
- @Override
- public Instant getLastUpdate() {
- if (resolver instanceof RefreshableMetadataResolver) {
- return ((RefreshableMetadataResolver) resolver).getLastUpdate();
- }
- return null;
- }
-
- /** {@inheritDoc} */
- public Instant getLastSuccessfulRefresh() {
- if (resolver instanceof RefreshableMetadataResolver) {
- return ((RefreshableMetadataResolver) resolver).getLastSuccessfulRefresh();
- }
- return null;
- }
-
- /** {@inheritDoc} */
- public Boolean wasLastRefreshSuccess() {
- if (resolver instanceof RefreshableMetadataResolver) {
- return ((RefreshableMetadataResolver) resolver).wasLastRefreshSuccess();
- }
- return null;
- }
-
- /** {@inheritDoc} */
- @Override public int compareTo(final RelyingPartyMetadataProvider other) {
- ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
- final int result = sortKey.compareTo(other.sortKey);
- if (result != 0) {
- return result;
- }
- if (equals(other)) {
- return 0;
- }
- return getId().compareTo(other.getId());
- }
-
- /**
- * {@inheritDoc}. We are within a spring context and so equality can be determined by ID, however we also test by
- * sortKey just in case.
- */
- @Override public boolean equals(final Object other) {
- if (null == other) {
- return false;
- }
- if (!(other instanceof RelyingPartyMetadataProvider)) {
- return false;
- }
- final RelyingPartyMetadataProvider otherRp = (RelyingPartyMetadataProvider) other;
-
- return Objects.equals(otherRp.sortKey, sortKey) && Objects.equals(getId(), otherRp.getId());
- }
-
- /** {@inheritDoc} */
- @Override public int hashCode() {
- return com.google.common.base.Objects.hashCode(sortKey, getId());
- }
-
-}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
index 7a9302f..29d48df 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
@@ -40,7 +40,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import net.shibboleth.idp.metrics.ReloadableServiceGaugeSet;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
import net.shibboleth.utilities.java.support.annotation.ParameterName;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -219,17 +218,10 @@ public class MetadataResolverServiceGaugeSet extends ReloadableServiceGaugeSet<M
@Nonnull @NonnullElements private Iterable<MetadataResolver> getMetadataResolvers(
@Nonnull final MetadataResolver rootResolver) {
- MetadataResolver root = rootResolver;
-
- // Step down into wrapping component.
- if (root instanceof RelyingPartyMetadataProvider) {
- root = ((RelyingPartyMetadataProvider) root).getEmbeddedResolver();
- }
-
- if (root instanceof ChainingMetadataResolver) {
- return getAllChildren((ChainingMetadataResolver) root);
+ if (rootResolver instanceof ChainingMetadataResolver) {
+ return getAllChildren((ChainingMetadataResolver) rootResolver);
}
- return Collections.singletonList(root);
+ return Collections.singletonList(rootResolver);
}
}
\ No newline at end of file
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java
index 807bdc1..8799152 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java
@@ -24,18 +24,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.servlet.http.HttpServletResponse;
-import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.idp.profile.context.SpringRequestContext;
-import net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
-
import org.opensaml.profile.action.ActionSupport;
import org.opensaml.profile.action.EventIds;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -47,6 +35,17 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.webflow.execution.RequestContext;
+import net.shibboleth.idp.profile.AbstractProfileAction;
+import net.shibboleth.idp.profile.context.SpringRequestContext;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.utilities.java.support.service.ReloadableService;
+import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+
/**
* Action that refreshes or clears a {@link MetadataResolver} manually.
*
@@ -159,13 +158,7 @@ public class ReloadMetadata extends AbstractProfileAction {
final ServiceableComponent<MetadataResolver> component = metadataResolverService.getServiceableComponent();
try {
- MetadataResolver rootResolver = component.getComponent();
-
- // Step down into wrapping component.
- if (rootResolver instanceof RelyingPartyMetadataProvider) {
- rootResolver = ((RelyingPartyMetadataProvider) rootResolver).getEmbeddedResolver();
- }
- final MetadataResolver toProcess = findProvider(rootResolver);
+ final MetadataResolver toProcess = findProvider(component.getComponent());
if (toProcess != null) {
if (toProcess instanceof RefreshableMetadataResolver) {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list