[java-plugin-shibd-oidc] branch main updated: Improve null handling

Codeberg noreply at shibboleth.net
Thu Mar 5 15:24:50 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-oidc.

View the commit online:
https://codeberg.org/Shibboleth/java-plugin-shibd-oidc/commit/d93b80cd328c7096d8330dc12033ebd6d0b5ffaf

The following commit(s) were added to refs/heads/main by this push:
     new d93b80c  Improve null handling
d93b80c is described below

commit d93b80cd328c7096d8330dc12033ebd6d0b5ffaf
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Thu Mar 5 15:24:41 2026 +0000

    Improve null handling
---
 .../impl/DecodeStateAsJsonObjectConsumer.java      |  4 +-
 .../ApplicationMetadataResolverLookupFunction.java |  6 ++-
 .../sp/oidc/profile/impl/ExtractOIDCClaims.java    |  9 ++---
 .../sp/oidc/profile/impl/IssueStateCookie.java     |  4 +-
 .../sp/oidc/profile/impl/MapStateToStateToken.java | 24 +++++------
 .../sp/oidc/profile/impl/PrepareAgentResponse.java | 47 +++++++++++++---------
 .../impl/RequestedClaimsLookupStrategy.java        |  2 +-
 .../profile/impl/StandardExtractionStrategy.java   | 12 ++++--
 .../sp/oidc/profile/impl/StateLookupStrategy.java  |  6 ++-
 .../sp/oidc/profile/impl/ValidateTokenClaims.java  |  4 +-
 .../AbstractAuthenticationLookupStrategyTest.java  | 17 +++++---
 ...nticationContextClassRefLookupStrategyTest.java |  1 +
 ...ticationRequestStateForStorageStrategyTest.java |  5 ++-
 .../impl/DisplayParameterLookupStrategyTest.java   |  2 +-
 .../ForceAuthnParameterLookupStrategyTest.java     |  2 +-
 .../sp/oidc/profile/impl/IssueStateCookieTest.java |  5 ++-
 ...romAuthenticationRequestLookupFunctionTest.java |  5 +++
 .../profile/impl/PrepareAgentResponseTest.java     | 37 ++++++++++++++---
 .../oidc/profile/impl/ProcessStateCookieTest.java  | 28 ++++++++-----
 ...enticationRequestToPeerContextConsumerTest.java |  1 +
 20 files changed, 148 insertions(+), 73 deletions(-)

diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/decoding/impl/DecodeStateAsJsonObjectConsumer.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/decoding/impl/DecodeStateAsJsonObjectConsumer.java
index 378b4ff..29c61b9 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/decoding/impl/DecodeStateAsJsonObjectConsumer.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/decoding/impl/DecodeStateAsJsonObjectConsumer.java
@@ -62,7 +62,9 @@ public class DecodeStateAsJsonObjectConsumer implements Function<MessageContext,
         }
     
         try {
-            final byte[] decodedBytes = Base64Support.decodeURLSafe(responseState.getValue());
+            final String stateValue = responseState.getValue();
+            assert stateValue != null;
+            final byte[] decodedBytes = Base64Support.decodeURLSafe(stateValue);
             final JSONObject jsonState = (JSONObject) JSONValue.parseWithException(decodedBytes);
             if (jsonState != null) {
                 messageContext.ensureSubcontext(OAuthStateContext.class)
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ApplicationMetadataResolverLookupFunction.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ApplicationMetadataResolverLookupFunction.java
index 58512fd..2b64339 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ApplicationMetadataResolverLookupFunction.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ApplicationMetadataResolverLookupFunction.java
@@ -24,6 +24,7 @@ import net.shibboleth.oidc.metadata.ProviderMetadataResolver;
 import net.shibboleth.oidc.metadata.impl.ReloadingProviderMetadataProvider;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.service.ReloadableService;
 import net.shibboleth.sp.Application;
 import net.shibboleth.sp.context.AgentRequestContext;
 import net.shibboleth.sp.oidc.OIDCProtocolSupportService;
@@ -50,8 +51,11 @@ public class ApplicationMetadataResolverLookupFunction
                                     OIDCProtocolSupportService.class);
                     
                     if (supportService != null) {
+                        final ReloadableService<ProviderMetadataResolver> resolver = 
+                                supportService.getMetadataResolver();
+                        assert resolver != null;
                         final ReloadingProviderMetadataProvider metadataResolver =
-                                new ReloadingProviderMetadataProvider(supportService.getMetadataResolver());
+                                new ReloadingProviderMetadataProvider(resolver);
                         metadataResolver.setId(application.getId() + " MetadataResolver");
                         metadataResolver.initialize();
                         return metadataResolver;
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ExtractOIDCClaims.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ExtractOIDCClaims.java
index 3d4c4c9..2e19f41 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ExtractOIDCClaims.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ExtractOIDCClaims.java
@@ -18,7 +18,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -269,8 +268,6 @@ public class ExtractOIDCClaims extends AbstractApplicationAction {
         final Map<String,IdPAttribute> accumulator = new HashMap<>();
         accumulator.putAll(attributeContext.getIdPAttributes());
         
-        //TODO custom extraction, attribute resolution
-        
         // Extract standard attributes.
         if (standardExtractionStrategy != null && profileConfiguration.isExtractStandardAttributes(profileRequestContext)) {
             log.debug("{} Extracting standard attributes", getLogPrefix());
@@ -279,7 +276,7 @@ public class ExtractOIDCClaims extends AbstractApplicationAction {
             if (standards != null && !standards.isEmpty()) {
                 if (log.isDebugEnabled()) {
                     log.debug("{} Extracted standard attributes: {}", getLogPrefix(),
-                            standards.stream().map(IdPAttribute::getId).collect(Collectors.toUnmodifiableList()));
+                            standards.stream().map(IdPAttribute::getId).toList());
                 }
                 
                 IdPAttributeSupport.withMapMergeDuplicates(accumulator, standards);
@@ -295,7 +292,7 @@ public class ExtractOIDCClaims extends AbstractApplicationAction {
             if (newAttributes != null && !newAttributes.isEmpty()) {
                 if (log.isDebugEnabled()) {
                     log.debug("{} Extracted attributes with custom strategy: {}", getLogPrefix(),
-                            newAttributes.stream().map(IdPAttribute::getId).collect(Collectors.toUnmodifiableList()));
+                            newAttributes.stream().map(IdPAttribute::getId).toList());
                 }
                 IdPAttributeSupport.withMapMergeDuplicates(accumulator, newAttributes);
             }
@@ -307,7 +304,7 @@ public class ExtractOIDCClaims extends AbstractApplicationAction {
             if (newAttributes != null && !newAttributes.isEmpty()) {
                 if (log.isDebugEnabled()) {
                     log.debug("{} Resolved attributes internally: {}", getLogPrefix(),
-                            newAttributes.stream().map(IdPAttribute::getId).collect(Collectors.toUnmodifiableList()));
+                            newAttributes.stream().map(IdPAttribute::getId).toList());
                 }
                 IdPAttributeSupport.withMapMergeDuplicates(accumulator, newAttributes);
             }
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookie.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookie.java
index bf6661c..a516fb7 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookie.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookie.java
@@ -190,7 +190,9 @@ public class IssueStateCookie extends AbstractApplicationAction {
             log.debug("{} Tracking state {} against state token {}", getLogPrefix(), stateValue, stateToken);
 
             final Escaper escaper = UrlEscapers.urlFormParameterEscaper();
-            cookieManager.addCookie(cookiePrefix + escaper.escape(stateToken), escaper.escape(stateValue));
+            final String escapedValue = escaper.escape(stateValue);
+            assert escapedValue != null;
+            cookieManager.addCookie(cookiePrefix + escaper.escape(stateToken), escapedValue);
         } finally {
             RemotedHttpServletRequestResponseContext.clearCurrent();
         }
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/MapStateToStateToken.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/MapStateToStateToken.java
index 5ca3ba5..b0a13ab 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/MapStateToStateToken.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/MapStateToStateToken.java
@@ -55,9 +55,6 @@ public class MapStateToStateToken extends AbstractApplicationAction {
     /** Lookup strategy for the contents of the state cookie. */
     @NonnullAfterInit private Function<ProfileRequestContext,String> stateValueLookupStrategy;
     
-    /** The value of the state token. */
-    @NonnullBeforeExec private String stateValue;
-    
     
     /**
      * Sets whether an error computing a state token should result in a fatal event.
@@ -134,17 +131,18 @@ public class MapStateToStateToken extends AbstractApplicationAction {
             
             try {
                 final String stateValue = stateValueLookupStrategy.apply(profileRequestContext);
-                
-                //TODO UTF-8?
-                final byte[] stateValueBytes = stateValue.getBytes(StandardCharsets.UTF_8);
-                
-                final String token = ensureApplication().getStateTokenManager().preserveToStateToken(
-                        ensureAgent(), ensureApplication(), stateValueBytes);
-                if (state == null) {
-                    input.addmember(SPConstants.STATE).string(token);
+                if (stateValue != null) {
+                    //TODO UTF-8?
+                    final byte[] stateValueBytes = stateValue.getBytes(StandardCharsets.UTF_8);
+                    assert stateValueBytes != null;
+                    final String token = ensureApplication().getStateTokenManager().preserveToStateToken(
+                            ensureAgent(), ensureApplication(), stateValueBytes);
+                    if (state == null) {
+                        input.addmember(SPConstants.STATE).string(token);
+                    }
+                    
+                    log.debug("{} State preserved to state token: {}", getLogPrefix(), token);
                 }
-                
-                log.debug("{} State preserved to state token: {}", getLogPrefix(), token);
             } catch (final IOException e) {
                 log.warn("{} Exception preserving state to token", getLogPrefix(), e);
                 if (errorFatal) {
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponse.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponse.java
index 6bcaf0a..e19561d 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponse.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponse.java
@@ -135,10 +135,12 @@ public class PrepareAgentResponse extends AbstractTokenConsumerResponseAction {
             final DataSealer localDataSealer = dataSealer;
             
             // Add the refresh token if it exists
-            if (refreshToken != null) {
+            if (refreshToken != null && refreshToken.getValue() != null) {
                 if (localDataSealer != null) {
                     try {
-                        tokens.addmember("refresh_token").string(localDataSealer.wrap(refreshToken.getValue()));
+                        final String refreshTokenString = refreshToken.getValue();
+                        assert refreshTokenString != null;
+                        tokens.addmember("refresh_token").string(localDataSealer.wrap(refreshTokenString));
                     } catch (final DataSealerException e) {
                         log.debug("{} Error sealing refresh token for session data", getLogPrefix(), e);
                         // Is not an error, but the refresh token won't be stored.
@@ -148,34 +150,43 @@ public class PrepareAgentResponse extends AbstractTokenConsumerResponseAction {
                 }
             }
 
-            boolean accessTokenAdded = false;            
-            if (localDataSealer != null) {
-                try {
-                    tokens.addmember("access_token").string(localDataSealer.wrap(accessToken.getValue()));
+            boolean accessTokenAdded = false; 
+            if (accessToken != null && accessToken.getValue() != null) {
+                if (localDataSealer != null) {
+                    try {
+                        final String accessTokenString = accessToken.getValue();
+                        assert accessTokenString != null;
+                        tokens.addmember("access_token").string(localDataSealer.wrap(accessTokenString));
+                        accessTokenAdded = true;
+                    } catch (final DataSealerException e) {
+                        log.debug("{} Error sealing access token for session data", getLogPrefix(), e);
+                        // Is not an error,  but the access token and its attributes won't be stored.
+                    }
+                } else {
+                    tokens.addmember("access_token").string(accessToken.getValue());
                     accessTokenAdded = true;
-                } catch (final DataSealerException e) {
-                    log.debug("{} Error sealing access token for session data", getLogPrefix(), e);
-                    // Is not an error,  but the access token and its attributes won't be stored.
                 }
-            } else {
-                tokens.addmember("access_token").string(accessToken.getValue());
-                accessTokenAdded = true;
             }
 
             // Only add the attributes of an access_token if one exists
+            
             if (accessTokenAdded) {
-                tokens.addmember("token_type").string(accessToken.getType().getValue());
-                tokens.addmember("expires_in").longinteger(accessToken.getLifetime());
-                if (accessToken.getScope() != null) {
-                    tokens.addmember("scope").string(accessToken.getScope()
+                final var localAccessToken = accessToken;
+                // Access token can not be null here.
+                assert localAccessToken != null;
+                tokens.addmember("token_type").string(localAccessToken.getType().getValue());
+                tokens.addmember("expires_in").longinteger(localAccessToken.getLifetime());
+                if (localAccessToken.getScope() != null) {
+                    tokens.addmember("scope").string(localAccessToken.getScope()
                             .stream()
                             .map(String::valueOf)
                             .filter(s -> !s.isBlank())
                             .distinct()
                             .collect(java.util.stream.Collectors.joining(" ")));
                 }
-                if (accessToken.getIssuedTokenType() != null) {
-                    tokens.addmember("issued_token_type").string(accessToken.getIssuedTokenType().getURI().toString());
+                if (localAccessToken.getIssuedTokenType() != null) {
+                    tokens.addmember("issued_token_type")
+                    .string(localAccessToken.getIssuedTokenType().getURI().toString());
                 }
             }
             
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/RequestedClaimsLookupStrategy.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/RequestedClaimsLookupStrategy.java
index b19c9f3..31d95ae 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/RequestedClaimsLookupStrategy.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/RequestedClaimsLookupStrategy.java
@@ -57,7 +57,7 @@ public class RequestedClaimsLookupStrategy
         }
 
         final Map<String,Object> claims = rpConfig.getRequestedClaims(PRC_LOOKUP.apply(messageContext));
-        if (claims != null && !claims.isEmpty()) {        
+        if (!claims.isEmpty()) {        
             try {
                 return OIDCClaimsRequest.parse(new JSONObject(claims));
             } catch (final ParseException e) {
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StandardExtractionStrategy.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StandardExtractionStrategy.java
index f173b29..e955b10 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StandardExtractionStrategy.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StandardExtractionStrategy.java
@@ -15,6 +15,7 @@
 package net.shibboleth.sp.oidc.profile.impl;
 
 import java.text.ParseException;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
@@ -103,10 +104,13 @@ public class StandardExtractionStrategy implements Function<EndUserClaimsContext
             try {
                 final Date authTime = idTokenClaims.getDateClaim(IDTokenClaimsSet.AUTH_TIME_CLAIM_NAME);
                 if (authTime!= null) {
-                    assert authnInstantAttributeId != null;
-                    final IdPAttribute attr = new IdPAttribute(authnInstantAttributeId);
-                    attr.setValues(CollectionSupport.singletonList(new DateTimeAttributeValue(authTime.toInstant())));
-                    attributes.add(attr);
+                    final Instant authTimeInstant = authTime.toInstant();
+                    if (authTimeInstant != null) {
+                        assert authnInstantAttributeId != null;
+                        final IdPAttribute attr = new IdPAttribute(authnInstantAttributeId);
+                        attr.setValues(CollectionSupport.singletonList(new DateTimeAttributeValue(authTimeInstant)));
+                        attributes.add(attr);
+                    }
                 }
             } catch (final ParseException e) {
                 log.debug("Unable to process auth_time claim for standard attribute extraction", e);
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StateLookupStrategy.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StateLookupStrategy.java
index 34f2697..979bfcb 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StateLookupStrategy.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/StateLookupStrategy.java
@@ -60,11 +60,13 @@ public class StateLookupStrategy extends AbstractAgentAndRelyingPartyContextLook
         stateObject.appendField(OIDCConstants.STATE_FIELD, input.getmember(SPConstants.STATE).string());
         stateObject.appendField(OIDCConstants.NONCE_FIELD, OIDCSupport.generateRandom(32));
         final String stateJsonString = stateObject.toJSONString(JSONValue.COMPRESSION);
-        if (stateJsonString == null) {
+        if (stateJsonString == null || stateJsonString.isEmpty()) {
             return null;
         }
         try {
-            final String serializedValue = Base64Support.encodeURLSafe(stateJsonString.getBytes(StandardCharset.UTF_8));
+            final byte[] stateJsonAsBytes = stateJsonString.getBytes(StandardCharset.UTF_8);
+            assert stateJsonAsBytes != null;
+            final String serializedValue = Base64Support.encodeURLSafe(stateJsonAsBytes);
             return new StateToken(serializedValue, stateObject);
         } catch (final EncodingException e) {
             log.error("Unable to generate OAuth state", e);
diff --git a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ValidateTokenClaims.java b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ValidateTokenClaims.java
index 24486f2..8816514 100644
--- a/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ValidateTokenClaims.java
+++ b/sp-oidc-impl/src/main/java/net/shibboleth/sp/oidc/profile/impl/ValidateTokenClaims.java
@@ -150,7 +150,9 @@ public class ValidateTokenClaims extends AbstractProfileAction {
         log.debug("{} Validating JWT claims for subject '{}'",getLogPrefix(), subject);
          
         try {
-            claimsValidator.validate(claimsSet, profileRequestContext);
+            final var localClaimsSet = claimsSet;
+            assert localClaimsSet != null;
+            claimsValidator.validate(localClaimsSet, profileRequestContext);
             if (cleanupHook != null) {
                 cleanupHook.accept(profileRequestContext);
             }
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AbstractAuthenticationLookupStrategyTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AbstractAuthenticationLookupStrategyTest.java
index 8f10c41..1a96abb 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AbstractAuthenticationLookupStrategyTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AbstractAuthenticationLookupStrategyTest.java
@@ -29,6 +29,7 @@ import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.sp.context.AgentRequestContext;
 import net.shibboleth.sp.ddf.DDF;
 
@@ -37,11 +38,10 @@ import net.shibboleth.sp.ddf.DDF;
  */
 public abstract class AbstractAuthenticationLookupStrategyTest {    
 
-    /** Resource URL. */
-    @Nonnull
+    /** Resource URL. */    
     public static final byte[] RESOURCE_URL = "https://sp.example.org/secure".getBytes(StandardCharsets.UTF_8);
 
-    /** REDIRECT URI. */
+    /** Redirect URI. */
     @Nonnull
     public static final String RESPONSE_URL = "https://sp.example.org/Shibboleth.sso/callback";
     
@@ -52,8 +52,6 @@ public abstract class AbstractAuthenticationLookupStrategyTest {
     protected RelyingPartyContext rpc;
     protected AgentRequestContext arc;
     protected RelyingPartyContext partyContext;
-    
-    /** The RP config.*/
     protected DefaultOIDCAuthorizationConfiguration rpConfig;
     
     @BeforeMethod
@@ -72,6 +70,15 @@ public abstract class AbstractAuthenticationLookupStrategyTest {
         prc.addSubcontext(partyContext);
     }
     
+    /**
+     * Return the relying party context. 
+     * 
+     * @return return the relying party configuration, or throw an exception if it is null
+     */
+    @Nonnull protected RelyingPartyContext getRelyingPartyContext(){
+        return Constraint.isNotNull(partyContext, "RelyingPartyContext is null");
+    }
+    
     /**
      * Add the {@link DDF} to the agent request context.
      * 
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationContextClassRefLookupStrategyTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationContextClassRefLookupStrategyTest.java
index 67b6683..02e1eea 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationContextClassRefLookupStrategyTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationContextClassRefLookupStrategyTest.java
@@ -98,6 +98,7 @@ public class AuthenticationContextClassRefLookupStrategyTest extends AbstractAut
         assertEquals(result.get(0).getValue(), "loa1");
     }
 
+    @SuppressWarnings("null")
     @Test
     public void testNoInputNoRpConfig() {
         prc.removeSubcontext(partyContext);
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationRequestStateForStorageStrategyTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationRequestStateForStorageStrategyTest.java
index a9f1a38..2ba4bcb 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationRequestStateForStorageStrategyTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/AuthenticationRequestStateForStorageStrategyTest.java
@@ -61,6 +61,7 @@ public class AuthenticationRequestStateForStorageStrategyTest extends BaseAgplic
     
     private Duration maxAge;
     
+    @SuppressWarnings("null")
     @Override
     @BeforeMethod
     public void beforeMethod() throws ComponentInitializationException {
@@ -84,7 +85,7 @@ public class AuthenticationRequestStateForStorageStrategyTest extends BaseAgplic
         authnRequest.setAuthnRequestTime(now);
         maxAge = Duration.ofMinutes(1);
         authnRequest.setMaxAge(maxAge);
-        
+        assert mapper != null;
         strategy.setAuthenticationRequestLookupStrategy(prc -> authnRequest);
         strategy.setObjectMapper(mapper);        
     }
@@ -139,6 +140,7 @@ public class AuthenticationRequestStateForStorageStrategyTest extends BaseAgplic
 
     }
     
+    @SuppressWarnings("null")
     @Test
     public void testSuccessfulConstruction_WithDataSealer() throws Exception {
         final DataSealer sealer = Mockito.mock(DataSealer.class);
@@ -152,6 +154,7 @@ public class AuthenticationRequestStateForStorageStrategyTest extends BaseAgplic
 
     }
     
+    @SuppressWarnings("null")
     @Test
     public void testSuccessfulConstruction_WithDataSealerButSealedPredicateIsFalse() throws Exception {
         final DataSealer sealer = Mockito.mock(DataSealer.class);
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/DisplayParameterLookupStrategyTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/DisplayParameterLookupStrategyTest.java
index 49dcf72..4827412 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/DisplayParameterLookupStrategyTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/DisplayParameterLookupStrategyTest.java
@@ -74,7 +74,7 @@ public class DisplayParameterLookupStrategyTest extends AbstractAuthenticationLo
 
     @Test
     public void testDisplayParameterMissingNoRpConfig() {
-        prc.removeSubcontext(partyContext);
+        prc.removeSubcontext(getRelyingPartyContext());
         final String result = strategy.apply(mc);
         assertNull(result);
     }
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ForceAuthnParameterLookupStrategyTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ForceAuthnParameterLookupStrategyTest.java
index ee437b0..0588a5f 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ForceAuthnParameterLookupStrategyTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ForceAuthnParameterLookupStrategyTest.java
@@ -94,7 +94,7 @@ public class ForceAuthnParameterLookupStrategyTest extends AbstractAuthenticatio
 
     @Test
     public void testForceAuthnNotPresentNoRpConfig() {
-        prc.removeSubcontext(partyContext);
+        prc.removeSubcontext(getRelyingPartyContext());
         final Boolean result = strategy.apply(mc);
         assertNotNull(result);
         assert result != null;
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookieTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookieTest.java
index 682c7d0..4232079 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookieTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/IssueStateCookieTest.java
@@ -51,8 +51,8 @@ import net.shibboleth.sp.profile.impl.BaseAgplicationActionTest;
 @SuppressWarnings("javadoc")
 public class IssueStateCookieTest extends BaseAgplicationActionTest {
 
-    @Nonnull @NotEmpty private final static String TEST_STATE = "foo";
-    @Nonnull @NotEmpty private final static String TEST_VALUE = "123456789";
+    @Nonnull @NotEmpty private static final String TEST_STATE = "foo";
+    @Nonnull @NotEmpty private static final String TEST_VALUE = "123456789";
 
     private String stateValue;
     
@@ -68,6 +68,7 @@ public class IssueStateCookieTest extends BaseAgplicationActionTest {
      * 
      * @throws ComponentInitializationException
      */
+    @SuppressWarnings("null")
     @BeforeMethod
     public void setUp() throws ComponentInitializationException {
         super.beforeMethod();
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/MaxAgeFromAuthenticationRequestLookupFunctionTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/MaxAgeFromAuthenticationRequestLookupFunctionTest.java
index 8dbb0a2..077147c 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/MaxAgeFromAuthenticationRequestLookupFunctionTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/MaxAgeFromAuthenticationRequestLookupFunctionTest.java
@@ -40,6 +40,7 @@ public class MaxAgeFromAuthenticationRequestLookupFunctionTest {
 
         final AuthenticationRequestStateData state = new AuthenticationRequestStateData().setMaxAge(expected);
 
+        @SuppressWarnings("null")
         final MaxAgeFromAuthenticationRequestLookupFunction function = 
                 new MaxAgeFromAuthenticationRequestLookupFunction(Duration.ofSeconds(120));
 
@@ -52,10 +53,12 @@ public class MaxAgeFromAuthenticationRequestLookupFunctionTest {
     /**
      * Test no max_age present in authentication request, so fallback to profile configuration (not the default value).
      */
+    @SuppressWarnings("null")
     @Test
     public void testFallbackToProfileConfiguration() {
         final Duration expected = Duration.ofSeconds(300);
 
+        @SuppressWarnings("null")
         final MaxAgeFromAuthenticationRequestLookupFunction func = new MaxAgeFromAuthenticationRequestLookupFunction(
                 Duration.ofSeconds(999));
 
@@ -76,6 +79,7 @@ public class MaxAgeFromAuthenticationRequestLookupFunctionTest {
     public void testFallbackToDefault_WhenNoAuthnRequestOrRPC() {
         final Duration defaultValue = Duration.ofSeconds(180);
 
+        @SuppressWarnings("null")
         final MaxAgeFromAuthenticationRequestLookupFunction function = 
                 new MaxAgeFromAuthenticationRequestLookupFunction(
                 defaultValue);
@@ -95,6 +99,7 @@ public class MaxAgeFromAuthenticationRequestLookupFunctionTest {
 
         final AuthenticationRequestStateData state = new AuthenticationRequestStateData();
 
+        @SuppressWarnings("null")
         final MaxAgeFromAuthenticationRequestLookupFunction function = 
                 new MaxAgeFromAuthenticationRequestLookupFunction(
                 defaultValue);
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponseTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponseTest.java
index 5e32a0b..96ba023 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponseTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/PrepareAgentResponseTest.java
@@ -14,6 +14,10 @@
 
 package net.shibboleth.sp.oidc.profile.impl;
 
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
 import org.mockito.Mockito;
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -52,6 +56,7 @@ public class PrepareAgentResponseTest extends BaseAgplicationActionTest{
     /** The RP config.*/
     protected DefaultOIDCAuthorizationConfiguration rpConfig;
     
+    @SuppressWarnings("null")
     @Override
     @BeforeMethod
     public void beforeMethod() throws ComponentInitializationException {
@@ -93,9 +98,16 @@ public class PrepareAgentResponseTest extends BaseAgplicationActionTest{
         Assert.assertTrue(http.getmember("response").isnull());
         Assert.assertTrue(http.getmember("headers").isnull());
         
-        //TODO tests for actual token values when the API is changed.
         final DDF session = out.getmember(ConsumerConstants.SESSION_OPAQUE);
-        //Assert.assertFalse(session.isnull());
+        Assert.assertFalse(session.isnull());
+        final DDF tokens = session.getmember("tokens");
+        assertFalse(tokens.isnull());
+        final DDF refreshTokenDdf = tokens.getmember("refresh_token");
+        assertFalse(refreshTokenDdf.isnull());
+        assertEquals(refreshTokenDdf.string(),"refresh123");
+        final DDF accessTokenDdf = tokens.getmember("access_token");
+        assertFalse(accessTokenDdf.isnull());
+        assertEquals(accessTokenDdf.string(),"access123");
     }
 
     @Test
@@ -126,11 +138,19 @@ public class PrepareAgentResponseTest extends BaseAgplicationActionTest{
         Assert.assertTrue(http.getmember("response").isnull());
         Assert.assertTrue(http.getmember("headers").isnull());
         
-        //TODO tests for actual token values when the API is changed.
         final DDF session = out.getmember(ConsumerConstants.SESSION_OPAQUE);
-        //Assert.assertFalse(session.isnull());
+        Assert.assertFalse(session.isnull());
+        final DDF tokens = session.getmember("tokens");
+        assertFalse(tokens.isnull());
+        final DDF refreshTokenDdf = tokens.getmember("refresh_token");
+        assertFalse(refreshTokenDdf.isnull());
+        assertEquals(refreshTokenDdf.string(),"sealedRefresh");
+        final DDF accessTokenDdf = tokens.getmember("access_token");
+        assertFalse(accessTokenDdf.isnull());
+        assertEquals(accessTokenDdf.string(),"sealedAccess");
     }
 
+    @SuppressWarnings("null")
     @Test
     void testGetSessionData_DataSealerException() throws Exception {
         final DataSealer sealer = Mockito.mock(DataSealer.class);
@@ -158,9 +178,16 @@ public class PrepareAgentResponseTest extends BaseAgplicationActionTest{
         Assert.assertTrue(http.getmember("response").isnull());
         Assert.assertTrue(http.getmember("headers").isnull());
         
-        //TODO check the tokens are NOT set on the DDF because the data sealer threw an error
+        // check the tokens are NOT set on the DDF because the data sealer threw an error
         final DDF session = out.getmember(ConsumerConstants.SESSION_OPAQUE);
         // Check access_token and refresh_token not set
+        Assert.assertFalse(session.isnull());
+        final DDF tokens = session.getmember("tokens");
+        assertFalse(tokens.isnull());
+        final DDF refreshTokenDdf = tokens.getmember("refresh_token");
+        assertTrue(refreshTokenDdf.isempty());
+        final DDF accessTokenDdf = tokens.getmember("access_token");
+        assertTrue(accessTokenDdf.isempty());
     }
 
 
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ProcessStateCookieTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ProcessStateCookieTest.java
index 8bf87b6..0d10a62 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ProcessStateCookieTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/ProcessStateCookieTest.java
@@ -39,6 +39,7 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     private CookieManager cookieManager;
 
 
+    @SuppressWarnings("null")
     @BeforeMethod
     public void BeforeMethod() throws ComponentInitializationException  {
         super.beforeMethod();
@@ -50,10 +51,11 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     @Test
     public void testMissingStateTokenNonFatal() throws ComponentInitializationException {
 
-        action.setStateTokenLookupStrategy(prc -> null);
+        action.setStateTokenLookupStrategy(prcFunct -> null);
         action.setErrorFatal(false);
         action.initialize();
 
+        @SuppressWarnings("null")
         final boolean result = action.doPreExecute(prc);
         assertFalse(result);
     }
@@ -62,10 +64,11 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     @Test
     public void testMissingStateTokenFatal() throws ComponentInitializationException {
 
-        action.setStateTokenLookupStrategy(prc -> null);
+        action.setStateTokenLookupStrategy(prcFunct -> null);
         action.setErrorFatal(true);
         action.initialize();
 
+        @SuppressWarnings("null")
         final boolean result = action.doPreExecute(prc);
         assertFalse(result);
         final var ec = prc.getSubcontext(EventContext.class);
@@ -75,10 +78,11 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     }
 
     /* The cookie is missing, but this is not fatal.*/
+    @SuppressWarnings("null")
     @Test
     public void testMissingCookieNonFatal() throws ComponentInitializationException {
 
-        action.setStateTokenLookupStrategy(prc -> "state");
+        action.setStateTokenLookupStrategy(prcFunct -> "state");
         action.setErrorFatal(false);
         action.initialize();
 
@@ -92,10 +96,11 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     }
 
     /* The cookie is missing, and this is fatal.*/
+    @SuppressWarnings("null")
     @Test
     public void testMissingCookieFatal() throws ComponentInitializationException {
 
-        action.setStateTokenLookupStrategy(prc -> "state");
+        action.setStateTokenLookupStrategy(prcFunct -> "state");
         action.setErrorFatal(true);
         action.initialize();
 
@@ -111,11 +116,12 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     }
 
     /* Test cookie value found and set.*/
+    @SuppressWarnings("null")
     @Test
     public void testConsumerSuccess() throws ComponentInitializationException {
         
-        action.setStateTokenLookupStrategy(prc -> "state");
-        action.setCookieValueConsumerStrategy((prc, value) -> Boolean.TRUE);
+        action.setStateTokenLookupStrategy(prcFunct -> "state");
+        action.setCookieValueConsumerStrategy((prcFunct, value) -> Boolean.TRUE);
         action.setErrorFatal(true);
         action.initialize();
 
@@ -130,11 +136,12 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     }
 
     /* Could not set cookie back to context, but not fatal.*/
+    @SuppressWarnings("null")
     @Test
     public void testConsumerFailureNonFatal() throws ComponentInitializationException {
 
-        action.setStateTokenLookupStrategy(prc -> "state");
-        action.setCookieValueConsumerStrategy((prc, value) -> Boolean.FALSE);
+        action.setStateTokenLookupStrategy(prcFunct -> "state");
+        action.setCookieValueConsumerStrategy((prcFunct, value) -> Boolean.FALSE);
         action.setErrorFatal(false);
         action.initialize();
 
@@ -148,11 +155,12 @@ public class ProcessStateCookieTest extends BaseAgplicationActionTest {
     }
 
     /* Could not set cookie back to context, and fatal.*/
+    @SuppressWarnings("null")
     @Test
     public void testConsumerFailureFatal() throws ComponentInitializationException {
 
-        action.setStateTokenLookupStrategy(prc -> "state");
-        action.setCookieValueConsumerStrategy((prc, value) -> Boolean.FALSE);
+        action.setStateTokenLookupStrategy(prcFunct -> "state");
+        action.setCookieValueConsumerStrategy((prcFunct, value) -> Boolean.FALSE);
         action.setErrorFatal(true);
         action.initialize();
 
diff --git a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/SetAuthenticationRequestToPeerContextConsumerTest.java b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/SetAuthenticationRequestToPeerContextConsumerTest.java
index 1ee91f1..65a3eaa 100644
--- a/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/SetAuthenticationRequestToPeerContextConsumerTest.java
+++ b/sp-oidc-impl/src/test/java/net/shibboleth/sp/oidc/profile/impl/SetAuthenticationRequestToPeerContextConsumerTest.java
@@ -93,6 +93,7 @@ public class SetAuthenticationRequestToPeerContextConsumerTest extends BaseAgpli
         assertEquals(authnStateFromCtx.getPkceCodeVerifier(), "PKCECodeVerifier");        
     }   
     
+    @SuppressWarnings("null")
     @Test
     public void testSuccess_SealedWithDataSealer() throws Exception {
         final DataSealer sealer = Mockito.mock(DataSealer.class);

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


More information about the commits mailing list