[java-plugin-shibd] branch main updated: Add discoveryURL inheritance, and allow it to be unset.

Codeberg noreply at shibboleth.net
Wed Jul 8 14:55:30 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/bb8e359df34ce1b73aed1c6f1ee1c96be1a98dc0

The following commit(s) were added to refs/heads/main by this push:
     new bb8e359  Add discoveryURL inheritance, and allow it to be unset.
bb8e359 is described below

commit bb8e359df34ce1b73aed1c6f1ee1c96be1a98dc0
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Wed Jul 8 10:55:21 2026 -0400

    Add discoveryURL inheritance, and allow it to be unset.
---
 .../net/shibboleth/sp/impl/BasicApplication.java   | 93 +++++++++++++++-------
 .../impl/ValidateSessionInitiatorRequestTest.java  | 10 ++-
 2 files changed, 69 insertions(+), 34 deletions(-)

diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java
index 231dfc8..7b4abe2 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/impl/BasicApplication.java
@@ -80,7 +80,10 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     
     /** Map of protocol support services. */
     @Nonnull Map<String,ProtocolSupportService> protocolServiceMap;
-    
+
+    /** Flag indicating whether discovery setting was explicitly set. */
+    private boolean discoverySet;
+
     /** Flag indicating whether authority setting was explicitly set. */
     private boolean authoritySet;
     
@@ -188,6 +191,8 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     
     /** {@inheritDoc} */
     @Nullable @NotEmpty public String getAuthenticatingAuthority(@Nullable ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
         final String ret = authenticatingAuthorityLookupStrategy.apply(profileRequestContext);
         if (authoritySet || ret != null) {
             return ret;
@@ -227,8 +232,50 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
                 Constraint.isNotNull(strategy, "Authority lookup strategy cannot be null");
     }
     
+    /** [{@inheritDoc} */
+    @Nullable public String getDiscoveryService(@Nullable final ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
+        final String ret = discoveryServiceLookupStrategy.apply(profileRequestContext);
+        if (discoverySet || ret != null) {
+            return ret;
+        }
+        
+        if (parent != null && allowInheritance) {
+            return parent.getDiscoveryService(profileRequestContext);
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Sets the discovery service URL to use in the event a session initiator cannot be executed.
+     * 
+     * @param url discovery service URL
+     */
+    public void setDiscoveryService(@Nullable final String url) {
+        checkSetterPreconditions();
+        
+        discoverySet = true;
+        discoveryServiceLookupStrategy = FunctionSupport.constant(url);
+    }
+    
+    /**
+     * Sets the lookup strategy for the discovery service URL to use in the event a session initiator cannot be executed.
+     * 
+     * @param strategy lookup strategy
+     */
+    public void setDiscoveryServiceLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
+        checkSetterPreconditions();
+        
+        discoveryServiceLookupStrategy =
+                Constraint.isNotNull(strategy, "Discovery service lookup strategy cannot be null");
+    }
+        
     /** {@inheritDoc} */
     @Nonnull public List<String> getSessionInitiators(@Nullable final ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
         final List<String> ret = sessionInitiatorLookupStrategy.apply(profileRequestContext);
         if (ret != null && !ret.isEmpty()) {
             return ret;
@@ -271,36 +318,10 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
                 "Session initiators lookup strategy cannot be null");
     }
 
-    /** [{@inheritDoc} */
-    @Nullable public String getDiscoveryService(@Nullable final ProfileRequestContext profileRequestContext) {
-        return discoveryServiceLookupStrategy.apply(profileRequestContext);
-    }
-    
-    /**
-     * Sets the discovery service URL to use in the event a session initiator cannot be executed.
-     * 
-     * @param url discovery service URL
-     */
-    public void setDiscoveryService(@Nullable final String url) {
-        checkSetterPreconditions();
-        
-        discoveryServiceLookupStrategy = FunctionSupport.constant(url);
-    }
-    
-    /**
-     * Sets the lookup strategy for the discovery service URL to use in the event a session initiator cannot be executed.
-     * 
-     * @param strategy lookup strategy
-     */
-    public void setDiscoveryServiceLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        checkSetterPreconditions();
-        
-        discoveryServiceLookupStrategy =
-                Constraint.isNotNull(strategy, "Discovery service lookup strategy cannot be null");
-    }
-    
     /** {@inheritDoc} */
     @Nonnull public List<String> getTokenConsumers(@Nullable final ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
         final List<String> ret = tokenConsumerLookupStrategy.apply(profileRequestContext);
         if (ret != null && !ret.isEmpty()) {
             return ret;
@@ -343,6 +364,8 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
 
     /** {@inheritDoc} */
     @Nonnull public List<String> getLogoutInitiators(@Nullable final ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
         final List<String> ret = logoutInitiatorLookupStrategy.apply(profileRequestContext);
         if (ret != null && !ret.isEmpty()) {
             return ret;
@@ -387,6 +410,8 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
 
     /** {@inheritDoc} */
     @Nonnull public List<String> getLogoutConsumers(@Nullable final ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
         final List<String> ret = logoutConsumerLookupStrategy.apply(profileRequestContext);
         if (ret != null && !ret.isEmpty()) {
             return ret;
@@ -430,6 +455,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     /** {@inheritDoc} */
     @Nonnull public StateManager getStateManager() {
         checkComponentActive();
+        
         if (stateManager != null) {
             return stateManager;
         }
@@ -455,6 +481,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     /** {@inheritDoc} */
     @Nonnull public ReloadableService<AttributeTranscoderRegistry> getAttributeTranscoderRegistry() {
         checkComponentActive();
+        
         if (transcodingRegistry != null) {
             return transcodingRegistry;
         }
@@ -480,6 +507,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     /** {@inheritDoc} */
     @Nonnull public ReloadableService<AttributeResolver> getAttributeResolver() {
         checkComponentActive();
+        
         if (attributeResolver != null) {
             return attributeResolver;
         }
@@ -505,6 +533,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     /** {@inheritDoc} */
     @Nonnull public ReloadableService<AttributeFilter> getAttributeFilter() {
         checkComponentActive();
+        
         if (attributeFilter != null) {
             return attributeFilter;
         }
@@ -569,6 +598,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     /** {@inheritDoc} */
     @Override
     @Nullable public String getIssuer(@Nullable ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
         
         final String ret = super.getIssuer(profileRequestContext);
         if (ret != null) {
@@ -585,8 +615,9 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     /** {@inheritDoc} */
     @Override
     @Nullable public SecurityConfiguration getSecurityConfiguration(
-            
             @Nullable ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
+        
         final var ret = super.getSecurityConfiguration(profileRequestContext);
         if (ret != null) {
             return ret;
@@ -603,6 +634,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     @Override
     @Nonnull public Map<String, ProfileConfiguration> getProfileConfigurations(
             @Nullable ProfileRequestContext profileRequestContext) {
+        checkComponentActive();
         
         final var ret = super.getProfileConfigurations(profileRequestContext);
         if (!ret.isEmpty()) {
@@ -620,6 +652,7 @@ public class BasicApplication extends BasicRelyingPartyConfiguration implements
     @Override
     @Nullable public ProfileConfiguration getProfileConfiguration(@Nullable ProfileRequestContext profileRequestContext,
             @Nullable String profileId) {
+        checkComponentActive();
         
         final var ret = super.getProfileConfiguration(profileRequestContext, profileId);
         if (ret != null) {
diff --git a/sp-server-impl/src/test/java/net/shibboleth/sp/profile/impl/ValidateSessionInitiatorRequestTest.java b/sp-server-impl/src/test/java/net/shibboleth/sp/profile/impl/ValidateSessionInitiatorRequestTest.java
index d88be25..0621437 100644
--- a/sp-server-impl/src/test/java/net/shibboleth/sp/profile/impl/ValidateSessionInitiatorRequestTest.java
+++ b/sp-server-impl/src/test/java/net/shibboleth/sp/profile/impl/ValidateSessionInitiatorRequestTest.java
@@ -52,6 +52,7 @@ public class ValidateSessionInitiatorRequestTest extends BaseApplicationActionTe
     @BeforeMethod
     public void setUp() throws ComponentInitializationException {
         super.beforeMethod();
+        
         prc.removeSubcontext(RelyingPartyContext.class);
     }
     
@@ -126,10 +127,9 @@ public class ValidateSessionInitiatorRequestTest extends BaseApplicationActionTe
     }
 
     @Test
-    public void testFallbackAuthority() throws ComponentInitializationException {
-        createAction(true, false);
-        
+    public void testFallbackAuthority() throws ComponentInitializationException {        
         application.setAuthenticatingAuthority(TEST_VALUE);
+        createAction(true, false);
 
         final DDF input = new DDF(null).structure();
         arc.setInput(input);
@@ -144,9 +144,9 @@ public class ValidateSessionInitiatorRequestTest extends BaseApplicationActionTe
 
     @Test
     public void testInputAuthority() throws ComponentInitializationException {
+        application.setAuthenticatingAuthority(TEST_VALUE);
         createAction(true, false);
         
-        application.setAuthenticatingAuthority(TEST_VALUE);
         final DDF input = new DDF(null).structure();
         input.addmember(InitiatorConstants.AUTHORITY).string(TEST_VALUE + "/shibboleth");
         arc.setInput(input);
@@ -173,6 +173,8 @@ public class ValidateSessionInitiatorRequestTest extends BaseApplicationActionTe
         action.setRequireRelyingPartyId(requireAuthority);
         action.setRequireDiscoveryURL(requireDisco);
         action.initialize();
+        
+        application.initialize();
     }
         
 }
\ 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