From fc8aab29eb278a1489a75847efa38ea72b941c79 Mon Sep 17 00:00:00 2001 From: Thomas Lenz Date: Wed, 5 Feb 2020 11:03:59 +0100 Subject: Extract interface from AbstractCredentialProvider.java Add new interface IPvpAddableChainingMetadataProvider.java and implement it in AbstractChainingMetadataProvider.java Fix possible nullPointer in Saml2Utils.java --- .../metadata/AbstractChainingMetadataProvider.java | 165 +++++++++++++-------- 1 file changed, 104 insertions(+), 61 deletions(-) (limited to 'eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/metadata/AbstractChainingMetadataProvider.java') diff --git a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/metadata/AbstractChainingMetadataProvider.java b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/metadata/AbstractChainingMetadataProvider.java index 8a20b932..80511f64 100644 --- a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/metadata/AbstractChainingMetadataProvider.java +++ b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/metadata/AbstractChainingMetadataProvider.java @@ -36,6 +36,7 @@ import at.gv.egiz.components.spring.api.IDestroyableObject; import at.gv.egiz.eaaf.core.api.IGarbageCollectorProcessing; import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException; import at.gv.egiz.eaaf.modules.pvp2.api.metadata.IPvp2MetadataProvider; +import at.gv.egiz.eaaf.modules.pvp2.api.metadata.IPvpAddableChainingMetadataProvider; import at.gv.egiz.eaaf.modules.pvp2.api.metadata.IRefreshableMetadataProvider; import org.apache.commons.lang3.StringUtils; @@ -56,7 +57,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException; @Slf4j public abstract class AbstractChainingMetadataProvider implements IGarbageCollectorProcessing, - IRefreshableMetadataProvider, + IRefreshableMetadataProvider, IPvpAddableChainingMetadataProvider, IDestroyableObject, IPvp2MetadataProvider, ClearableMetadataResolver { @Nonnull @@ -157,21 +158,6 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec } - /** - * Close metadata provider and remove all loaded metadata. - * - */ - public void internalDestroy() { - log.info("Destroying chained metadata resolvers ..."); - - for (final MetadataResolver resolver : internalResolvers) { - destroyMetadataResolver(resolver); - } - - internalResolvers.clear(); - - } - @Override public final MetadataFilter getMetadataFilter() { log.warn("{} does NOT support {}", AbstractChainingMetadataProvider.class.getName(), @@ -194,7 +180,7 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec * getEntityDescriptor( java.lang.String) */ @Override - public EntityDescriptor getEntityDescriptor(final String entityID) + public final EntityDescriptor getEntityDescriptor(final String entityID) throws ResolverException { EntityDescriptor entityDesc = null; try { @@ -212,6 +198,7 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec "Can not find PVP metadata for entityID: " + entityID + " Start refreshing process ..."); if (refreshMetadataProvider(entityID)) { return resolveEntityDescripor(entityID); + } } @@ -221,22 +208,21 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec @Override @Nullable - public final EntityDescriptor resolveSingle(@Nullable final CriteriaSet criteria) throws ResolverException { - for (final MetadataResolver resolver : internalResolvers) { - try { - final EntityDescriptor descriptors = resolver.resolveSingle(criteria); - if (descriptors != null) { - return descriptors; - } - - } catch (final ResolverException e) { - continue; + public final EntityDescriptor resolveSingle(@Nullable final CriteriaSet criteria) + throws ResolverException { + EntityDescriptor result = internalResolveSingle(criteria); + if (result == null && criteria != null) { + final EntityIdCriterion entityIdCriteria = criteria.get(EntityIdCriterion.class); + if (entityIdCriteria != null + && refreshMetadataProvider(entityIdCriteria.getEntityId())) { + log.debug("Can not find PVP metadata for entityID: {}. Metadata refreshing was done ... ", + entityIdCriteria.getEntityId()); + result = internalResolveSingle(criteria); } - } - return null; + return result; } @@ -244,21 +230,18 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec @Nonnull public final Iterable resolve(@Nullable final CriteriaSet criteria) throws ResolverException { - for (final MetadataResolver resolver : internalResolvers) { - try { - final Iterable descriptors = resolver.resolve(criteria); - if (descriptors != null && descriptors.iterator().hasNext()) { - return descriptors; - - } - - } catch (final ResolverException e) { - continue; - + Iterable result = internalResolve(criteria); + if (criteria != null) { + final EntityIdCriterion entityIdCriteria = criteria.get(EntityIdCriterion.class); + if (!result.iterator().hasNext() && entityIdCriteria != null + && refreshMetadataProvider(entityIdCriteria.getEntityId())) { + log.debug("Can not find PVP metadata for entityID: {}. Metadata refreshing was done ... ", + entityIdCriteria.getEntityId()); + result = internalResolve(criteria); } } - return Collections.emptyList(); + return result; } @Override @@ -295,7 +278,7 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec @Override @Nullable - public DateTime getLastUpdate() { + public final DateTime getLastUpdate() { DateTime ret = null; for (final MetadataResolver resolver : internalResolvers) { if (resolver instanceof RefreshableMetadataResolver) { @@ -325,6 +308,42 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec return ret; } + @Override + public final DateTime getLastSuccessfulRefresh() { + return this.lastRefeshTimestamp; + + } + + @Override + public final Boolean wasLastRefreshSuccess() { + return this.lastRefeshSuccessful; + + } + + @Override + public final boolean isRequireValidMetadata() { + log.warn("Attempt to access unsupported requireValidMetadata property on ChainingMetadataResolver"); + return false; + } + + @Override + public final void setRequireValidMetadata(final boolean requireValidMetadata) { + throw new UnsupportedOperationException( + "Setting requireValidMetadata is not supported on chaining resolver"); + } + + @Override + public final String getId() { + return getMetadataProviderId(); + + } + + @Override + public final void addMetadataResolverIntoChain(MetadataResolver resolver) { + internalResolvers.add(resolver); + + } + /** * Get the URL to metadata for a specific entityID. * @@ -465,34 +484,58 @@ public abstract class AbstractChainingMetadataProvider implements IGarbageCollec } } - @Override - public DateTime getLastSuccessfulRefresh() { - return this.lastRefeshTimestamp; + /** + * Close metadata provider and remove all loaded metadata. + * + */ + private void internalDestroy() { + log.info("Destroying chained metadata resolvers ..."); - } + for (final MetadataResolver resolver : internalResolvers) { + destroyMetadataResolver(resolver); + } - @Override - public Boolean wasLastRefreshSuccess() { - return this.lastRefeshSuccessful; + internalResolvers.clear(); } - @Override - public boolean isRequireValidMetadata() { - log.warn("Attempt to access unsupported requireValidMetadata property on ChainingMetadataResolver"); - return false; - } + private EntityDescriptor internalResolveSingle(@Nullable final CriteriaSet criteria) + throws ResolverException { + for (final MetadataResolver resolver : internalResolvers) { + try { + final EntityDescriptor descriptors = resolver.resolveSingle(criteria); + if (descriptors != null) { + return descriptors; + } + + } catch (final ResolverException e) { + continue; + + } + } + + return null; - @Override - public void setRequireValidMetadata(final boolean requireValidMetadata) { - throw new UnsupportedOperationException( - "Setting requireValidMetadata is not supported on chaining resolver"); } - @Override - public String getId() { - return getMetadataProviderId(); + @Nonnull + private Iterable internalResolve(@Nullable final CriteriaSet criteria) + throws ResolverException { + for (final MetadataResolver resolver : internalResolvers) { + try { + final Iterable descriptors = resolver.resolve(criteria); + if (descriptors != null && descriptors.iterator().hasNext()) { + return descriptors; + + } + } catch (final ResolverException e) { + continue; + + } + } + + return Collections.emptyList(); } } -- cgit v1.2.3