[java-plugin-shibd] branch main updated: Relocate criteria classes into their own package.

Codeberg noreply at shibboleth.net
Mon Aug 31 12:50: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-plugin-shibd.

View the commit online:
https://codeberg.org/Shibboleth/java-plugin-shibd/commit/0a2897139014518c254b094d0eb090dec5a5dad2

The following commit(s) were added to refs/heads/main by this push:
     new 0a28971  Relocate criteria classes into their own package.
0a28971 is described below

commit 0a2897139014518c254b094d0eb090dec5a5dad2
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Mon Aug 31 08:49:58 2026 -0400

    Relocate criteria classes into their own package.
---
 .../shibboleth/sp/service/AgentResolverTest.java   |  2 +-
 .../AbstractStorageServiceCredentialResolver.java  | 79 +++++++++++++++++++---
 .../{ => criteria}/AgentCredentialCriterion.java   |  3 +-
 .../sp/{ => criteria}/AgentIDCriterion.java        |  3 +-
 .../sp/{ => criteria}/ApplicationIDCriterion.java  |  4 +-
 .../net/shibboleth/sp/criteria/package-info.java   | 18 +++++
 .../authn/impl/InitializeAgentRequestContext.java  |  2 +-
 .../credential/impl/CredentialResolverBridge.java  |  4 +-
 .../impl/StaticMapCredentialResolver.java          |  4 +-
 .../shibboleth/sp/impl/DefaultAgentResolver.java   |  2 +-
 .../impl/StaticMapCredentialResolverTest.java      |  4 +-
 .../X509CredentialStorageServiceResolverTest.java  |  4 +-
 .../shibboleth/sp/testing/MockAgentResolver.java   |  2 +-
 13 files changed, 107 insertions(+), 24 deletions(-)

diff --git a/sp-conf-impl/src/test/java/net/shibboleth/sp/service/AgentResolverTest.java b/sp-conf-impl/src/test/java/net/shibboleth/sp/service/AgentResolverTest.java
index 2391eba..45aeadb 100644
--- a/sp-conf-impl/src/test/java/net/shibboleth/sp/service/AgentResolverTest.java
+++ b/sp-conf-impl/src/test/java/net/shibboleth/sp/service/AgentResolverTest.java
@@ -37,9 +37,9 @@ import net.shibboleth.shared.service.ServiceableComponent;
 import net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor;
 import net.shibboleth.shared.spring.service.ReloadableSpringService;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentCredentialCriterion;
 import net.shibboleth.sp.AgentResolver;
 import net.shibboleth.sp.Application;
+import net.shibboleth.sp.criteria.AgentCredentialCriterion;
 import net.shibboleth.sp.impl.BasicApplication;
 
 import org.opensaml.profile.context.ProfileRequestContext;
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/credential/AbstractStorageServiceCredentialResolver.java b/sp-server-api/src/main/java/net/shibboleth/sp/credential/AbstractStorageServiceCredentialResolver.java
index 56a8ea4..31a5a87 100644
--- a/sp-server-api/src/main/java/net/shibboleth/sp/credential/AbstractStorageServiceCredentialResolver.java
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/credential/AbstractStorageServiceCredentialResolver.java
@@ -16,6 +16,7 @@ package net.shibboleth.sp.credential;
 
 import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
+import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 
@@ -28,12 +29,15 @@ import org.apache.velocity.exception.VelocityException;
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.criterion.ProfileRequestContextCriterion;
+import org.opensaml.saml.criterion.ProtocolCriterion;
 import org.opensaml.security.credential.Credential;
 import org.opensaml.security.credential.UsageType;
 import org.opensaml.security.criteria.UsageCriterion;
 import org.opensaml.storage.StorageService;
 import org.slf4j.Logger;
 
+import com.google.common.cache.Cache;
+
 import net.shibboleth.shared.annotation.ParameterName;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
@@ -51,9 +55,9 @@ import net.shibboleth.shared.resolver.Criterion;
 import net.shibboleth.shared.resolver.ResolverException;
 import net.shibboleth.shared.velocity.Template;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentIDCriterion;
 import net.shibboleth.sp.Application;
-import net.shibboleth.sp.ApplicationIDCriterion;
+import net.shibboleth.sp.criteria.AgentIDCriterion;
+import net.shibboleth.sp.criteria.ApplicationIDCriterion;
 
 /**
  * A dymamic resolver that relies on a {@link StorageService} to retrieve blobs
@@ -98,13 +102,16 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
     /** Default prefix for default context value. */
     @Nonnull @NotEmpty public static final String DEFAULT_CONTEXT_PREFIX = "net.shibboleth.sp.credential.";
 
-    /** The Velocity context variable name for the Agent ID. */
+    /** The Velocity context variable name for the CriteriaSet. */
     @Nonnull @NotEmpty public static final String CONTEXT_KEY_CRITERIA = "criteria";
+
+    /** The Velocity context variable name for the Protocol. */
+    @Nonnull @NotEmpty public static final String CONTEXT_KEY_PROTOCOL = "protocol";
     
     /** The Velocity context variable name for the Agent ID. */
     @Nonnull @NotEmpty public static final String CONTEXT_KEY_AGENT_ID = "agentID";
 
-    /** The Velocity context variable name for the Agent ID. */
+    /** The Velocity context variable name for the Application ID. */
     @Nonnull @NotEmpty public static final String CONTEXT_KEY_APPLICATION_ID = "applicationID";
     
     /** The Velocity context variable name for the entity ID. */
@@ -112,13 +119,13 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
 
     /** The Velocity context variable name for the transformed entity ID. */
     @Nonnull @NotEmpty public static final String CONTEXT_KEY_TX_ENTITY_ID = "transformedRelyingPartyID";
-    
-    /** The Velocity context variable name for the {@link ProfileRequestContext}. */
-    @Nonnull @NotEmpty public static final String CONTEXT_KEY_PRC = "profileRequestContext";
 
     /** The Velocity context variable name for the {@link UsageType}. */
     @Nonnull @NotEmpty public static final String CONTEXT_KEY_USAGE = "usage";
     
+    /** The Velocity context variable name for the {@link ProfileRequestContext}. */
+    @Nonnull @NotEmpty public static final String CONTEXT_KEY_PRC = "profileRequestContext";
+    
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractStorageServiceCredentialResolver.class);
 
@@ -133,7 +140,10 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
 
     /** Function to transform the entityID. */
     @NonnullAfterInit private Function<String,String> entityIDTransformStrategy;
-        
+
+    /** Credential resolution cache. */
+    @Nullable private Cache<CriteriaSet,List<T>> resultsCache;
+    
     /** Velocity template source for context. */
     @NonnullAfterInit private String contextTemplateString;
 
@@ -142,6 +152,9 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
     
     /** Map of usage types to template values. */
     @Nonnull private Map<UsageType,String> usageMap;
+
+    /** Map of protocol values to template values. */
+    @Nonnull private Map<String,String> protocolMap;
     
     /**
      * Constructor.
@@ -152,6 +165,7 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
         credentialType = Constraint.isNotNull(type, "Credential type cannot be null");
         usageMap = Map.of(UsageType.SIGNING, "-signing", UsageType.ENCRYPTION, "-encryption",
                 UsageType.UNSPECIFIED, "-signing");
+        protocolMap = CollectionSupport.emptyMap();
     }
     
     /**
@@ -207,6 +221,31 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
         entityIDTransformStrategy = Constraint.isNotNull(strategy, "EntityID transform strategy cannot be null");
     }
     
+    /**
+     * Gets the cache of resolution results.
+     * 
+     * @return cache of results
+     */
+    @Nullable public Cache<CriteriaSet,List<T>> getResultsCache() {
+        return resultsCache;
+    }
+
+    /**
+     * Sets the cache used to cache search results.
+     * 
+     * <p>All entries in the cache are invalidated prior to use.</p>
+     * 
+     * @param cache cache used to cache search results
+     */
+    public void setResultsCache(@Nullable final Cache<CriteriaSet,List<T>> cache) {
+        checkSetterPreconditions();
+        
+        if (cache != null) {
+            cache.invalidateAll();
+        }
+        resultsCache = cache;
+    }
+    
     /**
      * Sets the Velocity template to use to construct the storage context.
      * 
@@ -221,7 +260,7 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
     }
     
     /**
-     * Sets a map from {@link UsageType} to string token, allowing customizable injection of a string
+     * Sets a map from {@link UsageType} to string tokens, allowing customizable injection of a string
      * into the Velocity context to abbreviate or otherwise control what to resolve based on a supplied
      * {@link UsageCriterion}.
      * 
@@ -238,6 +277,23 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
             usageMap = CollectionSupport.emptyMap();
         }
     }
+
+    /**
+     * Sets a map from protocol constants to string tokens, allowing customizable injection of a string
+     * into the Velocity context to abbreviate or otherwise control what to resolve based on a supplied
+     * {@link ProtocolCriterion}.
+     * 
+     * <p>Defaults to empty, as most resolvers are xepected to be protocol specific more generally.</p>
+     * 
+     * @param map map of usage types to string values
+     */
+    public void setProtocolMap(@Nullable final Map<UsageType,String> map) {
+        if (map != null) {
+            usageMap = CollectionSupport.copyToMap(map);
+        } else {
+            usageMap = CollectionSupport.emptyMap();
+        }
+    }
     
     /** {@inheritDoc} */
     @Override
@@ -334,6 +390,11 @@ public abstract class AbstractStorageServiceCredentialResolver<T extends Credent
             ctx.put(CONTEXT_KEY_USAGE, usageMap.get(UsageType.UNSPECIFIED));
         }
         
+        final ProtocolCriterion protocolCrit = criteria.get(ProtocolCriterion.class);
+        if (protocolCrit != null) {
+            ctx.put(CONTEXT_KEY_PROTOCOL, protocolMap.get(protocolCrit.getProtocol()));
+        }
+        
         return ctx;
     }
 
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/AgentCredentialCriterion.java b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/AgentCredentialCriterion.java
similarity index 95%
rename from sp-server-api/src/main/java/net/shibboleth/sp/AgentCredentialCriterion.java
rename to sp-server-api/src/main/java/net/shibboleth/sp/criteria/AgentCredentialCriterion.java
index 34a72eb..cb35836 100644
--- a/sp-server-api/src/main/java/net/shibboleth/sp/AgentCredentialCriterion.java
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/AgentCredentialCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.sp;
+package net.shibboleth.sp.criteria;
 
 import javax.annotation.Nonnull;
 
@@ -20,6 +20,7 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.resolver.Criterion;
+import net.shibboleth.sp.Agent;
 
 /**
  * Resolver {@link Criterion} identifying an {@link Agent} by means of a "credential" name.
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/AgentIDCriterion.java b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/AgentIDCriterion.java
similarity index 97%
rename from sp-server-api/src/main/java/net/shibboleth/sp/AgentIDCriterion.java
rename to sp-server-api/src/main/java/net/shibboleth/sp/criteria/AgentIDCriterion.java
index 7fd36d5..2160b6e 100644
--- a/sp-server-api/src/main/java/net/shibboleth/sp/AgentIDCriterion.java
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/AgentIDCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.sp;
+package net.shibboleth.sp.criteria;
 
 import javax.annotation.Nonnull;
 
@@ -20,6 +20,7 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.resolver.Criterion;
+import net.shibboleth.sp.Agent;
 
 /**
  * Resolver {@link Criterion} identifying an {@link Agent} by means of its unique ID.
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/ApplicationIDCriterion.java b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/ApplicationIDCriterion.java
similarity index 96%
rename from sp-server-api/src/main/java/net/shibboleth/sp/ApplicationIDCriterion.java
rename to sp-server-api/src/main/java/net/shibboleth/sp/criteria/ApplicationIDCriterion.java
index 0f3212e..83026ec 100644
--- a/sp-server-api/src/main/java/net/shibboleth/sp/ApplicationIDCriterion.java
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/ApplicationIDCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.sp;
+package net.shibboleth.sp.criteria;
 
 import javax.annotation.Nonnull;
 
@@ -20,6 +20,8 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.resolver.Criterion;
+import net.shibboleth.sp.Agent;
+import net.shibboleth.sp.Application;
 
 /**
  * Resolver {@link Criterion} identifying an {@link Application} by means of its {@link Agent}-specific ID.
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/criteria/package-info.java b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/package-info.java
new file mode 100644
index 0000000..076179c
--- /dev/null
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/criteria/package-info.java
@@ -0,0 +1,18 @@
+/*
+ * Licensed 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.
+ */
+
+/**
+ * SP-specific resolver {@link net.shibboleth.shared.resolver.Criterion}.
+ */
+package net.shibboleth.sp.criteria;
\ No newline at end of file
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/authn/impl/InitializeAgentRequestContext.java b/sp-server-impl/src/main/java/net/shibboleth/sp/authn/impl/InitializeAgentRequestContext.java
index 78ef4c6..9e6e161 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/authn/impl/InitializeAgentRequestContext.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/authn/impl/InitializeAgentRequestContext.java
@@ -41,9 +41,9 @@ import net.shibboleth.shared.service.ReloadableService;
 import net.shibboleth.shared.service.ServiceException;
 import net.shibboleth.shared.service.ServiceableComponent;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentCredentialCriterion;
 import net.shibboleth.sp.AgentResolver;
 import net.shibboleth.sp.context.AgentRequestContext;
+import net.shibboleth.sp.criteria.AgentCredentialCriterion;
 
 /**
  * An authentication action that relies on extracted HTTP authentication credentials
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/CredentialResolverBridge.java b/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/CredentialResolverBridge.java
index 6c1953e..0af1657 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/CredentialResolverBridge.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/CredentialResolverBridge.java
@@ -37,10 +37,10 @@ import net.shibboleth.shared.resolver.ResolverException;
 import net.shibboleth.shared.service.ReloadableService;
 import net.shibboleth.shared.service.ServiceableComponent;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentIDCriterion;
 import net.shibboleth.sp.Application;
-import net.shibboleth.sp.ApplicationIDCriterion;
 import net.shibboleth.sp.context.AgentRequestContext;
+import net.shibboleth.sp.criteria.AgentIDCriterion;
+import net.shibboleth.sp.criteria.ApplicationIDCriterion;
 
 /**
  * Support object for bridging legacy OpenSAML interfaces to new credential resolver service.
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolver.java b/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolver.java
index 6490fc3..97d1b27 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolver.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolver.java
@@ -38,10 +38,10 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.Criterion;
 import net.shibboleth.shared.resolver.ResolverException;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentIDCriterion;
 import net.shibboleth.sp.Application;
-import net.shibboleth.sp.ApplicationIDCriterion;
 import net.shibboleth.sp.credential.AbstractOrderedCredentialResolver;
+import net.shibboleth.sp.criteria.AgentIDCriterion;
+import net.shibboleth.sp.criteria.ApplicationIDCriterion;
 
 /**
  * A static resolver that relies on maps to associate credentials with the core objects
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/DefaultAgentResolver.java b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/DefaultAgentResolver.java
index 8577bd3..6146028 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/DefaultAgentResolver.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/DefaultAgentResolver.java
@@ -32,8 +32,8 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.ResolverException;
 import net.shibboleth.shared.spring.config.IdentifiedComponentManager;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentCredentialCriterion;
 import net.shibboleth.sp.AgentResolver;
+import net.shibboleth.sp.criteria.AgentCredentialCriterion;
 
 /**
  * Default implementation of {@link AgentResolver}.
diff --git a/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolverTest.java b/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolverTest.java
index fe568a5..5102f3a 100644
--- a/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolverTest.java
+++ b/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/StaticMapCredentialResolverTest.java
@@ -26,8 +26,8 @@ import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.ResolverException;
-import net.shibboleth.sp.AgentIDCriterion;
-import net.shibboleth.sp.ApplicationIDCriterion;
+import net.shibboleth.sp.criteria.AgentIDCriterion;
+import net.shibboleth.sp.criteria.ApplicationIDCriterion;
 
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.profile.context.ProfileRequestContext;
diff --git a/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/X509CredentialStorageServiceResolverTest.java b/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/X509CredentialStorageServiceResolverTest.java
index 93a7fe7..43dacb0 100644
--- a/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/X509CredentialStorageServiceResolverTest.java
+++ b/sp-server-impl/src/test/java/net/shibboleth/sp/credential/impl/X509CredentialStorageServiceResolverTest.java
@@ -42,8 +42,8 @@ import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.security.impl.SelfSignedCertificateGenerator;
 import net.shibboleth.shared.testing.VelocityEngine;
-import net.shibboleth.sp.AgentIDCriterion;
-import net.shibboleth.sp.ApplicationIDCriterion;
+import net.shibboleth.sp.criteria.AgentIDCriterion;
+import net.shibboleth.sp.criteria.ApplicationIDCriterion;
 import net.shibboleth.sp.storage.impl.FilesystemStorageService;
 
 /**
diff --git a/sp-testing/src/main/java/net/shibboleth/sp/testing/MockAgentResolver.java b/sp-testing/src/main/java/net/shibboleth/sp/testing/MockAgentResolver.java
index d8ada29..37626ab 100644
--- a/sp-testing/src/main/java/net/shibboleth/sp/testing/MockAgentResolver.java
+++ b/sp-testing/src/main/java/net/shibboleth/sp/testing/MockAgentResolver.java
@@ -24,8 +24,8 @@ import net.shibboleth.shared.service.ReloadableService;
 import net.shibboleth.shared.testing.MockReloadableService;
 import net.shibboleth.shared.testing.MockResolver;
 import net.shibboleth.sp.Agent;
-import net.shibboleth.sp.AgentCredentialCriterion;
 import net.shibboleth.sp.AgentResolver;
+import net.shibboleth.sp.criteria.AgentCredentialCriterion;
 
 /**
  * Mock {@link AgentResolver} for tests.

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list