[java-idp-plugin-duo] branch main updated: Null cleanup.
Scott Cantor
cantor.2 at osu.edu
Tue Dec 19 14:56:55 UTC 2023
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-idp-plugin-duo.
View the commit online:
http://git.shibboleth.net/view/?p=java-idp-plugin-duo.git;a=commit;h=d884006fbb561234acc145d64a2f5e9137765a8e
The following commit(s) were added to refs/heads/main by this push:
new d884006f Null cleanup.
d884006f is described below
commit d884006fbb561234acc145d64a2f5e9137765a8e
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Dec 19 09:56:53 2023 -0500
Null cleanup.
---
.../authn/duo/DefaultDuoOIDCIntegration.java | 46 ++++-----
.../plugin/authn/duo/SimpleDuoOIDCIntegration.java | 61 ++++++------
.../AbstractDuoTokenClaimsAuditExtractor.java | 11 ++-
.../authn/duo/DefaultDuoOIDCIntegrationTest.java | 1 +
.../authn/duo/impl/DualDuoIntegrationStrategy.java | 4 +-
.../plugin/authn/duo/impl/DuoAuthnFlowTest.java | 104 +++++++++------------
.../authn/duo/impl/DuoOIDCAuthnControllerTest.java | 7 +-
.../duo/impl/InMemoryCredentialValidator.java | 15 ++-
.../mock/MockDuoOIDCClientFactory_FAIL_Client.java | 4 +-
.../mock/MockDuoOIDCClientFactory_OK_Client.java | 4 +-
.../plugin/authn/mock/MockDuoOIDCClient_FAIL.java | 15 +--
.../plugin/authn/mock/MockDuoOIDCClient_OK.java | 15 +--
.../mock/MockDuoOIDCClient_OK_OLD_AUTH_TIME.java | 15 +--
.../authn/mock/MockDuoOIDCClient_UNKNOWN.java | 15 +--
.../spring/CustomFlowRelativeResourceLoader.java | 8 +-
.../plugin/authn/duo/nimbus/impl/NimbusClient.java | 2 +-
.../authn/duo/nimbus/impl/NimbusClientFactory.java | 2 +-
17 files changed, 174 insertions(+), 155 deletions(-)
diff --git a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegration.java b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegration.java
index a89b9336..41b7503d 100644
--- a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegration.java
+++ b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegration.java
@@ -102,14 +102,14 @@ public final class DefaultDuoOIDCIntegration
Constraint.isNotNull(hosts, "Types cannot be null")));
}
- @Override
+ /** {@inheritDoc} */
@Nonnull @NotLive @Unmodifiable public synchronized Set<String> getAllowedOrigins() {
//set is unmodifiable and string is immutable - so not live.
return CollectionSupport.copyToSet(allowedOrigins);
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getAPIHost() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getAPIHost() {
checkComponentActive();
assert apiHost != null;
return apiHost;
@@ -125,8 +125,8 @@ public final class DefaultDuoOIDCIntegration
apiHost = Constraint.isNotNull(StringSupport.trimOrNull(host), "API host cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getHealthCheckEndpoint() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getHealthCheckEndpoint() {
checkComponentActive();
assert healthEndpoint != null;
return healthEndpoint;
@@ -143,8 +143,8 @@ public final class DefaultDuoOIDCIntegration
"Health check endpoint cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getAuthorizeEndpoint() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getAuthorizeEndpoint() {
checkComponentActive();
assert authorizeEndpoint != null;
return authorizeEndpoint;
@@ -161,8 +161,8 @@ public final class DefaultDuoOIDCIntegration
"Authorize endpoint cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getTokenEndpoint() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getTokenEndpoint() {
checkComponentActive();
assert tokenEndpoint != null;
return tokenEndpoint;
@@ -179,7 +179,7 @@ public final class DefaultDuoOIDCIntegration
"Token endpoint cannot be null or empty");
}
- @Override
+ /** {@inheritDoc} */
@Nullable public synchronized String getRedirectURI() {
return redirectURI;
}
@@ -194,12 +194,12 @@ public final class DefaultDuoOIDCIntegration
registeredRedirectURI = StringSupport.trimOrNull(uri);
}
- @Override
+ /** {@inheritDoc} */
@Nullable public synchronized String getRegisteredRedirectURI() {
return registeredRedirectURI;
}
- @Override
+ /** {@inheritDoc} */
public synchronized boolean isRedirectURIPreregistered() {
if (getRegisteredRedirectURI() == null) {
return false;
@@ -207,7 +207,7 @@ public final class DefaultDuoOIDCIntegration
return true;
}
- @Override
+ /** {@inheritDoc} */
public synchronized void setRedirectURIIfAbsent(
@Nonnull @NotEmpty final String computedRedirectURI){
// Specifically do not check if component has been initialized. This can change during use.
@@ -229,8 +229,8 @@ public final class DefaultDuoOIDCIntegration
clientId = Constraint.isNotNull(StringSupport.trimOrNull(id), "ClientID cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getClientId() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getClientId() {
checkComponentActive();
assert clientId != null;
return clientId;
@@ -246,15 +246,15 @@ public final class DefaultDuoOIDCIntegration
secretKey = Constraint.isNotNull(StringSupport.trimOrNull(key), "Secret key cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getSecretKey() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getSecretKey() {
checkComponentActive();
assert secretKey != null;
return secretKey;
}
- @Override
+ /** {@inheritDoc} */
@Nonnull @NonnullElements @Unmodifiable
public synchronized <T extends Principal> Set<T> getSupportedPrincipals(@Nonnull final Class<T> c) {
final Set<T> result = supportedPrincipals.getPrincipals(c);
@@ -281,6 +281,7 @@ public final class DefaultDuoOIDCIntegration
}
}
+ /** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
synchronized (this) {
@@ -296,11 +297,13 @@ public final class DefaultDuoOIDCIntegration
}
+ /** {@inheritDoc} */
@Override
public int hashCode() {
return Objects.hash(getClientId());
}
+ /** {@inheritDoc} */
@Override
public boolean equals(final Object obj) {
if (this == obj) {
@@ -316,6 +319,7 @@ public final class DefaultDuoOIDCIntegration
return Objects.equals(getClientId(), other.getClientId());
}
+ /** {@inheritDoc} */
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
@@ -329,8 +333,4 @@ public final class DefaultDuoOIDCIntegration
return builder.toString();
}
-
-
-
-
-}
+}
\ No newline at end of file
diff --git a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/SimpleDuoOIDCIntegration.java b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/SimpleDuoOIDCIntegration.java
index 8bd8aca7..29067330 100644
--- a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/SimpleDuoOIDCIntegration.java
+++ b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/SimpleDuoOIDCIntegration.java
@@ -25,8 +25,6 @@ import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;
import javax.security.auth.Subject;
-import org.slf4j.Logger;
-
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
@@ -34,7 +32,6 @@ import net.shibboleth.shared.annotation.constraint.Unmodifiable;
import net.shibboleth.shared.component.AbstractInitializableComponent;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
@@ -44,10 +41,7 @@ import net.shibboleth.shared.primitive.StringSupport;
@ThreadSafe
public final class SimpleDuoOIDCIntegration
extends AbstractInitializableComponent implements DuoOIDCIntegration{
-
- /** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(SimpleDuoOIDCIntegration.class);
-
+
/** API host. */
@GuardedBy("this") @NonnullAfterInit @NotEmpty private String apiHost;
@@ -76,11 +70,11 @@ public final class SimpleDuoOIDCIntegration
public SimpleDuoOIDCIntegration() {
supportedPrincipals = new Subject();
}
-
-
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getAPIHost() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getAPIHost() {
+ checkComponentActive();
+ assert apiHost != null;
return apiHost;
}
@@ -96,8 +90,10 @@ public final class SimpleDuoOIDCIntegration
apiHost = Constraint.isNotNull(StringSupport.trimOrNull(host), "API host cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getHealthCheckEndpoint() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getHealthCheckEndpoint() {
+ checkComponentActive();
+ assert healthEndpoint != null;
return healthEndpoint;
}
@@ -114,8 +110,10 @@ public final class SimpleDuoOIDCIntegration
"Health check endpoint cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getAuthorizeEndpoint() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getAuthorizeEndpoint() {
+ checkComponentActive();
+ assert authorizeEndpoint != null;
return authorizeEndpoint;
}
@@ -132,8 +130,10 @@ public final class SimpleDuoOIDCIntegration
"Authorize endpoint cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getTokenEndpoint() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getTokenEndpoint() {
+ checkComponentActive();
+ assert tokenEndpoint != null;
return tokenEndpoint;
}
@@ -150,7 +150,7 @@ public final class SimpleDuoOIDCIntegration
"Token endpoint cannot be null or empty");
}
- @Override
+ /** {@inheritDoc} */
@Nullable public synchronized String getRedirectURI() {
return redirectURI;
}
@@ -180,8 +180,10 @@ public final class SimpleDuoOIDCIntegration
clientId = Constraint.isNotNull(StringSupport.trimOrNull(id), "ClientID cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getClientId() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getClientId() {
+ checkComponentActive();
+ assert clientId != null;
return clientId;
}
@@ -197,13 +199,16 @@ public final class SimpleDuoOIDCIntegration
secretKey = Constraint.isNotNull(StringSupport.trimOrNull(key), "Secret key cannot be null or empty");
}
- @Override
- @NonnullAfterInit @NotEmpty public synchronized String getSecretKey() {
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public synchronized String getSecretKey() {
+ checkComponentActive();
+ assert secretKey != null;
return secretKey;
}
- @Override
+ /** {@inheritDoc} */
+ @SuppressWarnings("null")
@Nonnull @NonnullElements @Unmodifiable
public synchronized <T extends Principal> Set<T> getSupportedPrincipals(@Nonnull final Class<T> c) {
return supportedPrincipals.getPrincipals(c);
@@ -230,6 +235,7 @@ public final class SimpleDuoOIDCIntegration
}
}
+ /** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
if (getAPIHost() == null || getClientId() == null || getSecretKey() == null
@@ -241,11 +247,13 @@ public final class SimpleDuoOIDCIntegration
}
}
+ /** {@inheritDoc} */
@Override
public int hashCode() {
return Objects.hash(getClientId());
}
+ /** {@inheritDoc} */
@Override
public boolean equals(final Object obj) {
if (this == obj) {
@@ -261,6 +269,7 @@ public final class SimpleDuoOIDCIntegration
return Objects.equals(getClientId(), other.getClientId());
}
+ /** {@inheritDoc} */
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
@@ -274,8 +283,4 @@ public final class SimpleDuoOIDCIntegration
return builder.toString();
}
-
-
-
-
-}
+}
\ No newline at end of file
diff --git a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/audit/AbstractDuoTokenClaimsAuditExtractor.java b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/audit/AbstractDuoTokenClaimsAuditExtractor.java
index 98cb4f90..1a34c71d 100644
--- a/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/audit/AbstractDuoTokenClaimsAuditExtractor.java
+++ b/idp-duo-api/src/main/java/net/shibboleth/idp/plugin/authn/duo/audit/AbstractDuoTokenClaimsAuditExtractor.java
@@ -38,23 +38,26 @@ import net.shibboleth.idp.plugin.authn.duo.context.DuoOIDCAuthenticationContext;
@ThreadSafe
public abstract class AbstractDuoTokenClaimsAuditExtractor<T> extends AbstractDuoAuditExtractor<T> {
-
- @Override
+
+ /** {@inheritDoc} */
@Nullable public T apply(@Nullable final ProfileRequestContext profileRequestContext) {
if (profileRequestContext == null) {
return null;
}
+
final AuthenticationContext authnContext =
profileRequestContext.getSubcontext(AuthenticationContext.class);
if (authnContext == null) {
return null;
}
+
final DuoOIDCAuthenticationContext duoContext = authnContext.getSubcontext(DuoOIDCAuthenticationContext.class);
final JWT authToken = duoContext != null ? duoContext.getAuthToken() : null;
- if (authToken == null) {
+ if (duoContext == null || authToken == null) {
return null;
}
+
JWTClaimsSet claimsSet = null;
try {
claimsSet = authToken.getJWTClaimsSet();
@@ -64,9 +67,11 @@ public abstract class AbstractDuoTokenClaimsAuditExtractor<T> extends AbstractDu
} catch (final ParseException e) {
return null;
}
+
return doLookup(claimsSet, duoContext);
}
+ /** {@inheritDoc} */
@Override
@Nullable protected T doLookup(@Nonnull final DuoOIDCAuthenticationContext duoContext) {
JWTClaimsSet claimsSet = null;
diff --git a/idp-duo-api/src/test/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegrationTest.java b/idp-duo-api/src/test/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegrationTest.java
index fac30382..aff0fe41 100644
--- a/idp-duo-api/src/test/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegrationTest.java
+++ b/idp-duo-api/src/test/java/net/shibboleth/idp/plugin/authn/duo/DefaultDuoOIDCIntegrationTest.java
@@ -21,6 +21,7 @@ import org.testng.annotations.Test;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Test for the DefaultDuoOIDCIntegration. */
+ at SuppressWarnings("javadoc")
public class DefaultDuoOIDCIntegrationTest {
/**
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DualDuoIntegrationStrategy.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DualDuoIntegrationStrategy.java
index 53e69b97..1e442dbf 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DualDuoIntegrationStrategy.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DualDuoIntegrationStrategy.java
@@ -55,10 +55,10 @@ public class DualDuoIntegrationStrategy implements Function<ProfileRequestContex
int2.initialize();
if (DuoAuthnFlowTest.FIRST_INTEGRATION_SP.equals(
- prc.getSubcontext(RelyingPartyContext.class).getRelyingPartyId())) {
+ prc.ensureSubcontext(RelyingPartyContext.class).getRelyingPartyId())) {
return int1;
} else if (DuoAuthnFlowTest.SECOND_INTEGRATION_SP.equals(
- prc.getSubcontext(RelyingPartyContext.class).getRelyingPartyId())){
+ prc.ensureSubcontext(RelyingPartyContext.class).getRelyingPartyId())){
return int2;
}
//fail if none chosen.
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthnFlowTest.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthnFlowTest.java
index 24f3c6ce..5c6a07a3 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthnFlowTest.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoAuthnFlowTest.java
@@ -21,11 +21,11 @@ import java.util.Map;
import java.util.Set;
import javax.annotation.Nonnull;
+import javax.security.auth.Subject;
import org.junit.Test;
import org.opensaml.profile.context.EventContext;
import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
import org.springframework.core.io.ClassPathResource;
import org.springframework.webflow.core.collection.LocalAttributeMap;
import org.springframework.webflow.engine.Flow;
@@ -42,6 +42,7 @@ import net.shibboleth.idp.authn.context.SubjectCanonicalizationContext;
import net.shibboleth.idp.authn.impl.ExternalAuthenticationImpl;
import net.shibboleth.idp.plugin.authn.duo.DefaultDuoOIDCIntegration;
import net.shibboleth.idp.plugin.authn.duo.DuoClientException;
+import net.shibboleth.idp.plugin.authn.duo.DuoOIDCIntegration;
import net.shibboleth.idp.plugin.authn.duo.context.DuoOIDCAuthenticationContext;
import net.shibboleth.idp.plugin.authn.mock.MockDuoOIDCClientFactory_FAIL_Client;
import net.shibboleth.idp.plugin.authn.mock.MockDuoOIDCClientFactory_OK_Client;
@@ -53,7 +54,6 @@ import net.shibboleth.profile.context.RelyingPartyContext;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.Unmodifiable;
import net.shibboleth.shared.component.ComponentInitializationException;
-import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Test the Duo 2FA flow using SWF flow testing.
@@ -75,19 +75,10 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
/** Duo client ID of the integration needed for the {@link #SECOND_INTEGRATION_SP}.*/
@Nonnull public static final String SECOND_INTEGRATION_CLIENT_ID = "SECOND_INTEGRATION";
- /** The username of the user to test.*/
- @Nonnull private static final String USERNAME = "jdoe";
-
- /** The password of the user to test.*/
- @Nonnull private static final String PASSWORD = "changeit";
-
/** Path to the flow to be tested.*/
@Nonnull private static final String FLOW =
"/META-INF/net/shibboleth/idp/flows/authn/DuoOIDC/duo-oidc-authn-flow.xml";
- /** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(DuoAuthnFlowTest.class);
-
/** List of mocked subflows.*/
@Nonnull @NonnullElements @Unmodifiable private final List<Flow> subflows =
List.of(MockFlowBuilder.MockNoOpFlow("c14n"));
@@ -213,13 +204,13 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
assertCurrentStateEquals("Duo2FAAuthorizationRequest");
assertNotNull(prcOne.getSubcontext(AuthenticationContext.class));
- assertNotNull(prcOne.getSubcontext(AuthenticationContext.class).getSubcontext(
+ assertNotNull(prcOne.ensureSubcontext(AuthenticationContext.class).getSubcontext(
DuoOIDCAuthenticationContext.class));
- assertNotNull(prcOne.getSubcontext(AuthenticationContext.class).getSubcontext(
- DuoOIDCAuthenticationContext.class).getIntegration());
- assertEquals(FIRST_INTEGRATION_CLIENT_ID,prcOne.getSubcontext(AuthenticationContext.class)
- .getSubcontext(DuoOIDCAuthenticationContext.class).getIntegration().getClientId());
-
+
+ final DuoOIDCIntegration integration = prcOne.ensureSubcontext(AuthenticationContext.class).ensureSubcontext(
+ DuoOIDCAuthenticationContext.class).getIntegration();
+ assert integration != null;
+ assertEquals(FIRST_INTEGRATION_CLIENT_ID, integration.getClientId());
}
/** Test the Duo flow up to the external authorization request using the dynamically selected
@@ -258,13 +249,13 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
assertCurrentStateEquals("Duo2FAAuthorizationRequest");
assertNotNull(prcOne.getSubcontext(AuthenticationContext.class));
- final var ac = prcOne.getSubcontext(AuthenticationContext.class);
- assertNotNull(prcOne.getSubcontext(AuthenticationContext.class).getSubcontext(
+ assertNotNull(prcOne.ensureSubcontext(AuthenticationContext.class).getSubcontext(
DuoOIDCAuthenticationContext.class));
- assertNotNull(prcOne.getSubcontext(AuthenticationContext.class).getSubcontext(
- DuoOIDCAuthenticationContext.class).getIntegration());
- assertEquals(SECOND_INTEGRATION_CLIENT_ID,prcOne.getSubcontext(AuthenticationContext.class)
- .getSubcontext(DuoOIDCAuthenticationContext.class).getIntegration().getClientId());
+
+ final DuoOIDCIntegration integration = prcOne.ensureSubcontext(AuthenticationContext.class).ensureSubcontext(
+ DuoOIDCAuthenticationContext.class).getIntegration();
+ assert integration != null;
+ assertEquals(SECOND_INTEGRATION_CLIENT_ID, integration.getClientId());
}
@@ -352,11 +343,11 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
integ.initialize();
duoContext.setIntegration(integ);
- //add the mock client as was not added by the populate stage
- duoContext.setClient(new MockDuoOIDCClient_OK(duoContext.getIntegration()));
+ //add the mock client as was not added by the populate stage
+ duoContext.setClient(new MockDuoOIDCClient_OK(integ));
- prc.getSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
- prc.getSubcontext(AuthenticationContext.class)
+ prc.ensureSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
+ prc.ensureSubcontext(AuthenticationContext.class)
.addSubcontext(new ExternalAuthenticationContext(new ExternalAuthenticationImpl(false)));
flowExecution.getConversationScope().put("opensamlProfileRequestContext",prc);
updateFlowExecution(flowExecution);
@@ -370,11 +361,12 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
assertFlowExecutionEnded();
assertNotNull(prc.getSubcontext(AuthenticationContext.class));
assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class));
- assertEquals(prc.getSubcontext(SubjectCanonicalizationContext.class).getPrincipalName(),"jdoe");
+ assertEquals(prc.ensureSubcontext(SubjectCanonicalizationContext.class).getPrincipalName(),"jdoe");
//now test the ACR was added
- final Set<AuthnContextClassRefPrincipal> principals = prc.getSubcontext(SubjectCanonicalizationContext.class)
- .getSubject().getPrincipals(AuthnContextClassRefPrincipal.class);
+ final Subject subject = prc.ensureSubcontext(SubjectCanonicalizationContext.class).getSubject();
+ assert subject != null;
+ final Set<AuthnContextClassRefPrincipal> principals = subject.getPrincipals(AuthnContextClassRefPrincipal.class);
assertEquals(1,principals.size());
assertEquals("http://example.org/ac/classes/mfa/strong",principals.iterator().next().getName());
}
@@ -434,10 +426,10 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
//add the mock client as was not added by the populate stage
- duoContext.setClient(new MockDuoOIDCClient_OK(duoContext.getIntegration()));
+ duoContext.setClient(new MockDuoOIDCClient_OK(integ));
- prc.getSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
- prc.getSubcontext(AuthenticationContext.class)
+ prc.ensureSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
+ prc.ensureSubcontext(AuthenticationContext.class)
.addSubcontext(new ExternalAuthenticationContext(new ExternalAuthenticationImpl(false)));
flowExecution.getConversationScope().put("opensamlProfileRequestContext",prc);
updateFlowExecution(flowExecution);
@@ -450,13 +442,13 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
//assert success conditions
assertFlowExecutionEnded();
assertNotNull(prc.getSubcontext(AuthenticationContext.class));
- assertNotNull(prc.getSubcontext(AuthenticationContext.class).
+ assertNotNull(prc.ensureSubcontext(AuthenticationContext.class).
getSubcontext(DuoOIDCAuthenticationContext.class));
- final DuoOIDCAuthenticationContext contextFromPrc = prc.getSubcontext(AuthenticationContext.class).
- getSubcontext(DuoOIDCAuthenticationContext.class);
+ final DuoOIDCAuthenticationContext contextFromPrc = prc.ensureSubcontext(AuthenticationContext.class).
+ ensureSubcontext(DuoOIDCAuthenticationContext.class);
assertNotNull(contextFromPrc.getAuthToken());
- assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class));
- assertEquals(prc.getSubcontext(SubjectCanonicalizationContext.class).getPrincipalName(),"jdoe");
+ assertNotNull(prc.ensureSubcontext(SubjectCanonicalizationContext.class));
+ assertEquals(prc.ensureSubcontext(SubjectCanonicalizationContext.class).getPrincipalName(),"jdoe");
}
@@ -513,10 +505,10 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
duoContext.setIntegration(integ);
//add the mock client as was not added by the populate stage
- duoContext.setClient(new MockDuoOIDCClient_OK(duoContext.getIntegration()));
+ duoContext.setClient(new MockDuoOIDCClient_OK(integ));
- prc.getSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
- prc.getSubcontext(AuthenticationContext.class)
+ prc.ensureSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
+ prc.ensureSubcontext(AuthenticationContext.class)
.addSubcontext(new ExternalAuthenticationContext(new ExternalAuthenticationImpl(false)));
//add a requested principal context.
@@ -526,13 +518,13 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
List.of(new AuthnContextClassRefPrincipal("http://example.org/ac/classes/mfa"));
rpc.setRequestedPrincipals(requestedPrincipals);
rpc.setOperator("exact");
- prc.getSubcontext(AuthenticationContext.class).addSubcontext(rpc);
+ prc.ensureSubcontext(AuthenticationContext.class).addSubcontext(rpc);
//override the authflowdescriptor
final AuthenticationFlowDescriptor afd = new AuthenticationFlowDescriptor();
afd.setId("authn/DuoOIDC");
afd.setSupportedPrincipals(List.of(new AuthnContextClassRefPrincipal("http://example.org/ac/classes/mfa")));
- prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(afd);
+ prc.ensureSubcontext(AuthenticationContext.class).setAttemptedFlow(afd);
flowExecution.getConversationScope().put("opensamlProfileRequestContext",prc);
updateFlowExecution(flowExecution);
@@ -545,13 +537,13 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
//assert success conditions
assertFlowExecutionEnded();
assertNotNull(prc.getSubcontext(AuthenticationContext.class));
- assertNotNull(prc.getSubcontext(AuthenticationContext.class).
+ assertNotNull(prc.ensureSubcontext(AuthenticationContext.class).
getSubcontext(DuoOIDCAuthenticationContext.class));
- final DuoOIDCAuthenticationContext contextFromPrc = prc.getSubcontext(AuthenticationContext.class).
- getSubcontext(DuoOIDCAuthenticationContext.class);
+ final DuoOIDCAuthenticationContext contextFromPrc = prc.ensureSubcontext(AuthenticationContext.class).
+ ensureSubcontext(DuoOIDCAuthenticationContext.class);
assertNotNull(contextFromPrc.getAuthToken());
assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class));
- assertEquals(prc.getSubcontext(SubjectCanonicalizationContext.class).getPrincipalName(),"jdoe");
+ assertEquals(prc.ensureSubcontext(SubjectCanonicalizationContext.class).getPrincipalName(),"jdoe");
}
@@ -607,10 +599,10 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
duoContext.setIntegration(integ);
//add the mock client as was not added by the populate stage
- duoContext.setClient(new MockDuoOIDCClient_OK_OLD_AUTH_TIME(duoContext.getIntegration()));
+ duoContext.setClient(new MockDuoOIDCClient_OK_OLD_AUTH_TIME(integ));
- prc.getSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
- prc.getSubcontext(AuthenticationContext.class)
+ prc.ensureSubcontext(AuthenticationContext.class).addSubcontext(duoContext);
+ prc.ensureSubcontext(AuthenticationContext.class)
.addSubcontext(new ExternalAuthenticationContext(new ExternalAuthenticationImpl(false)));
flowExecution.getConversationScope().put("opensamlProfileRequestContext",prc);
updateFlowExecution(flowExecution);
@@ -623,14 +615,10 @@ public class DuoAuthnFlowTest extends AbstractAuthnXmlFlowExecutionTests {
//assert success conditions
assertFlowExecutionEnded();
assertNotNull(prc.getSubcontext(EventContext.class));
- assertNotNull(prc.getSubcontext(EventContext.class).getEvent());
- assertTrue(prc.getSubcontext(EventContext.class).getEvent() instanceof String);
- assertEquals(AuthnEventIds.NO_CREDENTIALS, prc.getSubcontext(EventContext.class).getEvent());
+ assertNotNull(prc.ensureSubcontext(EventContext.class).getEvent());
+ assertTrue(prc.ensureSubcontext(EventContext.class).getEvent() instanceof String);
+ assertEquals(AuthnEventIds.NO_CREDENTIALS, prc.ensureSubcontext(EventContext.class).getEvent());
}
-}
-
-
-
-
+}
\ No newline at end of file
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoOIDCAuthnControllerTest.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoOIDCAuthnControllerTest.java
index 1069bdfc..c0fed87f 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoOIDCAuthnControllerTest.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/DuoOIDCAuthnControllerTest.java
@@ -126,16 +126,17 @@ public class DuoOIDCAuthnControllerTest extends AbstractTestNGSpringContextTests
* @throws Exception on exception.
*/
@Test
- @SuppressWarnings("null")
public void testSuccessfulAuthorizeRequest() throws Exception {
final MvcResult result = mockMvc.perform(get("/Authn/Duo/2FA/authorize")
.param("conversation", "e1s1"))
.andDo(print())
.andExpect(status().is3xxRedirection()).andReturn();
- assertNotNull(result.getResponse().getHeader("Location"));
+ final String location = result.getResponse().getHeader("Location");
+ assert location != null;
//basic check of the URL - contains the API host
- assertTrue(result.getResponse().getHeader("Location").contains(API_HOST));
+
+ assertTrue(location.contains(API_HOST));
}
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/InMemoryCredentialValidator.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/InMemoryCredentialValidator.java
index c322a4e5..94f5d11d 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/InMemoryCredentialValidator.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/duo/impl/InMemoryCredentialValidator.java
@@ -15,6 +15,7 @@
package net.shibboleth.idp.plugin.authn.duo.impl;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginException;
@@ -47,6 +48,12 @@ public class InMemoryCredentialValidator extends AbstractUsernamePasswordCredent
/** The configured password.*/
@Nonnull private final String password;
+ /**
+ * Constructor.
+ *
+ * @param uname username
+ * @param pssword password
+ */
public InMemoryCredentialValidator(@Nonnull @NotEmpty final String uname,
@Nonnull @NotEmpty final String pssword) {
username = Constraint.isNotEmpty(uname, "Username can not be null or empty");
@@ -59,10 +66,12 @@ public class InMemoryCredentialValidator extends AbstractUsernamePasswordCredent
super.doInitialize();
}
+ /** {@inheritDoc} */
@Override
- protected Subject doValidate(final ProfileRequestContext profileRequestContext,
- final AuthenticationContext authenticationContext, final UsernamePasswordContext usernamePasswordContext,
- final WarningHandler warningHandler, final ErrorHandler errorHandler) throws Exception {
+ protected Subject doValidate(@Nonnull final ProfileRequestContext profileRequestContext,
+ @Nonnull final AuthenticationContext authenticationContext,
+ @Nonnull final UsernamePasswordContext usernamePasswordContext,
+ @Nullable final WarningHandler warningHandler, @Nullable final ErrorHandler errorHandler) throws Exception {
final String requestUsername = usernamePasswordContext.getTransformedUsername();
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_FAIL_Client.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_FAIL_Client.java
index 4bd05338..e34cf524 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_FAIL_Client.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_FAIL_Client.java
@@ -14,6 +14,8 @@
package net.shibboleth.idp.plugin.authn.mock;
+import javax.annotation.Nonnull;
+
import net.shibboleth.idp.plugin.authn.duo.DuoClientException;
import net.shibboleth.idp.plugin.authn.duo.DuoOIDCClient;
import net.shibboleth.idp.plugin.authn.duo.DuoOIDCClientFactory;
@@ -25,7 +27,7 @@ import net.shibboleth.idp.plugin.authn.duo.DuoOIDCIntegration;
public class MockDuoOIDCClientFactory_FAIL_Client implements DuoOIDCClientFactory {
@Override
- public DuoOIDCClient createInstance(final DuoOIDCIntegration integration) throws DuoClientException {
+ @Nonnull public DuoOIDCClient createInstance(@Nonnull final DuoOIDCIntegration integration) throws DuoClientException {
return new MockDuoOIDCClient_FAIL(integration);
}
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_OK_Client.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_OK_Client.java
index dea86890..49705287 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_OK_Client.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClientFactory_OK_Client.java
@@ -14,6 +14,8 @@
package net.shibboleth.idp.plugin.authn.mock;
+import javax.annotation.Nonnull;
+
import net.shibboleth.idp.plugin.authn.duo.DuoClientException;
import net.shibboleth.idp.plugin.authn.duo.DuoOIDCClient;
import net.shibboleth.idp.plugin.authn.duo.DuoOIDCClientFactory;
@@ -25,7 +27,7 @@ import net.shibboleth.idp.plugin.authn.duo.DuoOIDCIntegration;
public class MockDuoOIDCClientFactory_OK_Client implements DuoOIDCClientFactory {
@Override
- public DuoOIDCClient createInstance(final DuoOIDCIntegration integration) throws DuoClientException {
+ @Nonnull public DuoOIDCClient createInstance(@Nonnull final DuoOIDCIntegration integration) throws DuoClientException {
return new MockDuoOIDCClient_OK(integration);
}
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_FAIL.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_FAIL.java
index 3b55cc2f..8c3fb268 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_FAIL.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_FAIL.java
@@ -21,6 +21,7 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSAlgorithm;
@@ -56,22 +57,22 @@ public class MockDuoOIDCClient_FAIL implements DuoOIDCClient{
}
@Override
- public DuoHealthCheck healthCheck() throws DuoClientException {
+ @Nonnull public DuoHealthCheck healthCheck() throws DuoClientException {
return DuoHealthCheck.builder().withStatus(STATUS).
withTimestamp(Long.toString(System.currentTimeMillis())).build();
}
@Override
- public String createAuthUrl(final String username, final String state,
- final String nonce, final String redirect) throws DuoClientException {
+ @Nonnull public String createAuthUrl(@Nonnull final String username, @Nonnull final String state,
+ @Nullable final String nonce, @Nullable final String redirect) throws DuoClientException {
return format("https://%s%s?scope=openid&response_type=code&redirect_uri=%s&client_id=%s&request=%s",
integration.getAPIHost(),"/oauth/v1/authorize", integration.getRedirectURI(),
integration.getClientId(), "JWT");
}
@Override
- public JWT exchangeAuthorizationCodeFor2FAResult(final String code,
- final String username, final String redirect) throws DuoClientException {
+ @Nonnull public JWT exchangeAuthorizationCodeFor2FAResult(@Nonnull final String code,
+ @Nonnull final String username, @Nullable final String redirect) throws DuoClientException {
final String jwtJson = "{\n" +
" \"iss\": \"https://"+integration.getAPIHost()+"oauth/v1/token\",\n" +
@@ -135,7 +136,7 @@ public class MockDuoOIDCClient_FAIL implements DuoOIDCClient{
}
@Override
- public String getClientId() {
+ @Nonnull public String getClientId() {
return "MockDuoClient_FAIL";
}
@@ -146,7 +147,7 @@ public class MockDuoOIDCClient_FAIL implements DuoOIDCClient{
@Override
- public DuoOIDCClientCapabilities getCapabilities() {
+ @Nonnull public DuoOIDCClientCapabilities getCapabilities() {
return new DuoOIDCClientCapabilities() {
@Override
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK.java
index b1ccd11b..08b0cfb0 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK.java
@@ -21,6 +21,7 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSAlgorithm;
@@ -53,22 +54,22 @@ public class MockDuoOIDCClient_OK implements DuoOIDCClient{
}
@Override
- public DuoHealthCheck healthCheck() throws DuoClientException {
+ @Nonnull public DuoHealthCheck healthCheck() throws DuoClientException {
return DuoHealthCheck.builder().withStatus(STATUS).
withTimestamp(Long.toString(System.currentTimeMillis())).build();
}
@Override
- public String createAuthUrl(final String username, final String state,
- final String nonce, final String redirect) throws DuoClientException {
+ @Nonnull public String createAuthUrl(@Nonnull final String username, @Nonnull final String state,
+ @Nullable final String nonce, @Nullable final String redirect) throws DuoClientException {
return format("https://%s%s?scope=openid&response_type=code&redirect_uri=%s&client_id=%s&request=%s",
integration.getAPIHost(),"/oauth/v1/authorize", integration.getRedirectURI(),
integration.getClientId(), "JWT");
}
@Override
- public JWT exchangeAuthorizationCodeFor2FAResult(final String code,
- final String username, final String redirect) throws DuoClientException {
+ @Nonnull public JWT exchangeAuthorizationCodeFor2FAResult(@Nonnull final String code,
+ @Nonnull final String username, @Nullable final String redirect) throws DuoClientException {
final String jwtJson = "{\n" +
" \"iss\": \"https://"+integration.getAPIHost()+"/oauth/v1/token\",\n" +
@@ -132,7 +133,7 @@ public class MockDuoOIDCClient_OK implements DuoOIDCClient{
}
@Override
- public String getClientId() {
+ @Nonnull public String getClientId() {
return "MockDuoClient_OK";
}
@@ -143,7 +144,7 @@ public class MockDuoOIDCClient_OK implements DuoOIDCClient{
@Override
- public DuoOIDCClientCapabilities getCapabilities() {
+ @Nonnull public DuoOIDCClientCapabilities getCapabilities() {
return new DuoOIDCClientCapabilities() {
@Override
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK_OLD_AUTH_TIME.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK_OLD_AUTH_TIME.java
index 3cca1f99..e20c2c9e 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK_OLD_AUTH_TIME.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_OK_OLD_AUTH_TIME.java
@@ -21,6 +21,7 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSAlgorithm;
@@ -55,22 +56,22 @@ public class MockDuoOIDCClient_OK_OLD_AUTH_TIME implements DuoOIDCClient{
}
@Override
- public DuoHealthCheck healthCheck() throws DuoClientException {
+ @Nonnull public DuoHealthCheck healthCheck() throws DuoClientException {
return DuoHealthCheck.builder().withStatus(STATUS).
withTimestamp(Long.toString(System.currentTimeMillis())).build();
}
@Override
- public String createAuthUrl(final String username, final String state,
- final String nonce, final String redirect) throws DuoClientException {
+ @Nonnull public String createAuthUrl(@Nonnull final String username, @Nonnull final String state,
+ @Nullable final String nonce, @Nullable final String redirect) throws DuoClientException {
return format("https://%s%s?scope=openid&response_type=code&redirect_uri=%s&client_id=%s&request=%s",
integration.getAPIHost(),"/oauth/v1/authorize", integration.getRedirectURI(),
integration.getClientId(), "JWT");
}
@Override
- public JWT exchangeAuthorizationCodeFor2FAResult(final String code,
- final String username, final String redirect) throws DuoClientException {
+ @Nonnull public JWT exchangeAuthorizationCodeFor2FAResult(@Nonnull final String code,
+ @Nonnull final String username, @Nullable final String redirect) throws DuoClientException {
final String jwtJson = "{\n" +
" \"iss\": \"https://"+integration.getAPIHost()+"/oauth/v1/token\",\n" +
@@ -134,7 +135,7 @@ public class MockDuoOIDCClient_OK_OLD_AUTH_TIME implements DuoOIDCClient{
}
@Override
- public String getClientId() {
+ @Nonnull public String getClientId() {
return "MockDuoClient_OLD_AUTH_TIME";
}
@@ -145,7 +146,7 @@ public class MockDuoOIDCClient_OK_OLD_AUTH_TIME implements DuoOIDCClient{
@Override
- public DuoOIDCClientCapabilities getCapabilities() {
+ @Nonnull public DuoOIDCClientCapabilities getCapabilities() {
return new DuoOIDCClientCapabilities() {
@Override
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_UNKNOWN.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_UNKNOWN.java
index 1e6ea4b2..e8353c7a 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_UNKNOWN.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/mock/MockDuoOIDCClient_UNKNOWN.java
@@ -21,6 +21,7 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSAlgorithm;
@@ -53,22 +54,22 @@ public class MockDuoOIDCClient_UNKNOWN implements DuoOIDCClient{
}
@Override
- public DuoHealthCheck healthCheck() throws DuoClientException {
+ @Nonnull public DuoHealthCheck healthCheck() throws DuoClientException {
return DuoHealthCheck.builder().withStatus(STATUS).
withTimestamp(Long.toString(System.currentTimeMillis())).build();
}
@Override
- public String createAuthUrl(final String username, final String state,
- final String nonce, final String redirect) throws DuoClientException {
+ @Nonnull public String createAuthUrl(@Nonnull final String username, @Nonnull final String state,
+ @Nullable final String nonce, @Nullable final String redirect) throws DuoClientException {
return format("https://%s%s?scope=openid&response_type=code&redirect_uri=%s&client_id=%s&request=%s",
integration.getAPIHost(),"/oauth/v1/authorize", integration.getRedirectURI(),
integration.getClientId(), "JWT");
}
@Override
- public JWT exchangeAuthorizationCodeFor2FAResult(final String code,
- final String username, final String redirect) throws DuoClientException {
+ @Nonnull public JWT exchangeAuthorizationCodeFor2FAResult(@Nonnull final String code,
+ @Nonnull final String username, @Nullable final String redirect) throws DuoClientException {
final String jwtJson = "{\n" +
" \"iss\": \"https://"+integration.getAPIHost()+"oauth/v1/token\",\n" +
" \"sub\": \""+SUB+"\",\n" +
@@ -130,7 +131,7 @@ public class MockDuoOIDCClient_UNKNOWN implements DuoOIDCClient{
}
@Override
- public String getClientId() {
+ @Nonnull public String getClientId() {
return "MockDuoClient_UNKNOWN";
}
@@ -141,7 +142,7 @@ public class MockDuoOIDCClient_UNKNOWN implements DuoOIDCClient{
@Override
- public DuoOIDCClientCapabilities getCapabilities() {
+ @Nonnull public DuoOIDCClientCapabilities getCapabilities() {
return new DuoOIDCClientCapabilities() {
@Override
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java
index 2bcf4721..22f6839b 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java
@@ -17,6 +17,8 @@ import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.ProtocolResolver;
import org.springframework.core.io.Resource;
@@ -33,12 +35,12 @@ public class CustomFlowRelativeResourceLoader implements ResourceLoader {
private final Resource flowResource;
- public void addProtocolResolver(final ProtocolResolver resolver) {
+ public void addProtocolResolver(@Nonnull final ProtocolResolver resolver) {
Assert.notNull(resolver, "ProtocolResolver must not be null");
this.protocolResolvers.add(resolver);
}
- public CustomFlowRelativeResourceLoader(final Resource resource) {
+ public CustomFlowRelativeResourceLoader(@Nonnull final Resource resource) {
this.flowResource = resource;
}
@@ -48,7 +50,7 @@ public class CustomFlowRelativeResourceLoader implements ResourceLoader {
}
@Override
- public Resource getResource(final String location) {
+ @Nonnull public Resource getResource(@Nonnull final String location) {
Assert.notNull(location, "Location must not be null");
for (final ProtocolResolver protocolResolver : protocolResolvers) {
diff --git a/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClient.java b/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClient.java
index 8bd2e50e..02e058d4 100644
--- a/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClient.java
+++ b/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClient.java
@@ -162,7 +162,7 @@ public final class NimbusClient extends AbstractDuoOIDCClient{
}
@Override
- public JWT exchangeAuthorizationCodeFor2FAResult(@Nonnull final String code,
+ @Nonnull public JWT exchangeAuthorizationCodeFor2FAResult(@Nonnull final String code,
@Nonnull final String username, @Nullable final String redirectURIOverride) throws DuoClientException {
Constraint.isNotEmpty(code, "Auth_code can not be null");
diff --git a/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClientFactory.java b/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClientFactory.java
index 0a4e6fc6..d3ac404e 100644
--- a/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClientFactory.java
+++ b/idp-duo-nimbus-client-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/nimbus/impl/NimbusClientFactory.java
@@ -55,7 +55,7 @@ public final class NimbusClientFactory extends AbstractInitializableComponent im
@GuardedBy("this") @NonnullAfterInit private ObjectMapper objectMapper;
@Override
- public DuoOIDCClient createInstance(@Nonnull final DuoOIDCIntegration integration) throws DuoClientException {
+ @Nonnull public DuoOIDCClient createInstance(@Nonnull final DuoOIDCIntegration integration) throws DuoClientException {
return new NimbusClient(integration, getHttpClient(), getHttpClientSecurityParameters(), getObjectMapper());
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list