[java-idp-plugin-duo] branch main updated: Improve Javadoc and emptyness check

Codeberg noreply at shibboleth.net
Wed Sep 23 09:31:56 UTC 2026


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

codeberg pushed a commit to branch main
in repository java-idp-plugin-duo.

View the commit online:
https://codeberg.org/Shibboleth/java-idp-plugin-duo/commit/0cb2a94fe27593d2b7a72061c5e06bb21b276edc

The following commit(s) were added to refs/heads/main by this push:
     new 0cb2a94f Improve Javadoc and emptyness check
0cb2a94f is described below

commit 0cb2a94fe27593d2b7a72061c5e06bb21b276edc
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Wed Sep 23 10:31:45 2026 +0100

    Improve Javadoc and emptyness check
---
 .../authn/duo/AuthenticationRequestOptions.java    |  4 ++--
 .../idp/plugin/authn/duo/DuoOIDCIntegration.java   |  2 +-
 .../impl/DuoAuthenticationTimeClaimsValidator.java |  7 +++---
 .../authn/duo/sdk/impl/DuoSDKClientAdaptor.java    |  4 ++--
 .../authn/duo/sdk/impl/DuoSDKClientFactory.java    |  2 +-
 .../duo/sdk/impl/DuoSDKClientFactoryTest.java      | 28 ++++++++++++++++++++++
 6 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/AuthenticationRequestOptions.java b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/AuthenticationRequestOptions.java
index 96720f90..5b50edf9 100644
--- a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/AuthenticationRequestOptions.java
+++ b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/AuthenticationRequestOptions.java
@@ -118,7 +118,7 @@ public class AuthenticationRequestOptions {
 	}
 
 	/**
-	 * Get the maximum authentication age in seconds.
+	 * Get the maximum authentication age.
 	 *
 	 * @return max_age
 	 */
@@ -127,7 +127,7 @@ public class AuthenticationRequestOptions {
 	}
 
 	/**
-	 * Set the maximum authentication age in seconds.
+	 * Set the maximum authentication age.
 	 *
 	 * @param value max_age
 	 *
diff --git a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DuoOIDCIntegration.java b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DuoOIDCIntegration.java
index a2165407..5a3d481f 100644
--- a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DuoOIDCIntegration.java
+++ b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DuoOIDCIntegration.java
@@ -128,7 +128,7 @@ public interface DuoOIDCIntegration extends PrincipalSupportingComponent {
     }
     
     /**
-     * Get the maximum authentication age in seconds.
+     * Get the maximum authentication age.
      * 
      * @return the maximum authentication age
      * 
diff --git a/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthenticationTimeClaimsValidator.java b/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthenticationTimeClaimsValidator.java
index 21669768..914abd55 100644
--- a/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthenticationTimeClaimsValidator.java
+++ b/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthenticationTimeClaimsValidator.java
@@ -54,9 +54,9 @@ public class DuoAuthenticationTimeClaimsValidator extends AbstractClaimsValidato
 	/** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(DuoAuthenticationTimeClaimsValidator.class);
     
-    /** 
-     * Lookup strategy to find the amount of time for which a token is valid 
-     * after if it was first issued. (Default value: 60 seconds) 
+    /**
+     * Lookup strategy to determine the maximum permitted age of the
+     * authentication event. Default value: 60 seconds.
      */
     @Nonnull private Function<ProfileRequestContext, Duration> authnLifetimeLookupStrategy;
     
@@ -125,7 +125,6 @@ public class DuoAuthenticationTimeClaimsValidator extends AbstractClaimsValidato
      * 
      * @param strategy the strategy
      * 
-     * @since 2.2.0
      */
 	public void setAuthnLifetimeLookupStrategy(@Nonnull final Function<ProfileRequestContext, Duration> strategy) {
         ifInitializedThrowUnmodifiabledComponentException();
diff --git a/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientAdaptor.java b/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientAdaptor.java
index 979e5812..d26068f0 100644
--- a/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientAdaptor.java
+++ b/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientAdaptor.java
@@ -99,7 +99,7 @@ public final class DuoSDKClientAdaptor extends AbstractDuoOIDCClient{
          tokenResponseConverter = new DefaultTokenResponseConverter();
 
          try {
-             if (caCerts == null) {
+             if (caCerts == null || caCerts.isEmpty()) {
             	 log.trace("Creating a new Duo client without pinned certificates");
                  //will use the default certs in the Client if the caCerts are null
                  final Client newClient = new Client.Builder(integration.getClientId(), integration.getSecretKey(),
@@ -109,7 +109,7 @@ public final class DuoSDKClientAdaptor extends AbstractDuoOIDCClient{
                  assert newClient != null;
                  client = newClient;
              } else {
-            	 log.trace("Creating a new Duo client with pinned certificates");
+            	 log.trace("Creating a new Duo client with '{}' pinned certificates", caCerts.size());
                  final Client newClient = new Client.Builder(integration.getClientId(), integration.getSecretKey(),
                          integration.getAPIHost(), integration.getRedirectURI()).setCACerts(
                                  caCerts.toArray(new String[caCerts.size()]))
diff --git a/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactory.java b/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactory.java
index ed26d943..4bb73a5b 100644
--- a/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactory.java
+++ b/idp-duo-sdk-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactory.java
@@ -104,7 +104,7 @@ public final class DuoSDKClientFactory extends AbstractInitializableComponent im
     }
     
     /**
-     * Check the certificate strings is a valid X.509 certificates, and not, for example, a public key pin.
+     * Check the certificate strings are valid X.509 certificates, and not, for example, a public key pin.
      * 
      * @param certificate the certificate to check
      */
diff --git a/idp-duo-sdk-client-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactoryTest.java b/idp-duo-sdk-client-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactoryTest.java
index d9359f02..51b2d0a1 100644
--- a/idp-duo-sdk-client-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactoryTest.java
+++ b/idp-duo-sdk-client-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/sdk/impl/DuoSDKClientFactoryTest.java
@@ -112,5 +112,33 @@ public class DuoSDKClientFactoryTest {
         final DuoOIDCClient client = factory.createInstance(integ);
         assertNotNull(client);
     }
+    
+    /**
+     * Test creation.
+     * 
+     * @throws DuoClientException on error.
+     * @throws ComponentInitializationException on error
+     */
+    @Test
+    public final void testCreateInstance_EmptyCerts() throws DuoClientException, ComponentInitializationException {
+    	final List<Resource> certs = new ArrayList<>();
+    	factory.setPinnedCertificates(certs);
+        final DefaultDuoOIDCIntegration integ = new DefaultDuoOIDCIntegration();
+        integ.setAPIHost("api-c9f24c5a.duosecurity.com");
+        integ.setClientId("DIU6GEFWG5LIUTVV2M3N");
+        integ.setRegisteredRedirectURI("http://localhost/");
+        integ.setSecretKey("TeXvZxKul47v1Wew2zb6xRPzAJewJ34MP2w8Uith");
+        integ.setAuthorizeEndpoint("/oauth/v1/authorize");
+        integ.setTokenEndpoint("/oauth/v1/token");
+        integ.setHealthCheckEndpoint("/oauth/v1/health_check");
+        integ.initialize();
+        final var registeredRedirect = integ.getRegisteredRedirectURI();
+        assertNotNull(registeredRedirect);
+        assert registeredRedirect != null;
+        integ.setRedirectURIIfAbsent(registeredRedirect);
+        factory.initialize();
+        final DuoOIDCClient client = factory.createInstance(integ);
+        assertNotNull(client);
+    }
 
 }

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


More information about the commits mailing list