[java-oidfed-common] branch main updated: Refactored the entity configuration skeleton fetching strategy to use Metadata object
Codeberg
noreply at shibboleth.net
Thu Sep 24 12:07:12 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-oidfed-common.
View the commit online:
https://codeberg.org/Shibboleth/java-oidfed-common/commit/723d21953a160c8fa0979a905f00a9d41a706599
The following commit(s) were added to refs/heads/main by this push:
new 723d219 Refactored the entity configuration skeleton fetching strategy to use Metadata object
723d219 is described below
commit 723d21953a160c8fa0979a905f00a9d41a706599
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Thu Sep 24 15:06:41 2026 +0300
Refactored the entity configuration skeleton fetching strategy to use Metadata object
- Also simplified MetadataImpl to deal with the copies of maps
- Fixed wrong references regarding oauthResourceMetadata
---
...onfigurationMetadataSkeletonLookupStrategy.java | 13 +++--
.../metadata/payload/claim/impl/MetadataImpl.java | 59 +++++++++-------------
.../impl/InitializeEntityStatementContext.java | 25 +++++----
3 files changed, 47 insertions(+), 50 deletions(-)
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/local/DefaultEntityConfigurationMetadataSkeletonLookupStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/local/DefaultEntityConfigurationMetadataSkeletonLookupStrategy.java
index ded0f10..57c652c 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/local/DefaultEntityConfigurationMetadataSkeletonLookupStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/local/DefaultEntityConfigurationMetadataSkeletonLookupStrategy.java
@@ -25,6 +25,8 @@ import org.slf4j.Logger;
import net.shibboleth.oidc.metadata.cache.MetadataCache;
import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
+import net.shibboleth.oidfed.metadata.payload.claim.Metadata;
+import net.shibboleth.oidfed.metadata.payload.claim.impl.MetadataImpl;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
import net.shibboleth.shared.collection.CollectionSupport;
@@ -39,7 +41,7 @@ import net.shibboleth.shared.resolver.CriteriaSet;
*/
@ThreadSafeAfterInit
public class DefaultEntityConfigurationMetadataSkeletonLookupStrategy extends AbstractIdentifiableInitializableComponent
- implements Function<CriteriaSet, Map<String,Map<String,Object>>> {
+ implements Function<CriteriaSet, Metadata> {
/** Class logger. */
@Nonnull
@@ -69,18 +71,21 @@ public class DefaultEntityConfigurationMetadataSkeletonLookupStrategy extends Ab
/** {@inheritDoc} */
@Override @Nullable
- public Map<String,Map<String,Object>> apply(@Nullable final CriteriaSet criteria) {
+ public Metadata apply(@Nullable final CriteriaSet criteria) {
checkComponentActive();
if (criteria != null) {
try {
- return Optional.of(metadataSkeletonCache.get(criteria))
+ final Map<String, Map<String, Object>> skeletonClaims =
+ Optional.ofNullable(metadataSkeletonCache.get(criteria))
.filter(result -> result.size() == 1)
.map(result -> result.get(0))
.orElse(CollectionSupport.emptyMap());
+ assert skeletonClaims != null;
+ return new MetadataImpl(skeletonClaims);
} catch (final MetadataCacheException e) {
log.error("Could not fetch metadata skeleton via metadata cache", e);
}
}
- return CollectionSupport.emptyMap();
+ return new MetadataImpl(CollectionSupport.emptyMap());
}
}
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/payload/claim/impl/MetadataImpl.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/payload/claim/impl/MetadataImpl.java
index 4a0e975..d03aa43 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/payload/claim/impl/MetadataImpl.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/payload/claim/impl/MetadataImpl.java
@@ -70,35 +70,24 @@ public class MetadataImpl implements Metadata {
*/
public MetadataImpl(@Nonnull final Map<String, Map<String, Object>> allClaims) {
for (final String claim : allClaims.keySet()) {
- verifyNoNullValues(allClaims.get(claim), Constraint.isNotNull(claim,
+ final Map<String, Object> value = verifyNoNullValues(allClaims.get(claim), Constraint.isNotNull(claim,
"Metadata for entity type " + claim + " contains a null claim key"));
+ if ("federation_entity".equals(claim)) {
+ federationEntityMetadata = value;
+ } else if ("openid_relying_party".equals(claim)) {
+ openidRelyingPartyMetadata = value;
+ } else if ("openid_provider".equals(claim)) {
+ openidProviderMetadata = value;
+ } else if ("oauth_authorization_server".equals(claim)) {
+ oauthAuthorizationServerMetadata = value;
+ } else if ("oauth_client".equals(claim)) {
+ oauthClientMetadata = value;
+ } else if ("oauth_resource".equals(claim)) {
+ oauthResourceMetadata = value;
+ } else {
+ customClaims.put(claim, value);
+ }
}
- final Map<String,Map<String,Object>> input = new HashMap<>(allClaims);
- if (allClaims.containsKey("federation_entity")) {
- federationEntityMetadata = allClaims.get("federation_entity");
- input.remove("federation_entity");
- }
- if (allClaims.containsKey("openid_relying_party")) {
- openidRelyingPartyMetadata = allClaims.get("openid_relying_party");
- input.remove("openid_relying_party");
- }
- if (allClaims.containsKey("openid_provider")) {
- openidProviderMetadata = allClaims.get("openid_provider");
- input.remove("openid_provider");
- }
- if (allClaims.containsKey("oauth_authorization_server")) {
- oauthAuthorizationServerMetadata = allClaims.get("oauth_authorization_server");
- input.remove("oauth_authorization_server");
- }
- if (allClaims.containsKey("oauth_client")) {
- oauthClientMetadata = allClaims.get("oauth_client");
- input.remove("oauth_client");
- }
- if (allClaims.containsKey("oauth_resource")) {
- oauthResourceMetadata = allClaims.get("oauth_resource");
- input.remove("oauth_resource");
- }
- customClaims.putAll(input);
}
/**
@@ -197,7 +186,7 @@ public class MetadataImpl implements Metadata {
* @return OAuth protected resource metadata
*/
@Nullable public Map<String,Object> getOauthResourceMetadata() {
- return oauthClientMetadata;
+ return oauthResourceMetadata;
}
/**
@@ -206,7 +195,7 @@ public class MetadataImpl implements Metadata {
* @param metadata OAuth protected resource metadata
*/
public void setOauthResourceMetadata(@Nullable final Map<String,Object> metadata) {
- oauthClientMetadata = verifyNoNullValues(metadata, "oauth_resource");
+ oauthResourceMetadata = verifyNoNullValues(metadata, "oauth_resource");
}
/**
@@ -253,7 +242,7 @@ public class MetadataImpl implements Metadata {
claims.put("oauth_client", oauthClientMetadata);
}
if (oauthResourceMetadata != null) {
- claims.put("oauth_resource", oauthClientMetadata);
+ claims.put("oauth_resource", oauthResourceMetadata);
}
claims.putAll(getCustomClaims());
return CollectionSupport.copyToMap(claims);
@@ -269,13 +258,13 @@ public class MetadataImpl implements Metadata {
*/
protected Map<String,Object> verifyNoNullValues(@Nullable final Map<String,Object> map,
@Nonnull final String entityType) throws ConstraintViolationException {
- Constraint.isNotNull(map, "Metadata entity type " + entityType + " cannot be null");
- assert map != null;
- for (final String claim : map.keySet()) {
- Constraint.isNotNull(map.get(claim), "Metadata for entity type " + entityType
+ final Map<String,Object> nonNullMap =
+ Constraint.isNotNull(map, "Metadata entity type " + entityType + " cannot be null");
+ for (final String claim : nonNullMap.keySet()) {
+ Constraint.isNotNull(nonNullMap.get(claim), "Metadata for entity type " + entityType
+ " contains a claim with null value: " + claim);
}
- return map;
+ return CollectionSupport.copyToMap(nonNullMap);
}
/** {@inheritDoc} */
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContext.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContext.java
index 08129cf..545a919 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContext.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContext.java
@@ -27,16 +27,15 @@ import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
import org.slf4j.Logger;
import net.shibboleth.idp.profile.AbstractProfileAction;
+import net.shibboleth.oidfed.metadata.payload.claim.Metadata;
import net.shibboleth.oidfed.metadata.payload.claim.impl.MetadataImpl;
import net.shibboleth.oidfed.profile.EntityConfigurationMetadataDecorator;
import net.shibboleth.oidfed.profile.EntityConfigurationMetadataDecoratorManager;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
-import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.primitive.LoggerFactory;
-import net.shibboleth.shared.primitive.NonnullSupplier;
import net.shibboleth.shared.resolver.CriteriaSet;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -56,7 +55,7 @@ public class InitializeEntityStatementContext extends AbstractProfileAction {
/** Strategy used to locate skeleton for the metadata claim. */
@NonnullAfterInit
- private Function<CriteriaSet,Map<String,Map<String,Object>>> metadataSkeletonLookupStrategy;
+ private Function<CriteriaSet,Metadata> metadataSkeletonLookupStrategy;
/** Strategy used to create the subcontext to hold the statement. */
@Nonnull private Function<ProfileRequestContext,EntityStatementContext> entityStatementContextCreationStrategy;
@@ -68,7 +67,7 @@ public class InitializeEntityStatementContext extends AbstractProfileAction {
@NonnullBeforeExec private EntityStatementContext entityStatementCtx;
/** Metadata skeleton. */
- @NonnullBeforeExec private Map<String,Map<String,Object>> metadataSkeleton;
+ @NonnullBeforeExec private Metadata metadataSkeleton;
/** Constructor. */
public InitializeEntityStatementContext() {
@@ -85,7 +84,7 @@ public class InitializeEntityStatementContext extends AbstractProfileAction {
* @param strategy lookup strategy
*/
public void setMetadataSkeletonLookupStrategy(
- @Nonnull final Function<CriteriaSet,Map<String,Map<String,Object>>> strategy) {
+ @Nonnull final Function<CriteriaSet,Metadata> strategy) {
checkSetterPreconditions();
metadataSkeletonLookupStrategy =
@@ -143,8 +142,8 @@ public class InitializeEntityStatementContext extends AbstractProfileAction {
return false;
}
- metadataSkeleton = new HashMap<>(Optional.ofNullable(metadataSkeletonLookupStrategy.apply(new CriteriaSet()))
- .orElseGet(NonnullSupplier.of(CollectionSupport.emptyMap())));
+ metadataSkeleton = Optional.ofNullable(metadataSkeletonLookupStrategy.apply(new CriteriaSet()))
+ .orElse(new MetadataImpl());
return true;
}
@@ -153,13 +152,17 @@ public class InitializeEntityStatementContext extends AbstractProfileAction {
@Override
protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
log.trace("{} Start decoration of metadata skeleton {}", getLogPrefix(), metadataSkeleton);
+ final Map<String, Map<String, Object>> skeletonClaims = metadataSkeleton.getAllClaims();
+ final Map<String, Map<String, Object>> decorationClaims = new HashMap<>();
+ for (final String claim : skeletonClaims.keySet()) {
+ decorationClaims.put(claim, new HashMap<>(skeletonClaims.get(claim)));
+ }
for (final EntityConfigurationMetadataDecorator decorator : metadataDecoratorManager.all()) {
log.debug("{} Decorating metadata skeleton with {}", getLogPrefix(), decorator.getId());
- decorator.accept(metadataSkeleton, profileRequestContext);
+ decorator.accept(decorationClaims, profileRequestContext);
}
- log.trace("{} Metadata after all decorators have run: {}", getLogPrefix(), metadataSkeleton);
- assert metadataSkeleton != null;
- entityStatementCtx.setMetadata(new MetadataImpl(metadataSkeleton));
+ log.trace("{} Metadata after all decorators have run: {}", getLogPrefix(), decorationClaims);
+ entityStatementCtx.setMetadata(new MetadataImpl(decorationClaims));
}
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list