[java-identity-provider] 02/04: IDP-2069 Null Handling

Rod Widdowson rdw at steadingsoftware.com
Wed Mar 15 13:38:38 UTC 2023


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch main
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=338ad5f5ec01f4fe2e8a69004a0e3601100b8ba4

commit 338ad5f5ec01f4fe2e8a69004a0e3601100b8ba4
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Mar 14 10:24:36 2023 +0000

    IDP-2069 Null Handling
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Remove several warnings from idp-authn-api
---
 .../idp/authn/AbstractCredentialValidator.java       |  8 ++++++--
 .../idp/authn/AbstractValidationAction.java          | 20 ++++++++++++++------
 .../idp/authn/AuthenticationFlowDescriptor.java      | 16 ++++++++++++----
 .../shibboleth/idp/authn/AuthenticationResult.java   | 12 +++++++++---
 .../idp/authn/context/AuthenticationContext.java     |  4 +++-
 .../idp/authn/context/RequestedPrincipalContext.java |  4 +++-
 .../authn/principal/GenericPrincipalSerializer.java  | 12 +++++++++---
 .../idp/authn/principal/PrincipalServiceManager.java |  4 +++-
 .../authn/principal/SimplePrincipalSerializer.java   | 10 +++++++---
 .../authn/context/UsernamePasswordContextTest.java   |  2 --
 10 files changed, 66 insertions(+), 26 deletions(-)

diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java
index 46406db52..6b132c3c8 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractCredentialValidator.java
@@ -130,12 +130,14 @@ public abstract class AbstractCredentialValidator extends AbstractIdentifiedInit
             @Nullable final WarningHandler warningHandler,
             @Nullable final ErrorHandler errorHandler) throws Exception {
         checkComponentActive();
+        final String id = getId();
+        assert id!=null;
         
         if (!activationCondition.test(profileRequestContext)) {
             log.debug("{} Activation condition was false, ignoring request", getLogPrefix());
             return null;
         } else if (!isAcceptable(authenticationContext.getSubcontext(RequestedPrincipalContext.class),
-                customPrincipals, getId())) {
+                customPrincipals, id)) {
             return null;
         }
         
@@ -215,7 +217,9 @@ public abstract class AbstractCredentialValidator extends AbstractIdentifiedInit
                         final PrincipalSupportingComponent wrapper = new PrincipalSupportingComponent() {
                             @Nonnull
                             public <T extends Principal> Set<T> getSupportedPrincipals(@Nonnull final Class<T> c) {
-                                return subject.getPrincipals(c);
+                                Set<T> principals = subject.getPrincipals(c);
+                                assert principals!=null;
+                                return principals;
                             }
                         };
                         if (predicate.test(wrapper)) {
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
index 9b06c067f..8b30e0c3e 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
@@ -170,7 +170,9 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
      */
     @Nonnull @NonnullElements @Unmodifiable @NotLive public Map<String,Collection<String>> getClassifiedErrors() {
         // For now this is using the older wrapper approach to guarding a live map to maintain the map insertion order.
-        return Collections.unmodifiableMap(classifiedMessages);
+        final Map<String,Collection<String>> result = Collections.unmodifiableMap(classifiedMessages);
+        assert result != null;
+        return result;                
     }
     
     /**
@@ -284,7 +286,9 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public <T extends Principal> Set<T> getSupportedPrincipals(
             @Nonnull final Class<T> c) {
-        return getSubject().getPrincipals(c);
+        final Set<T> result = getSubject().getPrincipals(c);
+        assert result != null;
+        return result;
     }
     
     /**
@@ -522,11 +526,13 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
             
             for (final Map.Entry<String, Collection<String>> entry : classifiedMessages.entrySet()) {
                 if (Iterables.any(entry.getValue(), checker::test)) {
+                    final String key = entry.getKey();
+                    assert key!=null;
                     authenticationContext.getOrCreateSubcontext(
-                            AuthenticationErrorContext.class).getClassifiedErrors().add(entry.getKey());
+                            AuthenticationErrorContext.class).getClassifiedErrors().add(key);
                     if (!eventSet) {
                         eventSet = true;
-                        ActionSupport.buildEvent(profileRequestContext, entry.getKey());
+                        ActionSupport.buildEvent(profileRequestContext, key);
                     }
                 }
             }
@@ -566,11 +572,13 @@ public abstract class AbstractValidationAction extends AbstractAuthenticationAct
             
             for (final Map.Entry<String, Collection<String>> entry : classifiedMessages.entrySet()) {
                 if (Iterables.any(entry.getValue(), checker::test)) {
+                    final String key = entry.getKey();
+                    assert key!=null;
                     authenticationContext.getOrCreateSubcontext(
-                            AuthenticationWarningContext.class).getClassifiedWarnings().add(entry.getKey());
+                            AuthenticationWarningContext.class).getClassifiedWarnings().add(key);
                     if (!eventSet) {
                         eventSet = true;
-                        ActionSupport.buildEvent(profileRequestContext, entry.getKey());
+                        ActionSupport.buildEvent(profileRequestContext, key);
                     }
                 }
             }
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
index c09f66175..68934c738 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
@@ -142,7 +142,9 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
         reuseCondition = new ProxyCountPredicate();
         supportedPrincipals = new Subject();
         activationCondition = PredicateSupport.alwaysTrue();
-        inactivityTimeout = Duration.ofMinutes(30);
+        final Duration thirtyMins = Duration.ofMinutes(30);
+        assert thirtyMins != null;
+        inactivityTimeout = thirtyMins;
         principalWeightMap = CollectionSupport.emptyMap();
         stringBasedPrincipals = CollectionSupport.emptySet();
     }
@@ -446,7 +448,9 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
     /** {@inheritDoc} */
     @Override @Nonnull @NonnullElements @Unmodifiable public <T extends Principal> Set<T> getSupportedPrincipals(
             @Nonnull final Class<T> c) {
-        return supportedPrincipals.getPrincipals(c);
+        final Set<T> result = supportedPrincipals.getPrincipals(c);
+        assert result != null;
+        return result;
     }
 
     /**
@@ -459,7 +463,9 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
      * @return a live collection of supported principals
      */
     @Nonnull @NonnullElements public Collection<Principal> getSupportedPrincipals() {
-        return supportedPrincipals.getPrincipals();
+        final Collection<Principal> result = supportedPrincipals.getPrincipals();
+        assert result != null;
+        return result;
     }
 
     /**
@@ -578,7 +584,9 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
      * @return the new result
      */
     @Nonnull public AuthenticationResult newAuthenticationResult(@Nonnull final Subject subject) {
-        final AuthenticationResult result = new AuthenticationResult(getId(), subject);
+        final String id = getId();
+        assert id != null;
+        final AuthenticationResult result = new AuthenticationResult(id, subject);
 
         if (proxyRestrictionsEnforced) {
             result.setReuseCondition(PredicateSupport.and(reuseCondition, result.new ProxyRestrictionReusePredicate()));
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java
index 8c2193420..c8b9868de 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java
@@ -94,7 +94,9 @@ public class AuthenticationResult implements PrincipalSupportingComponent, Predi
         authenticationFlowId = Constraint.isNotNull(StringSupport.trimOrNull(flowId),
                 "Authentication flow ID cannot be null nor empty");
         subject = Constraint.isNotNull(newSubject, "Subject list cannot be null or empty");
-        authenticationInstant = Instant.now();
+        final Instant now = Instant.now();
+        assert now != null;
+        authenticationInstant = now;
         lastActivityInstant = authenticationInstant;
         additionalData = new HashMap<>();
         
@@ -172,7 +174,9 @@ public class AuthenticationResult implements PrincipalSupportingComponent, Predi
     @Override
     @Nonnull @NonnullElements @Unmodifiable @NotLive public <T extends Principal> Set<T> getSupportedPrincipals(
             @Nonnull final Class<T> c) {
-        return subject.getPrincipals(c);
+        final Set<T> result = subject.getPrincipals(c);
+        assert result != null;
+        return result;
     }
     
     /**
@@ -224,7 +228,9 @@ public class AuthenticationResult implements PrincipalSupportingComponent, Predi
      * Set the last activity instant for this result to the current time.
      */
     public void setLastActivityInstantToNow() {
-        lastActivityInstant = Instant.now();
+        final Instant now = Instant.now();
+        assert now != null;
+        lastActivityInstant = now;
     }
     
     /**
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
index 35a20d487..ae9785eb6 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
@@ -134,7 +134,9 @@ public final class AuthenticationContext extends BaseContext {
 
     /** Constructor. */
     public AuthenticationContext() {
-        initiationInstant = Instant.now();
+        final Instant now = Instant.now();
+        assert now!=null;
+        initiationInstant = now;
         
         availableFlows = new HashMap<>();
         potentialFlows = new LinkedHashMap<>();
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
index df21df33d..03ecea46e 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
@@ -254,7 +254,9 @@ public final class RequestedPrincipalContext extends BaseContext {
         return isAcceptable(new PrincipalSupportingComponent() {
             @Nonnull public <TT extends Principal> Set<TT> getSupportedPrincipals(@Nonnull final Class<TT> c) {
                 if (c.isAssignableFrom(principal.getClass())) {
-                    return CollectionSupport.singleton(c.cast(principal));
+                    final TT cast = c.cast(principal);
+                    assert cast != null;
+                    return CollectionSupport.singleton(cast);
                 }
                 return CollectionSupport.emptySet();
             }
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/GenericPrincipalSerializer.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/GenericPrincipalSerializer.java
index 6619c9a00..2dcb8f0d8 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/GenericPrincipalSerializer.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/GenericPrincipalSerializer.java
@@ -84,8 +84,12 @@ public class GenericPrincipalSerializer extends AbstractPrincipalSerializer<Stri
      * Constructor.
      */
     public GenericPrincipalSerializer() {
-        symbolics = ImmutableBiMap.of();
-        compatiblePrincipalTypes = Collections.synchronizedSet(new HashSet<Class<? extends Principal>>());
+        final BiMap<String,Integer> s = ImmutableBiMap.of();
+        assert s!=null;
+        symbolics = s;
+        final Set<Class<? extends Principal>> cpt = Collections.synchronizedSet(new HashSet<Class<? extends Principal>>());
+        assert cpt!=null;
+        compatiblePrincipalTypes = cpt;
     }
 
     /**
@@ -95,7 +99,9 @@ public class GenericPrincipalSerializer extends AbstractPrincipalSerializer<Stri
      */
     public void setSymbolics(@Nonnull @NonnullElements final Map<String,Integer> mappings) {
         checkSetterPreconditions();
-        symbolics = HashBiMap.create(Constraint.isNotNull(mappings, "Mappings cannot be null"));
+        final BiMap<String,Integer> s = HashBiMap.create(Constraint.isNotNull(mappings, "Mappings cannot be null"));
+        assert s!=null;
+        symbolics = s;
     }
         
     /** {@inheritDoc} */
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/PrincipalServiceManager.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/PrincipalServiceManager.java
index 1c3e2bf82..646e7c925 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/PrincipalServiceManager.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/PrincipalServiceManager.java
@@ -79,7 +79,9 @@ public class PrincipalServiceManager {
      * @return all registered services
      */
     @Nonnull @NonnullElements @NotLive @Unmodifiable public Collection<PrincipalService<?>> all() {
-        return CollectionSupport.copyToList(classIndexedMap.values());
+        final Collection<PrincipalService<?>> values = classIndexedMap.values();
+        assert values!=null;
+        return CollectionSupport.copyToList(values);
     }
 
     /**
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/SimplePrincipalSerializer.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/SimplePrincipalSerializer.java
index 651a7b4f9..ba28e81ac 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/SimplePrincipalSerializer.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/principal/SimplePrincipalSerializer.java
@@ -76,10 +76,14 @@ public class SimplePrincipalSerializer<T extends Principal> extends AbstractPrin
             @Nonnull @NotEmpty @ParameterName(name="name") final String name)
                     throws NoSuchMethodException, SecurityException {
         
-        principalType = Constraint.isNotNull(claz, "Principal type cannot be null");
-        ctor = principalType.getConstructor(String.class);
+        final Class<T> typeClaz = principalType = Constraint.isNotNull(claz, "Principal type cannot be null");
+        final Constructor<T> constructor = typeClaz.getConstructor(String.class);
+        assert constructor!=null;
+        ctor = constructor;
         fieldName = Constraint.isNotNull(StringSupport.trimOrNull(name), "Field name cannot be empty or null");
-        jsonPattern = Pattern.compile("^\\{\"" + fieldName + "\":.*\\}$");
+        final Pattern pattern = Pattern.compile("^\\{\"" + fieldName + "\":.*\\}$");
+        assert pattern != null;
+        jsonPattern = pattern;
     }
     
     /** {@inheritDoc} */
diff --git a/idp-authn-api/src/test/java/net/shibboleth/idp/authn/context/UsernamePasswordContextTest.java b/idp-authn-api/src/test/java/net/shibboleth/idp/authn/context/UsernamePasswordContextTest.java
index 16012e8ce..a6acd783e 100644
--- a/idp-authn-api/src/test/java/net/shibboleth/idp/authn/context/UsernamePasswordContextTest.java
+++ b/idp-authn-api/src/test/java/net/shibboleth/idp/authn/context/UsernamePasswordContextTest.java
@@ -17,8 +17,6 @@
 
 package net.shibboleth.idp.authn.context;
 
-import net.shibboleth.idp.authn.context.UsernamePasswordContext;
-
 import org.testng.Assert;
 import org.testng.annotations.Test;
 

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


More information about the commits mailing list