[java-opensaml] branch main updated: IDP-2069 - Null Handling Task
Scott Cantor
cantor.2 at osu.edu
Thu Apr 13 17:24:50 UTC 2023
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=360489cc070f5200e78ed5348d6be94c4d9f0ed9
The following commit(s) were added to refs/heads/main by this push:
new 360489cc0 IDP-2069 - Null Handling Task
360489cc0 is described below
commit 360489cc070f5200e78ed5348d6be94c4d9f0ed9
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Apr 13 13:24:47 2023 -0400
IDP-2069 - Null Handling Task
https://shibboleth.atlassian.net/browse/IDP-2069
SAML 2 profile action cleanup.
Added missing componentActive check to base class.
---
.../profile/action/AbstractProfileAction.java | 5 +-
.../profile/action/impl/SetProfileIdTest.java | 6 +-
.../saml2/profile/impl/AbstractDecryptAction.java | 25 ++--
.../saml2/profile/impl/AbstractEncryptAction.java | 12 +-
.../profile/impl/AbstractResponseShellAction.java | 7 +-
.../impl/AddChannelBindingsToAssertions.java | 12 +-
.../profile/impl/AddGeneratedKeyToAssertions.java | 17 ++-
.../saml2/profile/impl/AddNameIDToSubjects.java | 41 ++++---
.../impl/AddOneTimeUseConditionToAssertions.java | 14 ++-
.../impl/AddProxyRestrictionToAssertions.java | 21 ++--
.../saml2/profile/impl/AddStatusResponseShell.java | 7 +-
.../saml2/profile/impl/AddStatusToResponse.java | 37 +++---
.../impl/AddSubjectConfirmationToSubjects.java | 33 +++--
.../saml2/profile/impl/CopyNameIDFromRequest.java | 23 ++--
.../saml/saml2/profile/impl/DecryptAssertions.java | 13 +-
.../saml/saml2/profile/impl/DecryptAttributes.java | 18 +--
.../saml/saml2/profile/impl/DecryptNameIDs.java | 93 ++++++++------
.../DefaultAssertionValidationContextBuilder.java | 130 ++++++++++++--------
.../saml/saml2/profile/impl/EncryptAssertions.java | 14 ++-
.../saml/saml2/profile/impl/EncryptAttributes.java | 12 +-
.../saml/saml2/profile/impl/EncryptNameIDs.java | 136 ++++++++++++---------
.../saml2/profile/impl/PopulateECPContext.java | 14 ++-
.../saml/saml2/profile/impl/ResolveArtifact.java | 35 +++---
.../saml2/profile/impl/ValidateAssertions.java | 120 ++++++------------
...ultSAML20AssertionValidationContextBuilder.java | 44 ++++---
.../impl/SAML20AssertionTokenValidationInput.java | 8 +-
...ecuritySAML20AssertionTokenSecurityHandler.java | 91 +++++---------
.../impl/AbstractSAML2NameIDGeneratorTest.java | 10 +-
.../impl/AddChannelBindingsToAssertionsTest.java | 37 +++---
.../impl/AddGeneratedKeyToAssertionsTest.java | 53 +++++---
.../profile/impl/AddNameIDToSubjectsTest.java | 131 +++++++++++---------
.../AddOneTimeUseConditionToAssertionsTest.java | 20 ++-
.../impl/AddProxyRestrictionToAssertionsTest.java | 53 +++++---
.../profile/impl/AddStatusResponseShellTest.java | 46 ++++---
.../profile/impl/AddStatusToResponseTest.java | 44 ++++---
.../impl/AddSubjectConfirmationToSubjectsTest.java | 30 ++---
.../profile/impl/CopyNameIDFromRequestTest.java | 35 +++---
.../saml2/profile/impl/DecryptNameIDsTest.java | 78 ++++++++----
.../saml2/profile/impl/EncryptAssertionsTest.java | 31 +++--
.../saml2/profile/impl/EncryptAttributesTest.java | 30 +++--
.../saml2/profile/impl/EncryptNameIDsTest.java | 51 +++++---
.../saml2/profile/impl/PopulateECPContextTest.java | 15 +--
.../saml2/profile/impl/ResolveArtifactTest.java | 25 ++--
.../saml2/profile/impl/TestSelfEncryption.java | 53 ++++----
.../saml2/profile/impl/ValidateAssertionsTest.java | 25 +---
...AML20AssertionValidationContextBuilderTest.java | 55 +++++----
...itySAML20AssertionTokenSecurityHandlerTest.java | 108 +++++++++-------
47 files changed, 1060 insertions(+), 858 deletions(-)
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
index 51294095f..573749a5f 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
@@ -120,7 +120,8 @@ public abstract class AbstractProfileAction extends AbstractInitializableCompone
/** {@inheritDoc} */
@Override public void execute(@Nonnull final ProfileRequestContext profileRequestContext) {
-
+ checkComponentActive();
+
// Clear any existing EventContext that might be hanging around, and if it exists,
// copy the Event to a PreviousEventContext. Don't clear any existing PreviousEventContext
// because it may be from an earlier error of interest to other actions.
@@ -251,6 +252,8 @@ public abstract class AbstractProfileAction extends AbstractInitializableCompone
* returned it is correct, if false is returned is is not safe to make any assumptions (even if
* there was an call in flight.
*
+ * @return whether the preExecute hook was called
+ *
* @since 5.0.0
*/
protected boolean isPreExecuteCalled() {
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/SetProfileIdTest.java b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/SetProfileIdTest.java
index dce05fa0b..2ecbcd231 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/SetProfileIdTest.java
+++ b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/SetProfileIdTest.java
@@ -22,6 +22,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
import org.testng.Assert;
import org.testng.annotations.Test;
+import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.ConstraintViolationException;
@SuppressWarnings("javadoc")
@@ -34,16 +35,17 @@ public class SetProfileIdTest {
try {
new SetProfileId(" ");
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
}
@Test
- public void testExecute() throws Exception {
+ public void testExecute() throws ComponentInitializationException {
ProfileRequestContext context = new ProfileRequestContext();
SetProfileId action = new SetProfileId("foo");
+ action.initialize();
action.execute(context);
Assert.assertEquals(context.getProfileId(), "foo");
Assert.assertNull(context.getSubcontext(EventContext.class));
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
index 898bced8f..8bad22de7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
@@ -36,12 +36,12 @@ import org.opensaml.saml.saml2.encryption.Decrypter;
import org.opensaml.xmlsec.DecryptionParameters;
import org.opensaml.xmlsec.context.SecurityParametersContext;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.PredicateSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Abstract base class for actions that perform SAML decryption.
@@ -75,7 +75,7 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
@Nullable private Decrypter decrypter;
/** Message to operate on. */
- @Nullable private SAMLObject message;
+ @NonnullBeforeExec private SAMLObject message;
/** Constructor. */
public AbstractDecryptAction() {
@@ -83,8 +83,9 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
securityParamsLookupStrategy =
new ChildContextLookup<>(SecurityParametersContext.class).compose(
new InboundMessageContextLookup());
- messageLookupStrategy = new MessageLookup<>(Object.class).compose(new InboundMessageContextLookup());
- decryptionPredicate = Predicates.alwaysTrue();
+ messageLookupStrategy = new MessageLookup<>(Object.class).compose(
+ new InboundMessageContextLookup());
+ decryptionPredicate = PredicateSupport.alwaysTrue();
}
/**
@@ -168,13 +169,17 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
*
* @return the object to act on
*/
- @Nullable public SAMLObject getSAMLObject() {
+ @NonnullBeforeExec public SAMLObject getSAMLObject() {
return message;
}
/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
final Object theMessage = messageLookupStrategy.apply(profileRequestContext);
if (theMessage == null) {
log.debug("{} No message was returned by lookup strategy", getLogPrefix());
@@ -188,15 +193,15 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
message = (SAMLObject) theMessage;
final SecurityParametersContext paramsCtx = securityParamsLookupStrategy.apply(profileRequestContext);
- if (paramsCtx == null || paramsCtx.getDecryptionParameters() == null) {
+ final DecryptionParameters params = paramsCtx != null ? paramsCtx.getDecryptionParameters() : null;
+ if (params == null) {
log.debug("{} No security parameter context or decryption parameters", getLogPrefix());
} else {
- final DecryptionParameters params = paramsCtx.getDecryptionParameters();
decrypter = new Decrypter(params.getDataKeyInfoCredentialResolver(),
params.getKEKKeyInfoCredentialResolver(), params.getEncryptedKeyResolver());
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
index c552f1f7b..10a6e06b3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
@@ -38,13 +38,13 @@ import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.encryption.support.DataEncryptionParameters;
import org.opensaml.xmlsec.encryption.support.KeyEncryptionParameters;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.logic.PredicateSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Abstract base class for actions that perform simple unicast SAML encryption to a single
@@ -80,7 +80,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
@Nullable private Function<ProfileRequestContext, String> selfRecipientLookupStrategy;
/** The encryption object. */
- @Nullable private Encrypter encrypter;
+ @NonnullBeforeExec private Encrypter encrypter;
/** Constructor. */
public AbstractEncryptAction() {
@@ -88,7 +88,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
new ChildContextLookup<>(EncryptionContext.class).compose(
new OutboundMessageContextLookup());
keyPlacementLookupStrategy = FunctionSupport.constant(KeyPlacement.INLINE);
- encryptToSelf = Predicates.alwaysFalse();
+ encryptToSelf = PredicateSupport.alwaysFalse();
}
/**
@@ -167,7 +167,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
*
* @return the encrypter
*/
- @Nullable public Encrypter getEncrypter() {
+ @NonnullBeforeExec public Encrypter getEncrypter() {
return encrypter;
}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
index 297000fba..5c855fffd 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
@@ -38,9 +38,10 @@ import org.opensaml.saml.saml2.core.Status;
import org.opensaml.saml.saml2.core.StatusCode;
import org.opensaml.saml.saml2.core.StatusResponseType;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.security.IdentifierGenerationStrategy;
import net.shibboleth.shared.security.IdentifierGenerationStrategy.ProviderType;
@@ -76,7 +77,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
@Nullable private Function<ProfileRequestContext,String> issuerLookupStrategy;
/** The generator to use. */
- @Nullable private IdentifierGenerationStrategy idGenerator;
+ @NonnullBeforeExec private IdentifierGenerationStrategy idGenerator;
/** EntityID to populate into Issuer element. */
@Nullable private String issuerId;
@@ -193,7 +194,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
log.debug("{} No issuer value available, leaving Issuer unset", getLogPrefix());
}
- profileRequestContext.getOutboundMessageContext().setMessage(response);
+ profileRequestContext.ensureOutboundMessageContext().setMessage(response);
}
/**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
index 8d84ef25a..51cee4aeb 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.profile.impl;
import java.util.function.Function;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -38,9 +37,10 @@ import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to add {@link ChannelBindings} extension(s) to every {@link Assertion} in a {@link Response} message.
@@ -65,17 +65,18 @@ public class AddChannelBindingsToAssertions extends AbstractConditionalProfileAc
@Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
/** ChannelBindingsContext to read from. */
- @Nullable private ChannelBindingsContext channelBindingsContext;
+ @NonnullBeforeExec private ChannelBindingsContext channelBindingsContext;
/** Response to modify. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
public AddChannelBindingsToAssertions() {
channelBindingsContextLookupStrategy =
new ChildContextLookup<>(ChannelBindingsContext.class).compose(
new OutboundMessageContextLookup());
- responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
+ responseLookupStrategy = new MessageLookup<>(Response.class).compose(
+ new OutboundMessageContextLookup());
}
/**
@@ -140,6 +141,7 @@ public class AddChannelBindingsToAssertions extends AbstractConditionalProfileAc
ChannelBindings.DEFAULT_ELEMENT_NAME);
for (final Assertion assertion : response.getAssertions()) {
+ assert assertion != null;
final Advice advice = SAML2ActionSupport.addAdviceToAssertion(this, assertion);
for (final ChannelBindings cb : channelBindingsContext.getChannelBindings()) {
final ChannelBindings newCB = cbBuilder.buildObject();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
index 260f3664e..b548fc374 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.profile.impl;
import java.util.function.Function;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -38,11 +37,12 @@ import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.EncodingException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to add a {@link GeneratedKey} extension to every {@link Assertion} in a {@link Response} message.
@@ -68,17 +68,18 @@ public class AddGeneratedKeyToAssertions extends AbstractConditionalProfileActio
@Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
/** ECPContext to read from. */
- @Nullable private ECPContext ecpContext;
+ @NonnullBeforeExec private ECPContext ecpContext;
/** Response to modify. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
public AddGeneratedKeyToAssertions() {
ecpContextLookupStrategy =
new ChildContextLookup<>(ECPContext.class).compose(
new OutboundMessageContextLookup());
- responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
+ responseLookupStrategy = new MessageLookup<>(Response.class).compose(
+ new OutboundMessageContextLookup());
}
/**
@@ -142,9 +143,13 @@ public class AddGeneratedKeyToAssertions extends AbstractConditionalProfileActio
GeneratedKey.DEFAULT_ELEMENT_NAME);
try {
- final String key = Base64Support.encode(ecpContext.getSessionKey(), false);
+ final byte[] keyBytes = ecpContext.getSessionKey();
+ // Checked above.
+ assert keyBytes != null;
+ final String key = Base64Support.encode(keyBytes, false);
for (final Assertion assertion : response.getAssertions()) {
+ assert assertion != null;
final Advice advice = SAML2ActionSupport.addAdviceToAssertion(this, assertion);
final GeneratedKey gk = keyBuilder.buildObject();
gk.setValue(key);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
index c28e7b3bb..cba0e3d3c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
@@ -17,7 +17,6 @@
package org.opensaml.saml.saml2.profile.impl;
-import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -26,6 +25,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.context.navigate.MessageLookup;
import org.opensaml.profile.action.AbstractProfileAction;
import org.opensaml.profile.action.ActionSupport;
@@ -49,14 +49,15 @@ import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
import org.opensaml.saml.saml2.profile.SAML2NameIDGenerator;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.Strings;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.security.IdentifierGenerationStrategy;
import net.shibboleth.shared.security.IdentifierGenerationStrategy.ProviderType;
@@ -117,7 +118,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
@NonnullAfterInit private SAML2NameIDGenerator generator;
/** Formats to try. */
- @Nonnull @NonnullElements private List<String> formats;
+ @NonnullBeforeExec private List<String> formats;
/** Format required by requested {@link NameIDPolicy}. */
@Nullable private String requiredFormat;
@@ -126,10 +127,10 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
@Nullable private AuthnRequest request;
/** Response to modify. */
- @Nullable private List<Assertion> assertions;
+ @NonnullBeforeExec private List<Assertion> assertions;
/** The generator to use. */
- @Nullable private IdentifierGenerationStrategy idGenerator;
+ @NonnullBeforeExec private IdentifierGenerationStrategy idGenerator;
/** EntityID to populate into Issuer element. */
@Nullable private String issuerId;
@@ -164,7 +165,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
((DefaultNameIDPolicyPredicate) nameIDPolicyPredicate).initialize();
formatLookupStrategy = new MetadataNameIdentifierFormatStrategy();
- formats = Collections.emptyList();
+ formats = CollectionSupport.emptyList();
}
/**
@@ -304,7 +305,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
requiredFormat = getRequiredFormat(profileRequestContext);
if (requiredFormat != null) {
- formats = Collections.singletonList(requiredFormat);
+ formats = CollectionSupport.singletonList(requiredFormat);
log.debug("{} Request specified NameID format: {}", getLogPrefix(), requiredFormat);
} else {
formats = formatLookupStrategy.apply(profileRequestContext);
@@ -337,6 +338,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
int count = 0;
for (final Assertion assertion : assertions) {
+ assert assertion != null;
final Subject subject = getAssertionSubject(assertion);
final NameID existing = subject.getNameID();
if (existing == null || overwriteExisting) {
@@ -384,6 +386,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
// See if we can generate one.
for (final String format : formats) {
+ assert format != null;
log.debug("{} Trying to generate NameID with Format {}", getLogPrefix(), format);
try {
final NameID nameId = generator.generate(profileRequestContext, format);
@@ -407,11 +410,12 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
* @return the assertion to which the name identifier will be added
*/
@Nonnull private Subject getAssertionSubject(@Nonnull final Assertion assertion) {
- if (assertion.getSubject() != null) {
- return assertion.getSubject();
+ Subject subject = assertion.getSubject();
+ if (subject != null) {
+ return subject;
}
- final Subject subject = subjectBuilder.buildObject();
+ subject = subjectBuilder.buildObject();
assertion.setSubject(subject);
return subject;
}
@@ -447,15 +451,16 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
/** {@inheritDoc} */
@Override
@Nullable public List<Assertion> apply(@Nullable final ProfileRequestContext input) {
- if (input != null && input.getOutboundMessageContext() != null) {
- final Object outboundMessage = input.getOutboundMessageContext().getMessage();
+ final MessageContext outboundContext = input != null ? input.getOutboundMessageContext() : null;
+ if (outboundContext != null) {
+ final Object outboundMessage = outboundContext.getMessage();
if (outboundMessage == null) {
final Assertion ret = SAML2ActionSupport.buildAssertion(AddNameIDToSubjects.this,
idGenerator, issuerId);
- input.getOutboundMessageContext().setMessage(ret);
- return Collections.singletonList(ret);
+ outboundContext.setMessage(ret);
+ return CollectionSupport.singletonList(ret);
} else if (outboundMessage instanceof Assertion) {
- return Collections.singletonList((Assertion) outboundMessage);
+ return CollectionSupport.singletonList((Assertion) outboundMessage);
} else if (outboundMessage instanceof Response) {
return ((Response) outboundMessage).getAssertions();
}
@@ -532,9 +537,9 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
@Nullable public String apply(@Nullable final ProfileRequestContext profileRequestContext) {
final RequestAbstractType request = requestLookupStrategy.apply(profileRequestContext);
- if (request != null && request.getIssuer() != null) {
+ if (request != null) {
final Issuer issuer = request.getIssuer();
- if (issuer.getFormat() == null || NameID.ENTITY.equals(issuer.getFormat())) {
+ if (issuer != null && (issuer.getFormat() == null || NameID.ENTITY.equals(issuer.getFormat()))) {
return issuer.getValue();
}
}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
index 3b8a8a215..d88843bb3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.profile.impl;
import java.util.function.Function;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.opensaml.messaging.context.navigate.MessageLookup;
@@ -36,9 +35,10 @@ import org.opensaml.saml.saml2.core.OneTimeUse;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to add a {@link OneTimeUse} condition to every {@link Assertion} in a {@link Response} message.
@@ -56,7 +56,7 @@ public class AddOneTimeUseConditionToAssertions extends AbstractConditionalProfi
@Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
/** Response to modify. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
public AddOneTimeUseConditionToAssertions() {
@@ -77,6 +77,11 @@ public class AddOneTimeUseConditionToAssertions extends AbstractConditionalProfi
/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
log.debug("{} Attempting to add OneTimeUse condition to every Assertion in Response", getLogPrefix());
response = responseLookupStrategy.apply(profileRequestContext);
@@ -89,7 +94,7 @@ public class AddOneTimeUseConditionToAssertions extends AbstractConditionalProfi
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
/** {@inheritDoc} */
@@ -101,6 +106,7 @@ public class AddOneTimeUseConditionToAssertions extends AbstractConditionalProfi
OneTimeUse.DEFAULT_ELEMENT_NAME);
for (final Assertion assertion : response.getAssertions()) {
+ assert assertion != null;
final Conditions conditions = SAML2ActionSupport.addConditionsToAssertion(this, assertion);
if (conditions.getOneTimeUse() == null) {
conditions.getConditions().add(conditionBuilder.buildObject());
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
index 45377b56f..5b1350240 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
@@ -38,11 +38,13 @@ import org.opensaml.saml.saml2.core.ProxyRestriction;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action adds an {@link ProxyRestriction} to every {@link Assertion} contained in a SAML 2
@@ -61,10 +63,10 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
@Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
/** Strategy used to obtain the material to add. */
- @Nullable private Function<ProfileRequestContext,Pair<Integer,Set<String>>> proxyRestrictionLookupStrategy;
+ @NonnullAfterInit private Function<ProfileRequestContext,Pair<Integer,Set<String>>> proxyRestrictionLookupStrategy;
/** Response to modify. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** ProxyCount to add. */
@Nullable private Integer proxyCount;
@@ -123,9 +125,12 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
if (result != null) {
proxyCount = result.getFirst();
audiences = result.getSecond();
+ if (audiences != null && audiences.isEmpty()) {
+ audiences = null;
+ }
}
- if (proxyCount == null && (audiences == null || audiences.isEmpty())) {
+ if (proxyCount == null && audiences == null) {
log.debug("{} No restrictions to add, nothing to do", getLogPrefix());
return false;
}
@@ -150,6 +155,7 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
for (final Assertion assertion : response.getAssertions()) {
+ assert assertion != null;
addProxyRestriction(profileRequestContext, SAML2ActionSupport.addConditionsToAssertion(this, assertion));
log.debug("{} Added ProxyRestriction to Assertion {}", getLogPrefix(), assertion.getID());
}
@@ -176,6 +182,7 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
final SAMLObjectBuilder<Audience> audienceBuilder = (SAMLObjectBuilder<Audience>)
XMLObjectProviderRegistrySupport.getBuilderFactory().<Audience>ensureBuilder(
Audience.DEFAULT_ELEMENT_NAME);
+ assert audiences != null;
for (final String audienceId : audiences) {
log.debug("{} Adding {} as an Audience of the ProxyRestriction", getLogPrefix(), audienceId);
final Audience audience = audienceBuilder.buildObject();
@@ -194,9 +201,8 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
*/
@Nonnull private ProxyRestriction getProxyRestriction(@Nonnull final Conditions conditions) {
- final ProxyRestriction condition;
-
- if (conditions.getProxyRestriction() == null) {
+ ProxyRestriction condition = conditions.getProxyRestriction();
+ if (condition == null) {
final SAMLObjectBuilder<ProxyRestriction> conditionBuilder = (SAMLObjectBuilder<ProxyRestriction>)
XMLObjectProviderRegistrySupport.getBuilderFactory().<ProxyRestriction>ensureBuilder(
ProxyRestriction.DEFAULT_ELEMENT_NAME);
@@ -205,7 +211,6 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
conditions.getConditions().add(condition);
} else {
log.debug("{} Conditions already contained an ProxyRestriction, using it", getLogPrefix());
- condition = conditions.getProxyRestriction();
}
return condition;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
index 183264a03..12d9fdacf 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
@@ -39,11 +39,12 @@ import org.opensaml.saml.saml2.core.Status;
import org.opensaml.saml.saml2.core.StatusCode;
import org.opensaml.saml.saml2.core.StatusResponseType;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.security.IdentifierGenerationStrategy;
import net.shibboleth.shared.security.IdentifierGenerationStrategy.ProviderType;
@@ -79,7 +80,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
@Nullable private Function<ProfileRequestContext,String> issuerLookupStrategy;
/** The generator to use. */
- @Nullable private IdentifierGenerationStrategy idGenerator;
+ @NonnullBeforeExec private IdentifierGenerationStrategy idGenerator;
/** EntityID to populate into Issuer element. */
@Nullable private String issuerId;
@@ -222,7 +223,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
log.debug("{} No issuer value available, leaving Issuer unset", getLogPrefix());
}
- profileRequestContext.getOutboundMessageContext().setMessage(response);
+ profileRequestContext.ensureOutboundMessageContext().setMessage(response);
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
index 5a7d33e34..0ac7b34aa 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
@@ -17,7 +17,6 @@
package org.opensaml.saml.saml2.profile.impl;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -43,13 +42,14 @@ import org.opensaml.saml.saml2.core.StatusCode;
import org.opensaml.saml.saml2.core.StatusMessage;
import org.opensaml.saml.saml2.core.StatusResponseType;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.PredicateSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
/**
@@ -91,14 +91,14 @@ public class AddStatusToResponse extends AbstractProfileAction {
private boolean detailedErrors;
/** Response to modify. */
- @Nullable private StatusResponseType response;
+ @NonnullBeforeExec private StatusResponseType response;
/** Constructor. */
public AddStatusToResponse() {
responseLookupStrategy =
new MessageLookup<>(StatusResponseType.class).compose(new OutboundMessageContextLookup());
- detailedErrorsCondition = Predicates.alwaysFalse();
- defaultStatusCodes = Collections.emptyList();
+ detailedErrorsCondition = PredicateSupport.alwaysFalse();
+ defaultStatusCodes = CollectionSupport.emptyList();
detailedErrors = false;
}
@@ -154,10 +154,11 @@ public class AddStatusToResponse extends AbstractProfileAction {
*
* @param codes list of status code values to insert
*/
- public void setStatusCodes(@Nonnull @NonnullElements final List<String> codes) {
+ public void setStatusCodes(@Nonnull final List<String> codes) {
checkSetterPreconditions();
- defaultStatusCodes = List.copyOf(Constraint.isNotNull(codes, "Status code list cannot be null"));
+ defaultStatusCodes = CollectionSupport.copyToList(
+ Constraint.isNotNull(codes, "Status code list cannot be null"));
}
/**
@@ -175,8 +176,11 @@ public class AddStatusToResponse extends AbstractProfileAction {
/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
- checkComponentActive();
-
+
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
response = responseLookupStrategy.apply(profileRequestContext);
if (response == null) {
log.debug("{} Response message was not returned by lookup strategy", getLogPrefix());
@@ -188,7 +192,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
log.debug("{} Detailed errors are {}", getLogPrefix(), detailedErrors ? "enabled" : "disabled");
- return super.doPreExecute(profileRequestContext);
+ return true;
}
/** {@inheritDoc} */
@@ -216,6 +220,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
if (!detailedErrors || statusMessageLookupStrategy == null) {
if (statusMessage != null) {
log.debug("{} Setting StatusMessage to defaulted value", getLogPrefix());
+ assert statusMessage != null;
buildStatusMessage(status, statusMessage);
}
} else if (statusMessageLookupStrategy != null) {
@@ -227,6 +232,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
} else if (statusMessage != null) {
log.debug("{} Current state of request was not mappable, setting StatusMessage to defaulted value",
getLogPrefix());
+ assert statusMessage != null;
buildStatusMessage(status, statusMessage);
}
}
@@ -319,10 +325,11 @@ public class AddStatusToResponse extends AbstractProfileAction {
@Nullable public List<String> apply(@Nullable final ProfileRequestContext input) {
final EventContext eventCtx = eventContextLookupStrategy.apply(input);
- if (eventCtx != null && eventCtx.getEvent() != null) {
- return codeMappings.get(eventCtx.getEvent().toString());
+ final Object event = eventCtx != null ? eventCtx.getEvent() : null;
+ if (event != null) {
+ return codeMappings.get(event.toString());
}
- return Collections.emptyList();
+ return CollectionSupport.emptyList();
}
}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
index d00e63e1d..fe185b6d4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -25,6 +25,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.context.navigate.MessageLookup;
import org.opensaml.profile.action.AbstractProfileAction;
import org.opensaml.profile.action.ActionSupport;
@@ -40,12 +41,14 @@ import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.core.SubjectConfirmation;
import org.opensaml.saml.saml2.core.SubjectConfirmationData;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import jakarta.servlet.http.HttpServletRequest;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.servlet.HttpServletSupport;
@@ -100,7 +103,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
@NonnullAfterInit private String confirmationMethod;
/** Response to modify. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
public AddSubjectConfirmationToSubjects() {
@@ -132,9 +135,10 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
// Default pulls from SAML endpoint on outbound message context.
recipientLookupStrategy = new Function<>() {
public String apply(final ProfileRequestContext input) {
- if (input.getOutboundMessageContext() != null) {
+ final MessageContext mc = input != null ? input.getOutboundMessageContext() : null;
+ if (mc != null) {
try {
- final URI uri = SAMLBindingSupport.getEndpointURL(input.getOutboundMessageContext());
+ final URI uri = SAMLBindingSupport.getEndpointURL(mc);
if (uri != null) {
final String url = uri.toString();
log.debug("{} Setting confirmation data Recipient to {}", getLogPrefix(), url);
@@ -254,6 +258,11 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
log.debug("{} Attempting to add SubjectConfirmation to assertions in outgoing Response", getLogPrefix());
response = responseLookupStrategy.apply(profileRequestContext);
@@ -266,7 +275,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
// Checkstyle: CyclomaticComplexity OFF
@@ -336,11 +345,12 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
* @return the subject to which the confirmation will be added
*/
@Nonnull private Subject getAssertionSubject(@Nonnull final Assertion assertion) {
- if (assertion.getSubject() != null) {
- return assertion.getSubject();
+ Subject subject = assertion.getSubject();
+ if (subject != null) {
+ return subject;
}
- final Subject subject = subjectBuilder.buildObject();
+ subject = subjectBuilder.buildObject();
assertion.setSubject(subject);
return subject;
}
@@ -379,12 +389,13 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
/** {@inheritDoc} */
@Nullable public String apply(@Nullable final ProfileRequestContext t) {
- if (getHttpServletRequest() != null) {
- return HttpServletSupport.getRemoteAddr(getHttpServletRequest());
+ final HttpServletRequest request = getHttpServletRequest();
+ if (request != null) {
+ return HttpServletSupport.getRemoteAddr(request);
}
return null;
}
-
}
+
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
index 69bd279ab..249aa9a76 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.profile.impl;
import java.util.function.Function;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -38,9 +37,10 @@ import org.opensaml.saml.saml2.core.NameID;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.core.Subject;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action that builds a {@link NameID} and adds it to the {@link Subject} of all the statements
@@ -78,10 +78,10 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
@Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
/** NameID to copy. */
- @Nullable private NameID nameId;
+ @NonnullBeforeExec private NameID nameId;
/** Response to modify. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
public CopyNameIDFromRequest() {
@@ -139,6 +139,11 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
log.debug("{} Attempting to add NameID to statements in outgoing Response", getLogPrefix());
response = responseLookupStrategy.apply(profileRequestContext);
@@ -165,7 +170,7 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
/** {@inheritDoc} */
@@ -175,6 +180,7 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
int count = 0;
for (final Assertion assertion : response.getAssertions()) {
+ assert assertion != null;
final Subject subject = getAssertionSubject(assertion);
final NameID existing = subject.getNameID();
if (existing == null || overwriteExisting) {
@@ -196,11 +202,12 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
* @return the assertion to which the name identifier will be added
*/
@Nonnull private Subject getAssertionSubject(@Nonnull final Assertion assertion) {
- if (assertion.getSubject() != null) {
- return assertion.getSubject();
+ Subject subject = assertion.getSubject();
+ if (subject != null) {
+ return subject;
}
- final Subject subject = subjectBuilder.buildObject();
+ subject = subjectBuilder.buildObject();
assertion.setSubject(subject);
return subject;
}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java
index 61662fb60..07d1b6688 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java
@@ -32,13 +32,13 @@ import org.opensaml.saml.common.SAMLObject;
import org.opensaml.saml.common.profile.SAMLEventIds;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.EncryptedAssertion;
-import org.opensaml.saml.saml2.core.EncryptedElementType;
import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.encryption.Decrypter;
import org.opensaml.xmlsec.encryption.support.DecryptionException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to decrypt an {@link EncryptedAssertion} element and replace it with the decrypted
@@ -90,16 +90,16 @@ public class DecryptAssertions extends AbstractDecryptAction {
@Nullable private Assertion processEncryptedAssertion(@Nonnull final ProfileRequestContext profileRequestContext,
@Nonnull final EncryptedAssertion encAssert) throws DecryptionException {
- if (!getDecryptionPredicate().test(
- new Pair<ProfileRequestContext,EncryptedElementType>(profileRequestContext, encAssert))) {
+ if (!getDecryptionPredicate().test(new Pair<>(profileRequestContext, encAssert))) {
return null;
}
- if (getDecrypter() == null) {
+ final Decrypter decrypter = getDecrypter();
+ if (decrypter == null) {
throw new DecryptionException("No decryption parameters, unable to decrypt EncryptedAssertion");
}
- return getDecrypter().decrypt(encAssert);
+ return decrypter.decrypt(encAssert);
}
/**
@@ -121,6 +121,7 @@ public class DecryptAssertions extends AbstractDecryptAction {
log.debug("{} Decrypting EncryptedAssertion in Response", getLogPrefix());
try {
final EncryptedAssertion encrypted = i.next();
+ assert encrypted != null;
final Assertion decrypted = processEncryptedAssertion(profileRequestContext, encrypted);
if (decrypted != null) {
encrypteds.add(encrypted);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java
index 28673e778..54a44c591 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java
@@ -34,11 +34,12 @@ import org.opensaml.saml.saml2.core.AttributeStatement;
import org.opensaml.saml.saml2.core.EncryptedAttribute;
import org.opensaml.saml.saml2.core.EncryptedElementType;
import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.encryption.Decrypter;
import org.opensaml.xmlsec.encryption.support.DecryptionException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to decrypt an {@link EncryptedAttribute} element and replace it with the decrypted
@@ -63,12 +64,13 @@ public class DecryptAttributes extends AbstractDecryptAction {
final SAMLObject message = getSAMLObject();
try {
- if (message instanceof Response) {
- for (final Assertion a : ((Response) message).getAssertions()) {
+ if (message instanceof Response resp) {
+ for (final Assertion a : resp.getAssertions()) {
+ assert a != null;
processAssertion(profileRequestContext, a);
}
- } else if (message instanceof Assertion) {
- processAssertion(profileRequestContext, (Assertion) message);
+ } else if (message instanceof Assertion a) {
+ processAssertion(profileRequestContext, a);
} else {
log.debug("{} Message was of unrecognized type {}, nothing to do", getLogPrefix(),
message.getClass().getName());
@@ -99,11 +101,12 @@ public class DecryptAttributes extends AbstractDecryptAction {
return null;
}
- if (getDecrypter() == null) {
+ final Decrypter decrypter = getDecrypter();
+ if (decrypter == null) {
throw new DecryptionException("No decryption parameters, unable to decrypt EncryptedAttribute");
}
- return getDecrypter().decrypt(encAttr);
+ return decrypter.decrypt(encAttr);
}
/**
@@ -128,6 +131,7 @@ public class DecryptAttributes extends AbstractDecryptAction {
try {
final EncryptedAttribute encrypted = i.next();
+ assert encrypted != null;
final Attribute decrypted = processEncryptedAttribute(profileRequestContext, encrypted);
if (decrypted != null) {
encrypteds.add(encrypted);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java
index 24eb7f350..2120129b2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java
@@ -29,6 +29,7 @@ import org.opensaml.saml.ext.saml2delrestrict.DelegationRestrictionType;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.AuthnRequest;
import org.opensaml.saml.saml2.core.Condition;
+import org.opensaml.saml.saml2.core.Conditions;
import org.opensaml.saml.saml2.core.EncryptedElementType;
import org.opensaml.saml.saml2.core.EncryptedID;
import org.opensaml.saml.saml2.core.LogoutRequest;
@@ -42,11 +43,12 @@ import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.core.SubjectConfirmation;
import org.opensaml.saml.saml2.core.SubjectQuery;
+import org.opensaml.saml.saml2.encryption.Decrypter;
import org.opensaml.xmlsec.encryption.support.DecryptionException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to decrypt an {@link EncryptedID} element and replace it with the decrypted {@link NameID}
@@ -72,24 +74,25 @@ public class DecryptNameIDs extends AbstractDecryptAction {
final SAMLObject message = getSAMLObject();
try {
- if (message instanceof AuthnRequest) {
- processSubject(profileRequestContext, ((AuthnRequest) message).getSubject());
- } else if (message instanceof SubjectQuery) {
- processSubject(profileRequestContext, ((SubjectQuery) message).getSubject());
- } else if (message instanceof Response) {
- for (final Assertion a : ((Response) message).getAssertions()) {
+ if (message instanceof AuthnRequest r) {
+ processSubject(profileRequestContext, r.getSubject());
+ } else if (message instanceof SubjectQuery r) {
+ processSubject(profileRequestContext, r.getSubject());
+ } else if (message instanceof Response r) {
+ for (final Assertion a : r.getAssertions()) {
+ assert a != null;
processAssertion(profileRequestContext, a);
}
- } else if (message instanceof LogoutRequest) {
- processLogoutRequest(profileRequestContext, (LogoutRequest) message);
- } else if (message instanceof ManageNameIDRequest) {
- processManageNameIDRequest(profileRequestContext, (ManageNameIDRequest) message);
- } else if (message instanceof NameIDMappingRequest) {
- processNameIDMappingRequest(profileRequestContext, (NameIDMappingRequest) message);
- } else if (message instanceof NameIDMappingResponse) {
- processNameIDMappingResponse(profileRequestContext, (NameIDMappingResponse) message);
- } else if (message instanceof Assertion) {
- processAssertion(profileRequestContext, (Assertion) message);
+ } else if (message instanceof LogoutRequest r) {
+ processLogoutRequest(profileRequestContext, r);
+ } else if (message instanceof ManageNameIDRequest r) {
+ processManageNameIDRequest(profileRequestContext, r);
+ } else if (message instanceof NameIDMappingRequest r) {
+ processNameIDMappingRequest(profileRequestContext, r);
+ } else if (message instanceof NameIDMappingResponse r) {
+ processNameIDMappingResponse(profileRequestContext, r);
+ } else if (message instanceof Assertion a) {
+ processAssertion(profileRequestContext, a);
} else {
log.debug("{} Message was of unrecognized type {}, nothing to do", getLogPrefix(),
message.getClass().getName());
@@ -122,11 +125,12 @@ public class DecryptNameIDs extends AbstractDecryptAction {
return null;
}
- if (getDecrypter() == null) {
+ final Decrypter decrypter = getDecrypter();
+ if (decrypter == null) {
throw new DecryptionException("No decryption parameters, unable to decrypt EncryptedID");
}
- final SAMLObject object = getDecrypter().decrypt(encID);
+ final SAMLObject object = decrypter.decrypt(encID);
if (object instanceof NameID) {
return (NameID) object;
}
@@ -151,11 +155,12 @@ public class DecryptNameIDs extends AbstractDecryptAction {
return null;
}
- if (getDecrypter() == null) {
+ final Decrypter decrypter = getDecrypter();
+ if (decrypter == null) {
throw new DecryptionException("No decryption parameters, unable to decrypt NewEncryptedID");
}
- return getDecrypter().decrypt(encID);
+ return decrypter.decrypt(encID);
}
// Checkstyle: CyclomaticComplexity OFF
@@ -171,10 +176,11 @@ public class DecryptNameIDs extends AbstractDecryptAction {
@Nullable final Subject subject) throws DecryptionException {
if (subject != null) {
- if (subject.getEncryptedID() != null) {
+ EncryptedID encID = subject.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in Subject", getLogPrefix());
try {
- final NameID decrypted = processEncryptedID(profileRequestContext, subject.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
subject.setNameID(decrypted);
subject.setEncryptedID(null);
@@ -188,10 +194,11 @@ public class DecryptNameIDs extends AbstractDecryptAction {
}
for (final SubjectConfirmation sc : subject.getSubjectConfirmations()) {
- if (sc.getEncryptedID() != null) {
+ encID = sc.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in SubjectConfirmation", getLogPrefix());
try {
- final NameID decrypted = processEncryptedID(profileRequestContext, subject.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
sc.setNameID(decrypted);
sc.setEncryptedID(null);
@@ -219,9 +226,10 @@ public class DecryptNameIDs extends AbstractDecryptAction {
private void processLogoutRequest(@Nonnull final ProfileRequestContext profileRequestContext,
@Nonnull final LogoutRequest request) throws DecryptionException {
- if (request.getEncryptedID() != null) {
+ final EncryptedID encID = request.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in LogoutRequest", getLogPrefix());
- final NameID decrypted = processEncryptedID(profileRequestContext, request.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
request.setNameID(decrypted);
request.setEncryptedID(null);
@@ -240,18 +248,20 @@ public class DecryptNameIDs extends AbstractDecryptAction {
private void processManageNameIDRequest(@Nonnull final ProfileRequestContext profileRequestContext,
@Nonnull final ManageNameIDRequest request) throws DecryptionException {
- if (request.getEncryptedID() != null) {
+ final EncryptedID encID = request.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in ManageNameIDRequest", getLogPrefix());
- final NameID decrypted = processEncryptedID(profileRequestContext, request.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
request.setNameID(decrypted);
request.setEncryptedID(null);
}
}
- if (request.getNewEncryptedID() != null) {
+ final NewEncryptedID newID = request.getNewEncryptedID();
+ if (newID != null) {
log.debug("{} Decrypting NewEncryptedID in ManageNameIDRequest", getLogPrefix());
- final NewID decrypted = processNewEncryptedID(profileRequestContext, request.getNewEncryptedID());
+ final NewID decrypted = processNewEncryptedID(profileRequestContext, newID);
if (decrypted != null) {
request.setNewID(decrypted);
request.setNewEncryptedID(null);
@@ -270,9 +280,10 @@ public class DecryptNameIDs extends AbstractDecryptAction {
private void processNameIDMappingRequest(@Nonnull final ProfileRequestContext profileRequestContext,
@Nonnull final NameIDMappingRequest request) throws DecryptionException {
- if (request.getEncryptedID() != null) {
+ final EncryptedID encID = request.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in NameIDMappingRequest", getLogPrefix());
- final NameID decrypted = processEncryptedID(profileRequestContext, request.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
request.setNameID(decrypted);
request.setEncryptedID(null);
@@ -291,9 +302,10 @@ public class DecryptNameIDs extends AbstractDecryptAction {
private void processNameIDMappingResponse(@Nonnull final ProfileRequestContext profileRequestContext,
@Nonnull final NameIDMappingResponse response) throws DecryptionException {
- if (response.getEncryptedID() != null) {
+ final EncryptedID encID = response.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in NameIDMappingRequest", getLogPrefix());
- final NameID decrypted = processEncryptedID(profileRequestContext, response.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
response.setNameID(decrypted);
response.setEncryptedID(null);
@@ -322,17 +334,18 @@ public class DecryptNameIDs extends AbstractDecryptAction {
log.warn("{} Trapped failure decrypting EncryptedIDs in Subject", getLogPrefix(), e);
}
-
- if (assertion.getConditions() != null) {
- for (final Condition c : assertion.getConditions().getConditions()) {
+ final Conditions conditions = assertion.getConditions();
+ if (conditions != null) {
+ for (final Condition c : conditions.getConditions()) {
if (!(c instanceof DelegationRestrictionType)) {
continue;
}
for (final Delegate d : ((DelegationRestrictionType) c).getDelegates()) {
- if (d.getEncryptedID() != null) {
+ final EncryptedID encID = d.getEncryptedID();
+ if (encID != null) {
log.debug("{} Decrypting EncryptedID in Delegate", getLogPrefix());
try {
- final NameID decrypted = processEncryptedID(profileRequestContext, d.getEncryptedID());
+ final NameID decrypted = processEncryptedID(profileRequestContext, encID);
if (decrypted != null) {
d.setNameID(decrypted);
d.setEncryptedID(null);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java
index 4138cef3b..bbf5dfa00 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java
@@ -23,7 +23,6 @@ import java.security.PublicKey;
import java.security.cert.X509Certificate;
import java.time.Duration;
import java.util.Arrays;
-import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -58,24 +57,27 @@ import org.opensaml.saml.criterion.ProtocolCriterion;
import org.opensaml.saml.criterion.RoleDescriptorCriterion;
import org.opensaml.saml.saml2.assertion.SAML2AssertionValidationParameters;
import org.opensaml.saml.saml2.core.Assertion;
+import org.opensaml.saml.saml2.core.Issuer;
+import org.opensaml.saml.saml2.metadata.RoleDescriptor;
import org.opensaml.saml.saml2.profile.impl.ValidateAssertions.AssertionValidationInput;
import org.opensaml.security.SecurityException;
import org.opensaml.security.credential.UsageType;
import org.opensaml.security.criteria.UsageCriterion;
import org.opensaml.security.messaging.ServletRequestX509CredentialAdapter;
import org.opensaml.security.x509.X509Credential;
+import org.opensaml.xmlsec.SignatureValidationParameters;
import org.opensaml.xmlsec.context.SecurityParametersContext;
import org.opensaml.xmlsec.signature.support.SignatureValidationParametersCriterion;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
import jakarta.servlet.http.HttpServletRequest;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.collection.LazySet;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.logic.PredicateSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.resolver.CriteriaSet;
import net.shibboleth.shared.servlet.HttpServletSupport;
@@ -145,16 +147,16 @@ public class DefaultAssertionValidationContextBuilder
* Constructor.
*/
public DefaultAssertionValidationContextBuilder() {
- signatureRequired = Predicates.alwaysTrue();
- includeSelfEntityIDAsRecipient = Predicates.alwaysFalse();
- checkAddress = Predicates.alwaysTrue();
+ signatureRequired = PredicateSupport.alwaysTrue();
+ includeSelfEntityIDAsRecipient = PredicateSupport.alwaysFalse();
+ checkAddress = PredicateSupport.alwaysTrue();
inResponseTo = new DefaultValidInResponseToLookupFunction();
- inResponseToRequired = Predicates.alwaysFalse();
- recipientRequired = Predicates.alwaysFalse();
- notOnOrAfterRequired = Predicates.alwaysFalse();
- notBeforeRequired = Predicates.alwaysFalse();
- addressRequired = Predicates.alwaysFalse();
- requiredConditions = Collections.emptySet();
+ inResponseToRequired = PredicateSupport.alwaysFalse();
+ recipientRequired = PredicateSupport.alwaysFalse();
+ notOnOrAfterRequired = PredicateSupport.alwaysFalse();
+ notBeforeRequired = PredicateSupport.alwaysFalse();
+ addressRequired = PredicateSupport.alwaysFalse();
+ requiredConditions = CollectionSupport.emptySet();
validIssuers = new DefaultValidIssuersLookupFunction();
securityParametersLookupStrategy = new ChildContextLookup<>(SecurityParametersContext.class)
@@ -263,9 +265,11 @@ public class DefaultAssertionValidationContextBuilder
*/
public void setRequiredConditions(@Nullable final Set<QName> conditions) {
if (conditions != null) {
- requiredConditions = conditions.stream().filter(Objects::nonNull).collect(Collectors.toUnmodifiableSet());
+ requiredConditions = conditions.stream()
+ .filter(Objects::nonNull)
+ .collect(CollectionSupport.nonnullCollector(Collectors.toUnmodifiableSet())).get();
} else {
- requiredConditions = Collections.emptySet();
+ requiredConditions = CollectionSupport.emptySet();
}
}
@@ -630,15 +634,17 @@ public class DefaultAssertionValidationContextBuilder
final TreeMap<String, Object> staticParams = new TreeMap<>();
// Clock skew
- if (getClockSkew() != null) {
+ final var skewFunc = getClockSkew();
+ if (skewFunc != null) {
staticParams.put(SAML2AssertionValidationParameters.CLOCK_SKEW,
- getClockSkew().apply(input.getProfileRequestContext()));
+ skewFunc.apply(input.getProfileRequestContext()));
}
// Lifetime (for IssueInstant)
- if (getLifetime() != null) {
+ final var lifetimeFunc = getLifetime();
+ if (lifetimeFunc != null) {
staticParams.put(SAML2AssertionValidationParameters.LIFETIME,
- getLifetime().apply(input.getProfileRequestContext()));
+ lifetimeFunc.apply(input.getProfileRequestContext()));
}
// Issuer
@@ -653,6 +659,7 @@ public class DefaultAssertionValidationContextBuilder
final Set<InetAddress> validAddresses = getValidAddresses(input);
final Boolean checkAddressEnabled = Boolean.valueOf(getCheckAddress().test(input.getProfileRequestContext()));
+ assert checkAddressEnabled != null;
// SubjectConfirmation
populateSubjectConfirmationParameters(staticParams, input, validAddresses, checkAddressEnabled);
@@ -678,11 +685,15 @@ public class DefaultAssertionValidationContextBuilder
Boolean.valueOf(getSignatureRequired().test(input.getProfileRequestContext())));
staticParams.put(SAML2AssertionValidationParameters.SIGNATURE_VALIDATION_CRITERIA_SET,
getSignatureCriteriaSet(input));
+
final SecurityParametersContext securityParameters = getSecurityParametersLookupStrategy()
.apply(input.getProfileRequestContext());
- if (securityParameters != null && securityParameters.getSignatureValidationParameters() != null) {
+
+ final SignatureValidationParameters valParams = securityParameters != null
+ ? securityParameters.getSignatureValidationParameters() : null;
+ if (valParams != null) {
staticParams.put(SAML2AssertionValidationParameters.SIGNATURE_VALIDATION_TRUST_ENGINE,
- securityParameters.getSignatureValidationParameters().getSignatureTrustEngine());
+ valParams.getSignatureTrustEngine());
}
}
@@ -735,9 +746,11 @@ public class DefaultAssertionValidationContextBuilder
staticParams.put(SAML2AssertionValidationParameters.SC_IN_RESPONSE_TO_REQUIRED,
Boolean.valueOf(getInResponseToRequired().test(input.getProfileRequestContext())));
- if (getInResponseTo() != null) {
+
+ final var irtFunc = getInResponseTo();
+ if (irtFunc != null) {
staticParams.put(SAML2AssertionValidationParameters.SC_VALID_IN_RESPONSE_TO,
- getInResponseTo().apply(input.getProfileRequestContext()));
+ irtFunc.apply(input.getProfileRequestContext()));
}
staticParams.put(SAML2AssertionValidationParameters.SC_NOT_BEFORE_REQUIRED,
@@ -760,9 +773,11 @@ public class DefaultAssertionValidationContextBuilder
// For AuthnStatement
staticParams.put(SAML2AssertionValidationParameters.STMT_AUTHN_VALID_ADDRESSES, validAddresses);
staticParams.put(SAML2AssertionValidationParameters.STMT_AUTHN_CHECK_ADDRESS, checkAddressEnabled);
- if (getMaximumTimeSinceAuthn() != null) {
+
+ final var maxTimeFunc = getMaximumTimeSinceAuthn();
+ if (maxTimeFunc != null) {
staticParams.put(SAML2AssertionValidationParameters.STMT_AUTHN_MAX_TIME,
- getMaximumTimeSinceAuthn().apply(input.getProfileRequestContext()));
+ maxTimeFunc.apply(input.getProfileRequestContext()));
}
}
@@ -810,8 +825,9 @@ public class DefaultAssertionValidationContextBuilder
@Nonnull protected CriteriaSet getSignatureCriteriaSet(@Nonnull final AssertionValidationInput input) {
final CriteriaSet criteriaSet = new CriteriaSet();
- if (getSignatureCriteriaSetFunction() != null) {
- final CriteriaSet dynamicCriteria = getSignatureCriteriaSetFunction().apply(
+ final var sigCritFunc = getSignatureCriteriaSetFunction();
+ if (sigCritFunc != null) {
+ final CriteriaSet dynamicCriteria = sigCritFunc.apply(
new Pair<>(input.getProfileRequestContext(), input.getAssertion()));
if (dynamicCriteria != null) {
criteriaSet.addAll(dynamicCriteria);
@@ -819,13 +835,13 @@ public class DefaultAssertionValidationContextBuilder
}
if (!criteriaSet.contains(EntityIdCriterion.class)) {
- String issuer = null;
- if (input.getAssertion().getIssuer() != null) {
- issuer = StringSupport.trimOrNull(input.getAssertion().getIssuer().getValue());
- }
- if (issuer != null) {
- log.debug("Adding internally-generated EntityIdCriterion with value of: {}", issuer);
- criteriaSet.add(new EntityIdCriterion(issuer));
+ final Issuer issuerObj = input.getAssertion().getIssuer();
+ if (issuerObj != null) {
+ final String issuer = StringSupport.trimOrNull(issuerObj.getValue());
+ if (issuer != null) {
+ log.debug("Adding internally-generated EntityIdCriterion with value of: {}", issuer);
+ criteriaSet.add(new EntityIdCriterion(issuer));
+ }
}
}
@@ -864,8 +880,11 @@ public class DefaultAssertionValidationContextBuilder
if (peerContext != null) {
if (!criteriaSet.contains(RoleDescriptorCriterion.class)) {
final SAMLMetadataContext metadataContext = peerContext.getSubcontext(SAMLMetadataContext.class);
- if (metadataContext != null && metadataContext.getRoleDescriptor() != null) {
- criteriaSet.add(new RoleDescriptorCriterion(metadataContext.getRoleDescriptor()));
+ if (metadataContext != null) {
+ final RoleDescriptor role = metadataContext.getRoleDescriptor();
+ if (role != null) {
+ criteriaSet.add(new RoleDescriptorCriterion(role));
+ }
}
}
if (!criteriaSet.contains(EntityRoleCriterion.class)) {
@@ -877,17 +896,21 @@ public class DefaultAssertionValidationContextBuilder
}
final SAMLProtocolContext protocolContext = inboundContext.getSubcontext(SAMLProtocolContext.class);
- if (!criteriaSet.contains(ProtocolCriterion.class)
- && protocolContext != null && protocolContext.getProtocol() != null) {
- criteriaSet.add(new ProtocolCriterion(protocolContext.getProtocol()));
+ if (!criteriaSet.contains(ProtocolCriterion.class) && protocolContext != null) {
+ final String protocol = protocolContext.getProtocol();
+ if (protocol != null) {
+ criteriaSet.add(new ProtocolCriterion(protocol));
+ }
}
if (!criteriaSet.contains(SignatureValidationParametersCriterion.class)) {
final SecurityParametersContext secParamsContext =
inboundContext.getSubcontext(SecurityParametersContext.class);
- if (secParamsContext != null && secParamsContext.getSignatureValidationParameters() != null) {
- criteriaSet.add(new SignatureValidationParametersCriterion(
- secParamsContext.getSignatureValidationParameters()));
+ if (secParamsContext != null) {
+ final SignatureValidationParameters valParams = secParamsContext.getSignatureValidationParameters();
+ if (valParams != null) {
+ criteriaSet.add(new SignatureValidationParametersCriterion(valParams));
+ }
}
}
}
@@ -959,7 +982,7 @@ public class DefaultAssertionValidationContextBuilder
try {
final String endpoint = SAMLBindingSupport.getActualReceiverEndpointURI(
- input.getProfileRequestContext().getInboundMessageContext(), input.getHttpServletRequest());
+ input.getProfileRequestContext().ensureInboundMessageContext(), input.getHttpServletRequest());
if (endpoint != null) {
validRecipients.add(endpoint);
}
@@ -1004,10 +1027,10 @@ public class DefaultAssertionValidationContextBuilder
return validAddresses;
}
log.warn("Could not determine attester IP address. Validation of Assertion may or may not succeed");
- return Collections.emptySet();
+ return CollectionSupport.emptySet();
} catch (final UnknownHostException e) {
log.warn("Processing of attester IP address failed. Validation of Assertion may or may not succeed", e);
- return Collections.emptySet();
+ return CollectionSupport.emptySet();
}
}
@@ -1022,7 +1045,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the IP address of the attester
*/
- @Nonnull protected String getAttesterIPAddress(@Nonnull final AssertionValidationInput input) {
+ @Nullable protected String getAttesterIPAddress(@Nonnull final AssertionValidationInput input) {
//TODO support indirection via SAMLBindingSupport and use of SAMLMessageReceivedEndpointContext?
return HttpServletSupport.getRemoteAddr(input.getHttpServletRequest());
}
@@ -1050,8 +1073,9 @@ public class DefaultAssertionValidationContextBuilder
validAudiences.add(selfEntityID);
}
- if (getAdditionalAudiences() != null) {
- final Set<String> additional = getAdditionalAudiences().apply(input.getProfileRequestContext());
+ final var audFunc = getAdditionalAudiences();
+ if (audFunc != null) {
+ final Set<String> additional = audFunc.apply(input.getProfileRequestContext());
if (additional != null) {
validAudiences.addAll(additional);
}
@@ -1070,7 +1094,7 @@ public class DefaultAssertionValidationContextBuilder
*/
@Nullable protected String getSelfEntityID(@Nonnull final AssertionValidationInput input) {
final SAMLSelfEntityContext selfContext = input.getProfileRequestContext()
- .getInboundMessageContext()
+ .ensureInboundMessageContext()
.getSubcontext(SAMLSelfEntityContext.class);
if (selfContext != null) {
@@ -1084,7 +1108,7 @@ public class DefaultAssertionValidationContextBuilder
public static class DefaultValidInResponseToLookupFunction implements Function<ProfileRequestContext, String> {
/** The lookup delegate. */
- private Function<MessageContext, String> delegate;
+ @Nonnull private Function<MessageContext, String> delegate;
/** Constructor. */
public DefaultValidInResponseToLookupFunction() {
@@ -1115,7 +1139,7 @@ public class DefaultAssertionValidationContextBuilder
public static class DefaultValidIssuersLookupFunction implements Function<ProfileRequestContext, Set<String>> {
/** The lookup delegate. */
- private Function<MessageContext, String> delegate;
+ @Nonnull private Function<MessageContext, String> delegate;
/** Constructor. */
public DefaultValidIssuersLookupFunction() {
@@ -1133,9 +1157,9 @@ public class DefaultAssertionValidationContextBuilder
// Note: Doesn't matter whether we apply to inbound or outbound
final String entityID = delegate.apply(prc.getInboundMessageContext());
if (entityID != null) {
- return Collections.singleton(entityID);
+ return CollectionSupport.singleton(entityID);
}
- return Collections.emptySet();
+ return CollectionSupport.emptySet();
}
}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
index bf8c3fdba..dd978edc9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
@@ -40,10 +40,11 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.xml.SerializeSupport;
/**
@@ -61,13 +62,13 @@ public class EncryptAssertions extends AbstractEncryptAction {
@Nonnull private final Logger log = LoggerFactory.getLogger(EncryptAssertions.class);
/** Used to log protocol messages. */
- private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
+ @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
/** Strategy used to locate the {@link Response} to operate on. */
@Nonnull private Function<ProfileRequestContext,StatusResponseType> responseLookupStrategy;
/** The message to operate on. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
@@ -101,6 +102,10 @@ public class EncryptAssertions extends AbstractEncryptAction {
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
final StatusResponseType message = responseLookupStrategy.apply(profileRequestContext);
if (message != null) {
if (message instanceof Response) {
@@ -116,7 +121,7 @@ public class EncryptAssertions extends AbstractEncryptAction {
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
/** {@inheritDoc} */
@@ -136,6 +141,7 @@ public class EncryptAssertions extends AbstractEncryptAction {
final List<EncryptedAssertion> accumulator = new ArrayList<>(response.getAssertions().size());
for (final Assertion assertion : response.getAssertions()) {
+ assert assertion != null;
try {
accumulator.add(getEncrypter().encrypt(assertion));
} catch (final EncryptionException e) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
index 6316f0c04..827385e46 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
@@ -42,10 +42,11 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.xml.SerializeSupport;
/**
@@ -68,7 +69,7 @@ public class EncryptAttributes extends AbstractEncryptAction {
@Nonnull private Function<ProfileRequestContext,StatusResponseType> responseLookupStrategy;
/** The message to operate on. */
- @Nullable private Response response;
+ @NonnullBeforeExec private Response response;
/** Constructor. */
public EncryptAttributes() {
@@ -101,6 +102,10 @@ public class EncryptAttributes extends AbstractEncryptAction {
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
final StatusResponseType message = responseLookupStrategy.apply(profileRequestContext);
if (message != null) {
if (message instanceof Response) {
@@ -116,7 +121,7 @@ public class EncryptAttributes extends AbstractEncryptAction {
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
/** {@inheritDoc} */
@@ -129,6 +134,7 @@ public class EncryptAttributes extends AbstractEncryptAction {
final List<EncryptedAttribute> accumulator = new ArrayList<>(statement.getAttributes().size());
for (final Attribute attribute : statement.getAttributes()) {
+ assert attribute != null;
try {
if (log.isDebugEnabled()) {
try {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
index 7a83fd296..00b74dde9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
@@ -18,7 +18,6 @@
package org.opensaml.saml.saml2.profile.impl;
import java.util.Collection;
-import java.util.Collections;
import java.util.Set;
import java.util.function.Function;
@@ -39,6 +38,7 @@ import org.opensaml.saml.saml2.core.ArtifactResponse;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.AuthnRequest;
import org.opensaml.saml.saml2.core.Condition;
+import org.opensaml.saml.saml2.core.Conditions;
import org.opensaml.saml.saml2.core.EncryptedID;
import org.opensaml.saml.saml2.core.LogoutRequest;
import org.opensaml.saml.saml2.core.ManageNameIDRequest;
@@ -46,6 +46,7 @@ import org.opensaml.saml.saml2.core.NameID;
import org.opensaml.saml.saml2.core.NameIDMappingRequest;
import org.opensaml.saml.saml2.core.NameIDMappingResponse;
import org.opensaml.saml.saml2.core.NewEncryptedID;
+import org.opensaml.saml.saml2.core.NewID;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.core.SubjectConfirmation;
@@ -54,11 +55,12 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.xml.SerializeSupport;
@@ -83,15 +85,16 @@ public class EncryptNameIDs extends AbstractEncryptAction {
@Nonnull private Function<ProfileRequestContext,SAMLObject> messageLookupStrategy;
/** Formats to exclude from encryption. */
- @Nonnull @NonnullElements private Set<String> excludedFormats;
+ @Nonnull private Set<String> excludedFormats;
/** The message to operate on. */
- @Nullable private SAMLObject message;
+ @NonnullBeforeExec private SAMLObject message;
/** Constructor. */
public EncryptNameIDs() {
- messageLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
- excludedFormats = Collections.singleton(NameID.ENTITY);
+ messageLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(
+ new OutboundMessageContextLookup());
+ excludedFormats = CollectionSupport.singleton(NameID.ENTITY);
}
/**
@@ -110,8 +113,8 @@ public class EncryptNameIDs extends AbstractEncryptAction {
*
* @param formats formats to exclude
*/
- public void setExcludedFormats(@Nonnull @NonnullElements final Collection<String> formats) {
- excludedFormats = Set.copyOf(StringSupport.normalizeStringCollection(formats));
+ public void setExcludedFormats(@Nonnull final Collection<String> formats) {
+ excludedFormats = CollectionSupport.copyToSet(StringSupport.normalizeStringCollection(formats));
}
/** {@inheritDoc} */
@@ -127,6 +130,10 @@ public class EncryptNameIDs extends AbstractEncryptAction {
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
message = messageLookupStrategy.apply(profileRequestContext);
if (message != null && message instanceof ArtifactResponse) {
@@ -138,7 +145,7 @@ public class EncryptNameIDs extends AbstractEncryptAction {
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
// Checkstyle: CyclomaticComplexity OFF
@@ -147,24 +154,25 @@ public class EncryptNameIDs extends AbstractEncryptAction {
protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
try {
- if (message instanceof AuthnRequest) {
- processSubject(((AuthnRequest) message).getSubject());
- } else if (message instanceof SubjectQuery) {
- processSubject(((SubjectQuery) message).getSubject());
- } else if (message instanceof Response) {
- for (final Assertion a : ((Response) message).getAssertions()) {
+ if (message instanceof AuthnRequest m) {
+ processSubject(m.getSubject());
+ } else if (message instanceof SubjectQuery m) {
+ processSubject(m.getSubject());
+ } else if (message instanceof Response m) {
+ for (final Assertion a : m.getAssertions()) {
+ assert a != null;
processAssertion(a);
}
- } else if (message instanceof LogoutRequest) {
- processLogoutRequest((LogoutRequest) message);
- } else if (message instanceof ManageNameIDRequest) {
- processManageNameIDRequest((ManageNameIDRequest) message);
- } else if (message instanceof NameIDMappingRequest) {
- processNameIDMappingRequest((NameIDMappingRequest) message);
- } else if (message instanceof NameIDMappingResponse) {
- processNameIDMappingResponse((NameIDMappingResponse) message);
- } else if (message instanceof Assertion) {
- processAssertion((Assertion) message);
+ } else if (message instanceof LogoutRequest m) {
+ processLogoutRequest(m);
+ } else if (message instanceof ManageNameIDRequest m) {
+ processManageNameIDRequest(m);
+ } else if (message instanceof NameIDMappingRequest m) {
+ processNameIDMappingRequest(m);
+ } else if (message instanceof NameIDMappingResponse m) {
+ processNameIDMappingResponse(m);
+ } else if (message instanceof Assertion m) {
+ processAssertion(m);
} else {
log.debug("{} Message was of unrecognized type {}, nothing to do", getLogPrefix(),
message.getClass().getName());
@@ -184,24 +192,22 @@ public class EncryptNameIDs extends AbstractEncryptAction {
*
* @return true iff encryption should happen
*/
- private boolean shouldEncrypt(@Nullable final NameID name) {
- if (name != null) {
- String format = name.getFormat();
- if (format == null) {
- format = NameID.UNSPECIFIED;
- }
- if (!excludedFormats.contains(format)) {
- if (log.isDebugEnabled()) {
- try {
- final Element dom = XMLObjectSupport.marshall(name);
- log.debug("{} NameID before encryption:\n{}", getLogPrefix(),
- SerializeSupport.prettyPrintXML(dom));
- } catch (final MarshallingException e) {
- log.error("{} Unable to marshall NameID for logging purposes", getLogPrefix(), e);
- }
+ private boolean shouldEncrypt(@Nonnull final NameID name) {
+ String format = name.getFormat();
+ if (format == null) {
+ format = NameID.UNSPECIFIED;
+ }
+ if (!excludedFormats.contains(format)) {
+ if (log.isDebugEnabled()) {
+ try {
+ final Element dom = XMLObjectSupport.marshall(name);
+ log.debug("{} NameID before encryption:\n{}", getLogPrefix(),
+ SerializeSupport.prettyPrintXML(dom));
+ } catch (final MarshallingException e) {
+ log.error("{} Unable to marshall NameID for logging purposes", getLogPrefix(), e);
}
- return true;
}
+ return true;
}
return false;
}
@@ -216,17 +222,19 @@ public class EncryptNameIDs extends AbstractEncryptAction {
private void processSubject(@Nullable final Subject subject) throws EncryptionException {
if (subject != null) {
- if (shouldEncrypt(subject.getNameID())) {
+ NameID nameID = subject.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypt NameID in Subject", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(subject.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
subject.setEncryptedID(encrypted);
subject.setNameID(null);
}
for (final SubjectConfirmation sc : subject.getSubjectConfirmations()) {
- if (shouldEncrypt(sc.getNameID())) {
+ nameID = sc.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypt NameID in SubjectConfirmation", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(sc.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
sc.setEncryptedID(encrypted);
sc.setNameID(null);
}
@@ -242,10 +250,10 @@ public class EncryptNameIDs extends AbstractEncryptAction {
* @throws EncryptionException if an error occurs
*/
private void processLogoutRequest(@Nonnull final LogoutRequest request) throws EncryptionException {
-
- if (shouldEncrypt(request.getNameID())) {
+ final NameID nameID = request.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypting NameID in LogoutRequest", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(request.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
request.setEncryptedID(encrypted);
request.setNameID(null);
}
@@ -260,16 +268,18 @@ public class EncryptNameIDs extends AbstractEncryptAction {
*/
private void processManageNameIDRequest(@Nonnull final ManageNameIDRequest request) throws EncryptionException {
- if (shouldEncrypt(request.getNameID())) {
+ final NameID nameID = request.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypting NameID in ManageNameIDRequest", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(request.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
request.setEncryptedID(encrypted);
request.setNameID(null);
}
- if (request.getNewID() != null) {
+ final NewID newID = request.getNewID();
+ if (newID != null && request.getNewID() != null) {
log.debug("{} Encrypting NewID in ManageNameIDRequest", getLogPrefix());
- final NewEncryptedID encrypted = getEncrypter().encrypt(request.getNewID());
+ final NewEncryptedID encrypted = getEncrypter().encrypt(newID);
request.setNewEncryptedID(encrypted);
request.setNewID(null);
}
@@ -284,9 +294,10 @@ public class EncryptNameIDs extends AbstractEncryptAction {
*/
private void processNameIDMappingRequest(@Nonnull final NameIDMappingRequest request) throws EncryptionException {
- if (shouldEncrypt(request.getNameID())) {
+ final NameID nameID = request.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypting NameID in NameIDMappingRequest", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(request.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
request.setEncryptedID(encrypted);
request.setNameID(null);
}
@@ -302,9 +313,10 @@ public class EncryptNameIDs extends AbstractEncryptAction {
private void processNameIDMappingResponse(@Nonnull final NameIDMappingResponse response)
throws EncryptionException {
- if (shouldEncrypt(response.getNameID())) {
+ final NameID nameID = response.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypting NameID in NameIDMappingResponse", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(response.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
response.setEncryptedID(encrypted);
response.setNameID(null);
}
@@ -321,15 +333,17 @@ public class EncryptNameIDs extends AbstractEncryptAction {
processSubject(assertion.getSubject());
- if (assertion.getConditions() != null) {
- for (final Condition c : assertion.getConditions().getConditions()) {
+ final Conditions conditions = assertion.getConditions();
+ if (conditions != null) {
+ for (final Condition c : conditions.getConditions()) {
if (!(c instanceof DelegationRestrictionType)) {
continue;
}
for (final Delegate d : ((DelegationRestrictionType) c).getDelegates()) {
- if (shouldEncrypt(d.getNameID())) {
+ final NameID nameID = d.getNameID();
+ if (nameID != null && shouldEncrypt(nameID)) {
log.debug("{} Encrypting NameID in Delegate", getLogPrefix());
- final EncryptedID encrypted = getEncrypter().encrypt(d.getNameID());
+ final EncryptedID encrypted = getEncrypter().encrypt(nameID);
d.setEncryptedID(encrypted);
d.setNameID(null);
}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
index 03e1eca4d..e9fa02745 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
@@ -24,6 +24,7 @@ import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
import org.opensaml.profile.action.AbstractConditionalProfileAction;
import org.opensaml.profile.action.ActionSupport;
@@ -34,9 +35,9 @@ import org.opensaml.saml.common.binding.SAMLBindingSupport;
import org.opensaml.saml.common.messaging.context.ECPContext;
import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action to create and populate an {@link ECPContext} based on the request and, when encryption is in use,
@@ -44,6 +45,7 @@ import net.shibboleth.shared.logic.Constraint;
*
* @event {@link EventIds#PROCEED_EVENT_ID}
* @event {@link EventIds#INVALID_MSG_CTX}
+ * @event {@link EventIds#INVALID_SEC_CFG}
*/
public class PopulateECPContext extends AbstractConditionalProfileAction {
@@ -141,8 +143,8 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
return;
}
- ecpContext.setRequestAuthenticated(
- SAMLBindingSupport.isMessageSigned(profileRequestContext.getInboundMessageContext()));
+ final MessageContext inbound = profileRequestContext.getInboundMessageContext();
+ ecpContext.setRequestAuthenticated(inbound != null && SAMLBindingSupport.isMessageSigned(inbound));
log.debug("{} RequestAuthenticated: {}", getLogPrefix(), ecpContext.isRequestAuthenticated());
boolean generateKey = true;
@@ -156,8 +158,14 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
}
if (generateKey) {
+ if (randomGenerator == null) {
+ log.warn("{} Unable to generate ECP session key, random source was null");
+ ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_SEC_CFG);
+ return;
+ }
log.debug("{} Generating session key for use by ECP peers", getLogPrefix());
final byte[] key = new byte[32];
+ assert randomGenerator != null;
randomGenerator.nextBytes(key);
ecpContext.setSessionKey(key);
} else {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
index 066140a51..a9dd023a2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
@@ -21,7 +21,6 @@ import java.io.IOException;
import java.util.function.Function;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opensaml.messaging.context.navigate.MessageLookup;
import org.opensaml.profile.action.AbstractProfileAction;
@@ -34,14 +33,16 @@ import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap;
import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap.SAMLArtifactMapEntry;
import org.opensaml.saml.common.messaging.context.navigate.SAMLMessageContextIssuerFunction;
import org.opensaml.saml.common.profile.SAMLEventIds;
+import org.opensaml.saml.saml2.core.Artifact;
import org.opensaml.saml.saml2.core.ArtifactResolve;
import org.opensaml.saml.saml2.core.ArtifactResponse;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* Action that resolves a SAML 2.0 artifact inside an {@link ArtifactResolve} request located
@@ -75,18 +76,18 @@ public class ResolveArtifact extends AbstractProfileAction {
/** Artifact mapper. */
@NonnullAfterInit private SAMLArtifactMap artifactMap;
-
- /** Request to process. */
- @Nullable private ArtifactResolve request;
+
+ /** Artifact to resolve. */
+ @NonnullBeforeExec private String artifact;
/** Response to populate. */
- @Nullable private ArtifactResponse response;
+ @NonnullBeforeExec private ArtifactResponse response;
/** Identity of issuer. */
- @Nullable private String issuerId;
+ @NonnullBeforeExec private String issuerId;
/** Identity of requester. */
- @Nullable private String requesterId;
+ @NonnullBeforeExec private String requesterId;
/** Constructor. */
public ResolveArtifact() {
@@ -167,13 +168,21 @@ public class ResolveArtifact extends AbstractProfileAction {
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
- request = requestLookupStrategy.apply(profileRequestContext);
+ if (!super.doPreExecute(profileRequestContext)) {
+ return false;
+ }
+
+ final ArtifactResolve request = requestLookupStrategy.apply(profileRequestContext);
if (request == null) {
log.debug("{} No request located", getLogPrefix());
ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_MSG_CTX);
return false;
- } else if (request.getArtifact() == null || request.getArtifact().getValue() == null) {
- log.debug("{} No Artifact element found in request, nothing to do", getLogPrefix());
+ }
+
+ final Artifact artifactObject = request.getArtifact();
+ artifact = artifactObject != null ? artifactObject.getValue() : null;
+ if (artifact== null) {
+ log.debug("{} No Artifact found in request, nothing to do", getLogPrefix());
ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_MSG_CTX);
return false;
}
@@ -199,14 +208,12 @@ public class ResolveArtifact extends AbstractProfileAction {
return false;
}
- return super.doPreExecute(profileRequestContext);
+ return true;
}
/** {@inheritDoc} */
@Override
protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
-
- final String artifact = request.getArtifact().getValue();
SAMLArtifactMapEntry entry = null;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java
index 41f106a4d..60522c33c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java
@@ -37,13 +37,14 @@ import org.opensaml.saml.saml2.assertion.SAML20AssertionValidator;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.Response;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import jakarta.servlet.http.HttpServletRequest;
-import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* A profile action which resolves SAML 2.0 Assertions from the profile request context
@@ -63,29 +64,26 @@ public class ValidateAssertions extends AbstractProfileAction {
/** Flag which indicates whether a failure of Assertion validation should be considered fatal. */
private boolean invalidFatal;
- /** The SAML 2.0 Assertion validator, may be null.*/
- @Nullable private SAML20AssertionValidator assertionValidator;
-
/** The SAML 2.0 Assertion validator lookup function, may be null.*/
- @Nullable
+ @Nonnull
private Function<Pair<ProfileRequestContext, Assertion>, SAML20AssertionValidator> assertionValidatorLookup;
/** Function that builds a {@link ValidationContext} instance based on a
* {@link AssertionValidationInput} instance. */
- @NonnullAfterInit private Function<AssertionValidationInput, ValidationContext> validationContextBuilder;
+ @Nonnull private Function<AssertionValidationInput, ValidationContext> validationContextBuilder;
/** The resolver for the list of assertions to be validated. */
@Nonnull private Function<ProfileRequestContext, List<Assertion>> assertionResolver;
/** The resolved assertions to be validated. */
- private List<Assertion> assertions;
+ @NonnullBeforeExec private List<Assertion> assertions;
/** Constructor. */
public ValidateAssertions() {
- super();
setInvalidFatal(true);
- setValidationContextBuilder(new DefaultAssertionValidationContextBuilder());
- setAssertionResolver(new DefaultAssertionResolver());
+ assertionValidatorLookup = FunctionSupport.constant(null);
+ validationContextBuilder = new DefaultAssertionValidationContextBuilder();
+ assertionResolver = new DefaultAssertionResolver();
}
/**
@@ -104,7 +102,7 @@ public class ValidateAssertions extends AbstractProfileAction {
*/
public void setAssertionResolver(@Nonnull final Function<ProfileRequestContext, List<Assertion>> function) {
checkSetterPreconditions();
- assertionResolver = function;
+ assertionResolver = Constraint.isNotNull(function, "Assertion resolver cannot be null");
}
/**
@@ -117,7 +115,7 @@ public class ValidateAssertions extends AbstractProfileAction {
*
* @return the builder function
*/
- @NonnullAfterInit
+ @Nonnull
public Function<AssertionValidationInput, ValidationContext> getValidationContextBuilder() {
return validationContextBuilder;
}
@@ -135,7 +133,7 @@ public class ValidateAssertions extends AbstractProfileAction {
public void setValidationContextBuilder(
@Nonnull final Function<AssertionValidationInput, ValidationContext> builder) {
checkSetterPreconditions();
- validationContextBuilder = builder;
+ validationContextBuilder = Constraint.isNotNull(builder, "ValidationContext builder cannot be null");
}
/**
@@ -166,12 +164,16 @@ public class ValidateAssertions extends AbstractProfileAction {
}
/**
- * Get the locally-configured Assertion validator.
+ * Get the configured Assertion validator.
+ *
+ * @param profileRequestContext profile request context
+ * @param assertion assertion
*
- * @return the local Assertion validator, or null
+ * @return the Assertion validator, or null
*/
- @Nullable public SAML20AssertionValidator getAssertionValidator() {
- return assertionValidator;
+ @Nullable public SAML20AssertionValidator getAssertionValidator(
+ @Nonnull final ProfileRequestContext profileRequestContext, @Nonnull final Assertion assertion) {
+ return assertionValidatorLookup.apply(new Pair<>(profileRequestContext, assertion));
}
/**
@@ -181,17 +183,7 @@ public class ValidateAssertions extends AbstractProfileAction {
*/
public void setAssertionValidator(@Nullable final SAML20AssertionValidator validator) {
checkSetterPreconditions();
- assertionValidator = validator;
- }
-
- /**
- * Get the Assertion validator lookup function.
- *
- * @return the Assertion validator lookup function, or null
- */
- @Nullable
- public Function<Pair<ProfileRequestContext, Assertion>, SAML20AssertionValidator> getAssertionValidatorLookup() {
- return assertionValidatorLookup;
+ assertionValidatorLookup = FunctionSupport.constant(validator);
}
/**
@@ -200,33 +192,18 @@ public class ValidateAssertions extends AbstractProfileAction {
* @param function the Assertion validator lookup function, may be null
*/
public void setAssertionValidatorLookup(
- @Nullable final Function<Pair<ProfileRequestContext, Assertion>, SAML20AssertionValidator> function) {
+ @Nonnull final Function<Pair<ProfileRequestContext, Assertion>, SAML20AssertionValidator> function) {
checkSetterPreconditions();
- assertionValidatorLookup = function;
+ assertionValidatorLookup = Constraint.isNotNull(function, "AssertionValidator lookup function cannot be null");
}
/** {@inheritDoc} */
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- if (getAssertionResolver() == null) {
- throw new ComponentInitializationException("Assertion resolver function cannot be null");
- }
-
- if (getValidationContextBuilder() == null) {
- throw new ComponentInitializationException("ValidationContext builder cannot be null");
- }
-
if (getHttpServletRequest() == null) {
throw new ComponentInitializationException("HttpServletRequest cannot be null");
}
-
- if (getAssertionValidator() == null) {
- if (getAssertionValidatorLookup() == null) {
- throw new ComponentInitializationException("Both Assertion validator and lookup function were null");
- }
- log.info("{} Assertion validator is null, must be resovleable via the lookup function", getLogPrefix());
- }
}
/** {@inheritDoc} */
@@ -249,7 +226,8 @@ public class ValidateAssertions extends AbstractProfileAction {
protected void doExecute(@Nonnull final ProfileRequestContext profileContext) {
boolean sawNonValid = false;
for (final Assertion assertion : assertions) {
- final SAML20AssertionValidator validator = resolveValidator(profileContext, assertion);
+ assert assertion != null;
+ final SAML20AssertionValidator validator = getAssertionValidator(profileContext, assertion);
if (validator == null) {
log.warn("{} No SAML20AssertionValidator was available, terminating", getLogPrefix());
ActionSupport.buildEvent(profileContext, SAMLEventIds.UNABLE_VALIDATE_ASSERTION);
@@ -299,36 +277,6 @@ public class ValidateAssertions extends AbstractProfileAction {
assertion.getObjectMetadata().put(new ValidationProcessingData(validationContext, validationResult));
}
- /**
- * Resolve the Assertion token validator to use with the specified Assertion.
- *
- * @param profileContext the current profile context
- * @param assertion the assertion being evaluated
- *
- * @return the token validator
- */
- @Nullable protected SAML20AssertionValidator resolveValidator(@Nonnull final ProfileRequestContext profileContext,
- @Nonnull final Assertion assertion) {
-
- if (getAssertionValidatorLookup() != null) {
- log.debug("{} Attempting to resolve SAML 2 Assertion validator via lookup function", getLogPrefix());
- final SAML20AssertionValidator validator = getAssertionValidatorLookup().apply(
- new Pair<>(profileContext, assertion));
- if (validator != null) {
- log.debug("{} Resolved SAML 2 Assertion validator via lookup function", getLogPrefix());
- return validator;
- }
- }
-
- if (getAssertionValidator() != null) {
- log.debug("{} Resolved locally configured SAML 2 Assertion validator", getLogPrefix());
- return getAssertionValidator();
- }
-
- log.debug("{} No SAML 2 Assertion validator could be resolved", getLogPrefix());
- return null;
- }
-
/**
* Build the Assertion ValidationContext.
*
@@ -342,8 +290,10 @@ public class ValidateAssertions extends AbstractProfileAction {
@Nonnull protected ValidationContext buildValidationContext(@Nonnull final ProfileRequestContext profileContext,
@Nonnull final Assertion assertion) throws AssertionValidationException {
+ final HttpServletRequest servletRequest = getHttpServletRequest();
+ assert servletRequest != null;
final ValidationContext validationContext = getValidationContextBuilder().apply(
- new AssertionValidationInput(profileContext, getHttpServletRequest(), assertion));
+ new AssertionValidationInput(profileContext, servletRequest, assertion));
if (validationContext == null) {
log.warn("{} ValidationContext produced was null", getLogPrefix());
@@ -359,8 +309,9 @@ public class ValidateAssertions extends AbstractProfileAction {
public class DefaultAssertionResolver implements Function<ProfileRequestContext, List<Assertion>> {
/** {@inheritDoc} */
- public List<Assertion> apply(@Nonnull final ProfileRequestContext profileContext) {
- final SAMLObject message = (SAMLObject) profileContext.getInboundMessageContext().getMessage();
+ public List<Assertion> apply(@Nullable final ProfileRequestContext profileContext) {
+ final SAMLObject message = profileContext != null
+ ? (SAMLObject) profileContext.ensureInboundMessageContext().getMessage() : null;
if (message instanceof Response) {
return ((Response) message).getAssertions();
}
@@ -375,13 +326,13 @@ public class ValidateAssertions extends AbstractProfileAction {
*/
public static class AssertionValidationInput {
/** The profile request context input. */
- private ProfileRequestContext profileContext;
+ @Nonnull private ProfileRequestContext profileContext;
/** The HTTP request input. */
- private HttpServletRequest httpServletRequest;
+ @Nonnull private HttpServletRequest httpServletRequest;
/** The Assertion being evaluated. */
- private Assertion assertion;
+ @Nonnull private Assertion assertion;
/**
* Constructor.
@@ -423,7 +374,6 @@ public class ValidateAssertions extends AbstractProfileAction {
@Nonnull public Assertion getAssertion() {
return assertion;
}
-
}
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java
index f2ce46381..85939929d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java
@@ -22,7 +22,6 @@ import java.net.UnknownHostException;
import java.security.PublicKey;
import java.security.cert.X509Certificate;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -31,8 +30,10 @@ import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.collection.LazySet;
import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.resolver.CriteriaSet;
import net.shibboleth.shared.servlet.HttpServletSupport;
@@ -43,15 +44,16 @@ import org.opensaml.saml.common.assertion.ValidationContext;
import org.opensaml.saml.common.messaging.context.SAMLSelfEntityContext;
import org.opensaml.saml.saml2.assertion.SAML2AssertionValidationParameters;
import org.opensaml.saml.saml2.core.Assertion;
+import org.opensaml.saml.saml2.core.Issuer;
import org.opensaml.security.SecurityException;
import org.opensaml.security.credential.UsageType;
import org.opensaml.security.criteria.UsageCriterion;
import org.opensaml.security.messaging.ServletRequestX509CredentialAdapter;
import org.opensaml.security.x509.X509Credential;
+import org.opensaml.xmlsec.SignatureValidationParameters;
import org.opensaml.xmlsec.context.SecurityParametersContext;
import org.opensaml.xmlsec.signature.support.SignatureValidationParametersCriterion;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Function which implements default behavior for building an instance of {@link ValidationContext}
@@ -61,10 +63,10 @@ public class DefaultSAML20AssertionValidationContextBuilder
implements Function<SAML20AssertionTokenValidationInput, ValidationContext> {
/** Logger. */
- @Nullable private Logger log = LoggerFactory.getLogger(DefaultSAML20AssertionValidationContextBuilder.class);
+ @Nonnull private Logger log = LoggerFactory.getLogger(DefaultSAML20AssertionValidationContextBuilder.class);
/** A function for resolving the signature validation CriteriaSet for a particular function. */
- private Function<Pair<MessageContext, Assertion>, CriteriaSet> signatureCriteriaSetFunction;
+ @Nullable private Function<Pair<MessageContext, Assertion>, CriteriaSet> signatureCriteriaSetFunction;
/** Flag indicating whether an Assertion signature is required. */
private boolean signatureRequired;
@@ -195,8 +197,9 @@ public class DefaultSAML20AssertionValidationContextBuilder
@Nonnull protected CriteriaSet getSignatureCriteriaSet(@Nonnull final SAML20AssertionTokenValidationInput input) {
final CriteriaSet criteriaSet = new CriteriaSet();
- if (getSignatureCriteriaSetFunction() != null) {
- final CriteriaSet dynamicCriteria = getSignatureCriteriaSetFunction().apply(
+ final var criteriaFunction = getSignatureCriteriaSetFunction();
+ if (criteriaFunction != null) {
+ final CriteriaSet dynamicCriteria = criteriaFunction.apply(
new Pair<>(input.getMessageContext(), input.getAssertion()));
if (dynamicCriteria != null) {
criteriaSet.addAll(dynamicCriteria);
@@ -204,13 +207,13 @@ public class DefaultSAML20AssertionValidationContextBuilder
}
if (!criteriaSet.contains(EntityIdCriterion.class)) {
- String issuer = null;
- if (input.getAssertion().getIssuer() != null) {
- issuer = StringSupport.trimOrNull(input.getAssertion().getIssuer().getValue());
- }
- if (issuer != null) {
- log.debug("Adding internally-generated EntityIdCriterion with value of: {}", issuer);
- criteriaSet.add(new EntityIdCriterion(issuer));
+ final Issuer issuerObj = input.getAssertion().getIssuer();
+ if (issuerObj != null) {
+ final String issuer = StringSupport.trimOrNull(issuerObj.getValue());
+ if (issuer != null) {
+ log.debug("Adding internally-generated EntityIdCriterion with value of: {}", issuer);
+ criteriaSet.add(new EntityIdCriterion(issuer));
+ }
}
}
@@ -222,9 +225,10 @@ public class DefaultSAML20AssertionValidationContextBuilder
if (!criteriaSet.contains(SignatureValidationParametersCriterion.class)) {
final SecurityParametersContext secParamsContext =
input.getMessageContext().getSubcontext(SecurityParametersContext.class);
- if (secParamsContext != null && secParamsContext.getSignatureValidationParameters() != null) {
- criteriaSet.add(new SignatureValidationParametersCriterion(
- secParamsContext.getSignatureValidationParameters()));
+ final SignatureValidationParameters params = secParamsContext != null
+ ? secParamsContext.getSignatureValidationParameters() : null;
+ if (params != null) {
+ criteriaSet.add(new SignatureValidationParametersCriterion(params));
}
}
@@ -333,10 +337,10 @@ public class DefaultSAML20AssertionValidationContextBuilder
return validAddresses;
}
log.warn("Could not determine attester IP address. Validation of Assertion may or may not succeed");
- return Collections.emptySet();
+ return CollectionSupport.emptySet();
} catch (final UnknownHostException e) {
log.warn("Processing of attester IP address failed. Validation of Assertion may or may not succeed", e);
- return Collections.emptySet();
+ return CollectionSupport.emptySet();
}
}
@@ -351,7 +355,7 @@ public class DefaultSAML20AssertionValidationContextBuilder
*
* @return the IP address of the attester
*/
- @Nonnull protected String getAttesterIPAddress(@Nonnull final SAML20AssertionTokenValidationInput input) {
+ @Nullable protected String getAttesterIPAddress(@Nonnull final SAML20AssertionTokenValidationInput input) {
return HttpServletSupport.getRemoteAddr(input.getHttpServletRequest());
}
@@ -379,4 +383,4 @@ public class DefaultSAML20AssertionValidationContextBuilder
return validAudiences;
}
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/SAML20AssertionTokenValidationInput.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/SAML20AssertionTokenValidationInput.java
index 345a04e4d..992ea260c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/SAML20AssertionTokenValidationInput.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/SAML20AssertionTokenValidationInput.java
@@ -31,13 +31,13 @@ import net.shibboleth.shared.logic.Constraint;
public class SAML20AssertionTokenValidationInput {
/** The message context input. */
- private MessageContext messageContext;
+ @Nonnull private MessageContext messageContext;
/** The HTTP request input. */
- private HttpServletRequest httpServletRequest;
+ @Nonnull private HttpServletRequest httpServletRequest;
/** The Assertion being evaluated. */
- private Assertion assertion;
+ @Nonnull private Assertion assertion;
/**
* Constructor.
@@ -80,4 +80,4 @@ public class SAML20AssertionTokenValidationInput {
return assertion;
}
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
index f94e70008..f2eabb597 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
@@ -17,7 +17,6 @@
package org.opensaml.saml.saml2.wssecurity.messaging.impl;
-import java.util.Collections;
import java.util.List;
import java.util.function.Function;
@@ -43,16 +42,18 @@ import org.opensaml.soap.wssecurity.WSSecurityConstants;
import org.opensaml.soap.wssecurity.messaging.Token.ValidationStatus;
import org.opensaml.soap.wssecurity.messaging.WSSecurityContext;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.Strings;
import jakarta.servlet.http.HttpServletRequest;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.collection.LazyList;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.NonnullSupplier;
/**
@@ -71,11 +72,8 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
/** Flag which indicates whether a failure of Assertion validation should be considered fatal. */
private boolean invalidFatal;
- /** The SAML 2.0 Assertion validator, may be null.*/
- @Nullable private SAML20AssertionValidator assertionValidator;
-
- /** The SAML 2.0 Assertion validator lookup function, may be null.*/
- @Nullable private Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> assertionValidatorLookup;
+ /** The SAML 2.0 Assertion validator lookup function.*/
+ @Nonnull private Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> assertionValidatorLookup;
/** Function that builds a {@link ValidationContext} instance based on a
* {@link SAML20AssertionTokenValidationInput} instance. */
@@ -86,6 +84,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
public WSSecuritySAML20AssertionTokenSecurityHandler() {
setInvalidFatal(true);
setValidationContextBuilder(new DefaultSAML20AssertionValidationContextBuilder());
+ assertionValidatorLookup = FunctionSupport.constant(null);
}
/**
@@ -125,10 +124,10 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
* @return current HTTP request
*/
@Nullable public HttpServletRequest getHttpServletRequest() {
- if (httpServletRequestSupplier == null) {
- return null;
+ if (httpServletRequestSupplier != null) {
+ return httpServletRequestSupplier.get();
}
- return httpServletRequestSupplier.get();
+ return null;
}
/**
@@ -179,22 +178,26 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
}
/**
- * Get the locally-configured Assertion validator.
+ * Get the configured Assertion validator.
+ *
+ * @param messageContext input message context
+ * @param assertion input assertion
*
- * @return the local Assertion validator, or null
+ * @return the configured Assertion validator, or null
*/
- @Nullable public SAML20AssertionValidator getAssertionValidator() {
- return assertionValidator;
+ @Nullable public SAML20AssertionValidator getAssertionValidator(@Nullable final MessageContext messageContext,
+ @Nullable final Assertion assertion) {
+ return assertionValidatorLookup.apply(new Pair<>(messageContext, assertion));
}
/**
- * Set the locally-configured Assertion validator.
+ * Set a locally-configured Assertion validator.
*
* @param validator the local Assertion validator, may be null
*/
public void setAssertionValidator(@Nullable final SAML20AssertionValidator validator) {
checkSetterPreconditions();
- assertionValidator = validator;
+ assertionValidatorLookup = FunctionSupport.constant(validator);
}
/**
@@ -212,9 +215,9 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
* @param function the Assertion validator lookup function, may be null
*/
public void setAssertionValidatorLookup(
- @Nullable final Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> function) {
+ @Nonnull final Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> function) {
checkSetterPreconditions();
- assertionValidatorLookup = function;
+ assertionValidatorLookup = Constraint.isNotNull(function, "Assertion validator lookup function cannot be null");
}
/** {@inheritDoc} */
@@ -228,13 +231,6 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
if (getHttpServletRequest() == null) {
throw new ComponentInitializationException("HttpServletRequest cannot be null");
}
-
- if (getAssertionValidator() == null) {
- if (getAssertionValidatorLookup() == null) {
- throw new ComponentInitializationException("Both Assertion validator and lookup function were null");
- }
- log.info("Assertion validator is null, must be resovleable via the lookup function");
- }
}
// Checkstyle: ReturnCount OFF
@@ -254,7 +250,8 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
final WSSecurityContext wsContext = messageContext.ensureSubcontext(WSSecurityContext.class);
for (final Assertion assertion : assertions) {
- final SAML20AssertionValidator validator = resolveValidator(messageContext, assertion);
+ assert assertion != null;
+ final SAML20AssertionValidator validator = getAssertionValidator(messageContext, assertion);
if (validator == null) {
log.warn("No SAML20AssertionValidator was available, terminating");
SOAPMessagingSupport.registerSOAP11Fault(messageContext, FaultCode.SERVER,
@@ -340,36 +337,6 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
}
- /**
- * Resolve the Assertion token validator to use with the specified Assertion.
- *
- * @param messageContext the current message context
- * @param assertion the assertion being evaluated
- *
- * @return the token validator
- */
- @Nullable protected SAML20AssertionValidator resolveValidator(@Nonnull final MessageContext messageContext,
- @Nonnull final Assertion assertion) {
-
- if (getAssertionValidatorLookup() != null) {
- log.debug("Attempting to resolve SAML 2 Assertion validator via lookup function");
- final SAML20AssertionValidator validator = getAssertionValidatorLookup().apply(
- new Pair<>(messageContext, assertion));
- if (validator != null) {
- log.debug("Resolved SAML 2 Assertion validator via lookup function");
- return validator;
- }
- }
-
- if (getAssertionValidator() != null) {
- log.debug("Resolved locally configured SAML 2 Assertion validator");
- return getAssertionValidator();
- }
-
- log.debug("No SAML 2 Assertion validator could be resolved");
- return null;
- }
-
/**
* Build the Assertion ValidationContext.
*
@@ -383,8 +350,16 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
@Nonnull protected ValidationContext buildValidationContext(@Nonnull final MessageContext messageContext,
@Nonnull final Assertion assertion) throws MessageHandlerException {
+ final HttpServletRequest servletRequest = getHttpServletRequest();
+ if (servletRequest == null) {
+ log.warn("HttpServletRequest was null");
+ SOAPMessagingSupport.registerSOAP11Fault(messageContext, FaultCode.SERVER,
+ "Internal processing error", null, null, null);
+ throw new MessageHandlerException("HttpServletRequest was null");
+ }
+
final ValidationContext validationContext = getValidationContextBuilder().apply(
- new SAML20AssertionTokenValidationInput(messageContext, getHttpServletRequest(), assertion));
+ new SAML20AssertionTokenValidationInput(messageContext, servletRequest, assertion));
if (validationContext == null) {
log.warn("ValidationContext produced was null");
@@ -408,7 +383,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
Security.ELEMENT_NAME);
if (securityHeaders == null || securityHeaders.isEmpty()) {
log.debug("No WS-Security Security header found in inbound SOAP message. Skipping further processing.");
- return Collections.emptyList();
+ return CollectionSupport.emptyList();
}
final LazyList<Assertion> assertions = new LazyList<>();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AbstractSAML2NameIDGeneratorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AbstractSAML2NameIDGeneratorTest.java
index 668c086d0..7e5894624 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AbstractSAML2NameIDGeneratorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AbstractSAML2NameIDGeneratorTest.java
@@ -48,7 +48,7 @@ public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
mock.initialize();
final NameID nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
- Assert.assertNotNull(nameId);
+ assert nameId != null;
Assert.assertEquals(nameId.getValue(), "foo");
Assert.assertEquals(nameId.getSPProvidedID(), "bar");
Assert.assertEquals(nameId.getNameQualifier(), NAME_QUALIFIER);
@@ -65,7 +65,7 @@ public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
mock.initialize();
final NameID nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
- Assert.assertNotNull(nameId);
+ assert nameId != null;
Assert.assertEquals(nameId.getValue(), "foo");
Assert.assertNull(nameId.getNameQualifier());
Assert.assertNull(nameId.getSPNameQualifier());
@@ -79,7 +79,7 @@ public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
mock.initialize();
final NameID nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
- Assert.assertNotNull(nameId);
+ assert nameId != null;
Assert.assertEquals(nameId.getValue(), "foo");
Assert.assertNull(nameId.getNameQualifier());
Assert.assertNull(nameId.getSPNameQualifier());
@@ -92,7 +92,7 @@ public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
mock.initialize();
final NameID nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
- Assert.assertNotNull(nameId);
+ assert nameId != null;
Assert.assertEquals(nameId.getValue(), "foo");
Assert.assertEquals(nameId.getNameQualifier(), NAME_QUALIFIER);
Assert.assertEquals(nameId.getSPNameQualifier(), SP_NAME_QUALIFIER);
@@ -108,7 +108,7 @@ public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
/** {@inheritDoc} */
@Override
- protected String getIdentifier(ProfileRequestContext profileRequestContext) throws SAMLException {
+ protected String getIdentifier(@Nonnull final ProfileRequestContext profileRequestContext) throws SAMLException {
return "foo";
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertionsTest.java
index 64cbbb35e..235ff98ac 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertionsTest.java
@@ -26,6 +26,7 @@ import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.common.SAMLObjectBuilder;
import org.opensaml.saml.common.messaging.context.ChannelBindingsContext;
import org.opensaml.saml.ext.saml2cb.ChannelBindings;
+import org.opensaml.saml.saml2.core.Advice;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
@@ -43,6 +44,11 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
private AddChannelBindingsToAssertions action;
+ /**
+ * Test set up.
+ *
+ * @throws ComponentInitializationException
+ */
@BeforeMethod
public void setUp() throws ComponentInitializationException {
@@ -62,7 +68,7 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
@Test
public void testNoResponse() {
final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(cbc);
+ prc.ensureOutboundMessageContext().addSubcontext(cbc);
action.execute(prc);
ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
@@ -82,7 +88,7 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
public void testNoAssertion() {
final ProfileRequestContext prc = new RequestContextBuilder().setOutboundMessage(
SAML2ActionTestingSupport.buildResponse()).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(cbc);
+ prc.ensureOutboundMessageContext().addSubcontext(cbc);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
@@ -101,7 +107,7 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
final ProfileRequestContext prc =
new RequestContextBuilder().setOutboundMessage(response).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(cbc);
+ prc.ensureOutboundMessageContext().addSubcontext(cbc);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
@@ -109,9 +115,10 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getAdvice());
- Assert.assertEquals(assertion.getAdvice().getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).size(), 1);
- Assert.assertEquals(((ChannelBindings) assertion.getAdvice().getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).get(0)).getType(), "foo");
+ final Advice advice = assertion.getAdvice();
+ assert advice != null;
+ Assert.assertEquals(advice.getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).size(), 1);
+ Assert.assertEquals(((ChannelBindings) advice.getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).get(0)).getType(), "foo");
}
/**
@@ -129,14 +136,15 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
final ProfileRequestContext prc =
new RequestContextBuilder().setOutboundMessage(response).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(cbc);
+ prc.ensureOutboundMessageContext().addSubcontext(cbc);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNotNull(assertion.getAdvice());
- Assert.assertEquals(assertion.getAdvice().getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).size(), 1);
- Assert.assertEquals(((ChannelBindings) assertion.getAdvice().getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).get(0)).getType(), "foo");
+ final Advice advice = assertion.getAdvice();
+ assert advice != null;
+ Assert.assertEquals(advice.getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).size(), 1);
+ Assert.assertEquals(((ChannelBindings) advice.getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).get(0)).getType(), "foo");
}
/** Test that the advice is properly added if there are multiple assertions in the response. */
@@ -149,7 +157,7 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
final ProfileRequestContext prc =
new RequestContextBuilder().setOutboundMessage(response).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(cbc);
+ prc.ensureOutboundMessageContext().addSubcontext(cbc);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
@@ -158,9 +166,10 @@ public class AddChannelBindingsToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertEquals(response.getAssertions().size(), 3);
for (final Assertion assertion : response.getAssertions()) {
- Assert.assertNotNull(assertion.getAdvice());
- Assert.assertEquals(assertion.getAdvice().getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).size(), 1);
- Assert.assertEquals(((ChannelBindings) assertion.getAdvice().getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).get(0)).getType(), "foo");
+ final Advice advice = assertion.getAdvice();
+ assert advice != null;
+ Assert.assertEquals(advice.getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).size(), 1);
+ Assert.assertEquals(((ChannelBindings) advice.getChildren(ChannelBindings.DEFAULT_ELEMENT_NAME).get(0)).getType(), "foo");
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertionsTest.java
index fdd469c68..d7e17a4a5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertionsTest.java
@@ -28,6 +28,7 @@ import org.opensaml.profile.testing.ActionTestingSupport;
import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.common.messaging.context.ECPContext;
import org.opensaml.saml.ext.samlec.GeneratedKey;
+import org.opensaml.saml.saml2.core.Advice;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
@@ -41,13 +42,24 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
private ECPContext ecp;
+ private String encodedKey;
+
private AddGeneratedKeyToAssertions action;
+ /**
+ * Test set up.
+ *
+ * @throws ComponentInitializationException
+ * @throws EncodingException
+ */
@BeforeMethod
- public void setUp() throws ComponentInitializationException {
+ public void setUp() throws ComponentInitializationException, EncodingException {
ecp = new ECPContext();
- ecp.setSessionKey(new byte[]{1, 2, 3});
+ final byte[] key = new byte[]{1, 2, 3};
+ ecp.setSessionKey(key);
+
+ encodedKey = Base64Support.encode(key, false);
action = new AddGeneratedKeyToAssertions();
action.initialize();
@@ -57,7 +69,7 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testNoResponse() {
final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(ecp);
+ prc.ensureOutboundMessageContext().addSubcontext(ecp);
action.execute(prc);
ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
@@ -77,7 +89,7 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
public void testNoAssertion() {
final ProfileRequestContext prc = new RequestContextBuilder().setOutboundMessage(
SAML2ActionTestingSupport.buildResponse()).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(ecp);
+ prc.ensureOutboundMessageContext().addSubcontext(ecp);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
@@ -97,7 +109,7 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
final ProfileRequestContext prc =
new RequestContextBuilder().setOutboundMessage(response).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(ecp);
+ prc.ensureOutboundMessageContext().addSubcontext(ecp);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
@@ -105,10 +117,11 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getAdvice());
- Assert.assertEquals(assertion.getAdvice().getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).size(), 1);
- final GeneratedKey key = ((GeneratedKey) assertion.getAdvice().getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).get(0));
- Assert.assertEquals(key.getValue(), Base64Support.encode(ecp.getSessionKey(), false));
+ final Advice advice = assertion.getAdvice();
+ assert advice != null;
+ Assert.assertEquals(advice.getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).size(), 1);
+ final GeneratedKey key = ((GeneratedKey) advice.getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).get(0));
+ Assert.assertEquals(key.getValue(), encodedKey);
}
/**
@@ -127,15 +140,16 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
final ProfileRequestContext prc =
new RequestContextBuilder().setOutboundMessage(response).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(ecp);
+ prc.ensureOutboundMessageContext().addSubcontext(ecp);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNotNull(assertion.getAdvice());
- Assert.assertEquals(assertion.getAdvice().getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).size(), 1);
- final GeneratedKey key = ((GeneratedKey) assertion.getAdvice().getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).get(0));
- Assert.assertEquals(key.getValue(), Base64Support.encode(ecp.getSessionKey(), false));
+ final Advice advice = assertion.getAdvice();
+ assert advice != null;
+ Assert.assertEquals(advice.getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).size(), 1);
+ final GeneratedKey key = ((GeneratedKey) advice.getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).get(0));
+ Assert.assertEquals(key.getValue(), encodedKey);
}
/** Test that the advice is properly added if there are multiple assertions in the response.
@@ -149,7 +163,7 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
final ProfileRequestContext prc =
new RequestContextBuilder().setOutboundMessage(response).buildProfileRequestContext();
- prc.getOutboundMessageContext().addSubcontext(ecp);
+ prc.ensureOutboundMessageContext().addSubcontext(ecp);
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
@@ -158,10 +172,11 @@ public class AddGeneratedKeyToAssertionsTest extends OpenSAMLInitBaseTestCase {
Assert.assertEquals(response.getAssertions().size(), 3);
for (final Assertion assertion : response.getAssertions()) {
- Assert.assertNotNull(assertion.getAdvice());
- Assert.assertEquals(assertion.getAdvice().getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).size(), 1);
- final GeneratedKey key = ((GeneratedKey) assertion.getAdvice().getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).get(0));
- Assert.assertEquals(key.getValue(), Base64Support.encode(ecp.getSessionKey(), false));
+ final Advice advice = assertion.getAdvice();
+ assert advice != null;
+ Assert.assertEquals(advice.getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).size(), 1);
+ final GeneratedKey key = ((GeneratedKey) advice.getChildren(GeneratedKey.DEFAULT_ELEMENT_NAME).get(0));
+ Assert.assertEquals(key.getValue(), encodedKey);
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java
index a34c15770..f61aeba0f 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java
@@ -26,7 +26,9 @@ import java.util.function.Function;
import javax.annotation.Nonnull;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.PredicateSupport;
import net.shibboleth.shared.resolver.ResolverException;
import org.opensaml.core.testing.XMLObjectBaseTestCase;
@@ -37,12 +39,12 @@ import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.common.SAMLException;
import org.opensaml.saml.common.SAMLObjectBuilder;
import org.opensaml.saml.common.binding.impl.SAMLMetadataLookupHandlerTest;
-import org.opensaml.saml.common.profile.NameIdentifierGenerator;
import org.opensaml.saml.common.profile.SAMLEventIds;
import org.opensaml.saml.common.profile.logic.AffiliationNameIDPolicyPredicate;
import org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolver;
import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.AuthnRequest;
+import org.opensaml.saml.saml2.core.Issuer;
import org.opensaml.saml.saml2.core.NameID;
import org.opensaml.saml.saml2.core.NameIDPolicy;
import org.opensaml.saml.saml2.core.Response;
@@ -55,9 +57,8 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import com.google.common.base.Predicates;
-
/** Test for {@link AddNameIDToSubjects}. */
+ at SuppressWarnings("javadoc")
public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
private static final String NAME_QUALIFIER = "https://idp.example.org";
@@ -101,7 +102,7 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
final MockSAML2NameIDGenerator mock2 = new MockSAML2NameIDGenerator("bar");
mock2.setFormat(NameID.EMAIL);
- mock2.setActivationCondition(Predicates.<ProfileRequestContext>alwaysFalse());
+ mock2.setActivationCondition(PredicateSupport.alwaysFalse());
mock2.initialize();
final MockSAML2NameIDGenerator mock3 = new MockSAML2NameIDGenerator("baz");
@@ -113,7 +114,7 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
mock4.initialize();
generator = new ChainingSAML2NameIDGenerator();
- generator.setGenerators(Arrays.<NameIdentifierGenerator<NameID>>asList(mock, mock2, mock3, mock4));
+ generator.setGenerators(CollectionSupport.listOf(mock, mock2, mock3, mock4));
action.setNameIDGenerator(generator);
@@ -128,18 +129,18 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = (Assertion) prc.getOutboundMessageContext().getMessage();
- Subject subject = assertion.getSubject();
+ final Assertion assertion = (Assertion) prc.ensureOutboundMessageContext().ensureMessage();
+ final Subject subject = assertion.getSubject();
Assert.assertNull(subject);
}
@Test
public void testNoAssertions() throws ComponentInitializationException {
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+ Assert.assertTrue(((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().isEmpty());
}
@Test void testRequiredFormat() throws ComponentInitializationException {
@@ -148,25 +149,27 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
final NameIDPolicy policy = policyBuilder.buildObject();
policy.setFormat(NameID.EMAIL);
request.setNameIDPolicy(policy);
- prc.getInboundMessageContext().setMessage(request);
+ prc.ensureInboundMessageContext().setMessage(request);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "baz");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.EMAIL);
+ assert subject != null;
+ NameID nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "baz");
+ Assert.assertEquals(nameID.getFormat(), NameID.EMAIL);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(1);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "baz");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.EMAIL);
+ assert subject != null;
+ nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "baz");
+ Assert.assertEquals(nameID.getFormat(), NameID.EMAIL);
}
@Test void testRequiredFormatError() throws ComponentInitializationException {
@@ -175,13 +178,13 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
final NameIDPolicy policy = policyBuilder.buildObject();
policy.setFormat(NameID.KERBEROS);
request.setNameIDPolicy(policy);
- prc.getInboundMessageContext().setMessage(request);
+ prc.ensureInboundMessageContext().setMessage(request);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.INVALID_NAMEID_POLICY);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
Assert.assertNull(subject);
}
@@ -193,26 +196,29 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
policy.setFormat(NameID.PERSISTENT);
policy.setSPNameQualifier("foo");
request.setNameIDPolicy(policy);
- prc.getInboundMessageContext().setMessage(request);
+ prc.ensureInboundMessageContext().setMessage(request);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.INVALID_NAMEID_POLICY);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
Assert.assertNull(subject);
- policy.setSPNameQualifier(request.getIssuer().getValue());
+ final Issuer issuer = request.getIssuer();
+ assert issuer != null;
+ policy.setSPNameQualifier(issuer.getValue());
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "baf");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.PERSISTENT);
+ assert subject != null;
+ final NameID nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "baf");
+ Assert.assertEquals(nameID.getFormat(), NameID.PERSISTENT);
}
@Test void testAffiliation() throws ComponentInitializationException {
@@ -222,7 +228,7 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
policy.setFormat(NameID.UNSPECIFIED);
policy.setSPNameQualifier("foo");
request.setNameIDPolicy(policy);
- prc.getInboundMessageContext().setMessage(request);
+ prc.ensureInboundMessageContext().setMessage(request);
final AffiliationNameIDPolicyPredicate predicate = new AffiliationNameIDPolicyPredicate();
predicate.setMetadataResolver(metadataResolver);
@@ -234,7 +240,7 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.INVALID_NAMEID_POLICY);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
Assert.assertNull(subject);
@@ -243,12 +249,13 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "baf");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.PERSISTENT);
+ assert subject != null;
+ final NameID nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "baf");
+ Assert.assertEquals(nameID.getFormat(), NameID.PERSISTENT);
}
@Test void testArbitraryFormat() throws ComponentInitializationException {
@@ -258,11 +265,11 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
Assert.assertNull(subject);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(1);
subject = assertion.getSubject();
Assert.assertNull(subject);
}
@@ -275,19 +282,21 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "foo");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.X509_SUBJECT);
+ assert subject != null;
+ NameID nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "foo");
+ Assert.assertEquals(nameID.getFormat(), NameID.X509_SUBJECT);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(1);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "foo");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.X509_SUBJECT);
+ assert subject != null;
+ nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "foo");
+ Assert.assertEquals(nameID.getFormat(), NameID.X509_SUBJECT);
}
@Test void testMultipleGenerators() throws ComponentInitializationException {
@@ -298,19 +307,21 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "baz");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.EMAIL);
+ assert subject != null;
+ NameID nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "baz");
+ Assert.assertEquals(nameID.getFormat(), NameID.EMAIL);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(1);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "baz");
- Assert.assertEquals(subject.getNameID().getFormat(), NameID.EMAIL);
+ assert subject != null;
+ nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "baz");
+ Assert.assertEquals(nameID.getFormat(), NameID.EMAIL);
}
/** Set up the test message with some assertions. */
@@ -318,7 +329,7 @@ public class AddNameIDToSubjectsTest extends XMLObjectBaseTestCase {
final Response response = SAML2ActionTestingSupport.buildResponse();
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
}
private class MockSAML2NameIDGenerator extends AbstractSAML2NameIDGenerator {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java
index d9b4fb0c5..9cf2069bf 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java
@@ -40,6 +40,11 @@ public class AddOneTimeUseConditionToAssertionsTest extends OpenSAMLInitBaseTes
private AddOneTimeUseConditionToAssertions action;
+ /**
+ * Test set up.
+ *
+ * @throws ComponentInitializationException
+ */
@BeforeMethod
public void setUp() throws ComponentInitializationException {
action = new AddOneTimeUseConditionToAssertions();
@@ -85,8 +90,9 @@ public class AddOneTimeUseConditionToAssertionsTest extends OpenSAMLInitBaseTes
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getOneTimeUse());
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getOneTimeUse());
}
/**
@@ -118,8 +124,9 @@ public class AddOneTimeUseConditionToAssertionsTest extends OpenSAMLInitBaseTes
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getOneTimeUse());
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getOneTimeUse());
}
/** Test that the condition is properly added if there are multiple assertions in the response. */
@@ -140,8 +147,9 @@ public class AddOneTimeUseConditionToAssertionsTest extends OpenSAMLInitBaseTes
Assert.assertEquals(response.getAssertions().size(), 3);
for (final Assertion assertion : response.getAssertions()) {
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getOneTimeUse());
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getOneTimeUse());
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java
index f87c0de8a..ce9ff2aa7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java
@@ -49,6 +49,9 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
private AddProxyRestrictionToAssertions action;
+ /**
+ * Test set up.
+ */
@BeforeMethod public void setUp() {
action = new AddProxyRestrictionToAssertions();
action.setProxyRestrictionLookupStrategy(FunctionSupport.constant(new Pair<>(1,CollectionSupport.setOf(AUDIENCE1, AUDIENCE2))));
@@ -103,9 +106,11 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getProxyRestriction());
- final ProxyRestriction proxy = assertion.getConditions().getProxyRestriction();
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getProxyRestriction());
+ final ProxyRestriction proxy = c.getProxyRestriction();
+ assert proxy != null;
Assert.assertEquals(proxy.getProxyCount(), Integer.valueOf(0));
Assert.assertTrue(proxy.getAudiences().isEmpty());
}
@@ -132,9 +137,11 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getProxyRestriction());
- final ProxyRestriction proxy = assertion.getConditions().getProxyRestriction();
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getProxyRestriction());
+ final ProxyRestriction proxy = c.getProxyRestriction();
+ assert proxy != null;
Assert.assertEquals(proxy.getProxyCount(), Integer.valueOf(1));
Assert.assertTrue(proxy.getAudiences().isEmpty());
}
@@ -161,9 +168,11 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getProxyRestriction());
- final ProxyRestriction proxy = assertion.getConditions().getProxyRestriction();
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getProxyRestriction());
+ final ProxyRestriction proxy = c.getProxyRestriction();
+ assert proxy != null;
Assert.assertNull(proxy.getProxyCount());
Assert.assertEquals(proxy.getAudiences().stream().map(Audience::getURI).collect(Collectors.toUnmodifiableSet()),
CollectionSupport.setOf(AUDIENCE1, AUDIENCE2));
@@ -190,9 +199,11 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertNotNull(response.getAssertions());
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getProxyRestriction());
- final ProxyRestriction proxy = assertion.getConditions().getProxyRestriction();
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getProxyRestriction());
+ final ProxyRestriction proxy = c.getProxyRestriction();
+ assert proxy != null;
Assert.assertEquals(proxy.getProxyCount(), Integer.valueOf(1));
Assert.assertEquals(proxy.getAudiences().stream().map(Audience::getURI).collect(Collectors.toUnmodifiableSet()),
CollectionSupport.setOf(AUDIENCE1, AUDIENCE2));
@@ -222,9 +233,11 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getProxyRestriction());
- final ProxyRestriction proxy = assertion.getConditions().getProxyRestriction();
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getProxyRestriction());
+ final ProxyRestriction proxy = c.getProxyRestriction();
+ assert proxy != null;
Assert.assertEquals(proxy.getProxyCount(), Integer.valueOf(1));
Assert.assertEquals(proxy.getAudiences().stream().map(Audience::getURI).collect(Collectors.toUnmodifiableSet()),
CollectionSupport.setOf(AUDIENCE1, AUDIENCE2));
@@ -250,13 +263,15 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
Assert.assertEquals(response.getAssertions().size(), 3);
for (Assertion assertion : response.getAssertions()) {
- Assert.assertNotNull(assertion.getConditions());
- Assert.assertNotNull(assertion.getConditions().getProxyRestriction());
- final ProxyRestriction proxy = assertion.getConditions().getProxyRestriction();
+ final Conditions c = assertion.getConditions();
+ assert c != null;
+ Assert.assertNotNull(c.getProxyRestriction());
+ final ProxyRestriction proxy = c.getProxyRestriction();
+ assert proxy != null;
Assert.assertEquals(proxy.getProxyCount(), Integer.valueOf(1));
Assert.assertEquals(proxy.getAudiences().stream().map(Audience::getURI).collect(Collectors.toUnmodifiableSet()),
CollectionSupport.setOf(AUDIENCE1, AUDIENCE2));
}
}
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
index bdbfb5d6e..7c57043a2 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
@@ -18,13 +18,13 @@
package org.opensaml.saml.saml2.profile.impl;
import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
-import org.opensaml.messaging.context.MessageContext;
import org.opensaml.profile.action.EventIds;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.testing.ActionTestingSupport;
import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.common.SAMLVersion;
import org.opensaml.saml.saml2.core.ArtifactResponse;
+import org.opensaml.saml.saml2.core.Issuer;
import org.opensaml.saml.saml2.core.LogoutResponse;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.core.Status;
@@ -37,6 +37,7 @@ import org.testng.annotations.Test;
import net.shibboleth.shared.component.ComponentInitializationException;
/** {@link AddStatusResponseShell} unit test. */
+ at SuppressWarnings("javadoc")
public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
private String issuer;
@@ -60,10 +61,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final MessageContext outMsgCtx = prc.getOutboundMessageContext();
- final Response response = (Response) outMsgCtx.getMessage();
+ final Response response = (Response) prc.ensureOutboundMessageContext().ensureMessage();
- Assert.assertNotNull(response);
Assert.assertNotNull(response.getID());
Assert.assertNotNull(response.getIssueInstant());
Assert.assertEquals(response.getVersion(), SAMLVersion.VERSION_20);
@@ -71,9 +70,10 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
Assert.assertNull(response.getIssuer());
final Status status = response.getStatus();
- Assert.assertNotNull(status);
- Assert.assertNotNull(status.getStatusCode());
- Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.SUCCESS);
+ assert status != null;
+ final StatusCode code = status.getStatusCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), StatusCode.SUCCESS);
}
@Test public void testAddResponseWithIssuer() throws ComponentInitializationException {
@@ -87,13 +87,11 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final MessageContext outMsgCtx = prc.getOutboundMessageContext();
- final Response response = (Response) outMsgCtx.getMessage();
-
- Assert.assertNotNull(response);
+ final Response response = (Response) prc.ensureOutboundMessageContext().ensureMessage();
- Assert.assertNotNull(response.getIssuer());
- Assert.assertEquals(response.getIssuer().getValue(), "foo");
+ final Issuer issuer = response.getIssuer();
+ assert issuer != null;
+ Assert.assertEquals(issuer.getValue(), "foo");
}
@Test public void testAddResponseWhenResponseAlreadyExist() throws ComponentInitializationException {
@@ -116,10 +114,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final MessageContext outMsgCtx = prc.getOutboundMessageContext();
- final ArtifactResponse response = (ArtifactResponse) outMsgCtx.getMessage();
+ final ArtifactResponse response = (ArtifactResponse) prc.ensureOutboundMessageContext().ensureMessage();
- Assert.assertNotNull(response);
Assert.assertNotNull(response.getID());
Assert.assertNotNull(response.getIssueInstant());
Assert.assertEquals(response.getVersion(), SAMLVersion.VERSION_20);
@@ -127,9 +123,10 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
Assert.assertNull(response.getIssuer());
final Status status = response.getStatus();
- Assert.assertNotNull(status);
- Assert.assertNotNull(status.getStatusCode());
- Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.SUCCESS);
+ assert status != null;
+ final StatusCode code = status.getStatusCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), StatusCode.SUCCESS);
}
@Test public void testAddLogoutResponse() throws ComponentInitializationException {
@@ -141,10 +138,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final MessageContext outMsgCtx = prc.getOutboundMessageContext();
- final LogoutResponse response = (LogoutResponse) outMsgCtx.getMessage();
+ final LogoutResponse response = (LogoutResponse) prc.ensureOutboundMessageContext().ensureMessage();
- Assert.assertNotNull(response);
Assert.assertNotNull(response.getID());
Assert.assertNotNull(response.getIssueInstant());
Assert.assertEquals(response.getVersion(), SAMLVersion.VERSION_20);
@@ -152,9 +147,10 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
Assert.assertNull(response.getIssuer());
final Status status = response.getStatus();
- Assert.assertNotNull(status);
- Assert.assertNotNull(status.getStatusCode());
- Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.SUCCESS);
+ assert status != null;
+ final StatusCode code = status.getStatusCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), StatusCode.SUCCESS);
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
index 4bec94621..dc0be09fc 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
@@ -17,8 +17,6 @@
package org.opensaml.saml.saml2.profile.impl;
-import java.util.Arrays;
-
import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.testing.ActionTestingSupport;
@@ -26,14 +24,17 @@ import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.core.Status;
import org.opensaml.saml.saml2.core.StatusCode;
+import org.opensaml.saml.saml2.core.StatusMessage;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.component.ComponentInitializationException;
/** {@link AddStatusToResponse} unit test. */
+ at SuppressWarnings("javadoc")
public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
private ProfileRequestContext prc;
@@ -52,35 +53,38 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+ final Response response = (Response) prc.ensureOutboundMessageContext().ensureMessage();
final Status status = response.getStatus();
- Assert.assertNotNull(status);
-
- Assert.assertNotNull(status.getStatusCode());
- Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.RESPONDER);
- Assert.assertNull(status.getStatusCode().getStatusCode());
+ assert status != null;
+ final StatusCode code = status.getStatusCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), StatusCode.RESPONDER);
+ Assert.assertNull(code.getStatusCode());
Assert.assertNull(status.getStatusMessage());
}
@Test public void testMultiStatus() throws ComponentInitializationException {
- action.setStatusCodes(Arrays.asList(StatusCode.REQUESTER, StatusCode.REQUEST_VERSION_DEPRECATED));
+ action.setStatusCodes(CollectionSupport.listOf(StatusCode.REQUESTER, StatusCode.REQUEST_VERSION_DEPRECATED));
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+ final Response response = (Response) prc.ensureOutboundMessageContext().ensureMessage();
final Status status = response.getStatus();
- Assert.assertNotNull(status);
+ assert status != null;
+ StatusCode code = status.getStatusCode();
+ assert code != null;
+
+ Assert.assertEquals(code.getValue(), StatusCode.REQUESTER);
- Assert.assertNotNull(status.getStatusCode());
- Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.REQUESTER);
- Assert.assertNotNull(status.getStatusCode().getStatusCode());
- Assert.assertEquals(status.getStatusCode().getStatusCode().getValue(), StatusCode.REQUEST_VERSION_DEPRECATED);
- Assert.assertNull(status.getStatusCode().getStatusCode().getStatusCode());
+ code = code.getStatusCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), StatusCode.REQUEST_VERSION_DEPRECATED);
+ Assert.assertNull(code.getStatusCode());
Assert.assertNull(status.getStatusMessage());
}
@@ -92,11 +96,13 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+ final Response response = (Response) prc.ensureOutboundMessageContext().ensureMessage();
final Status status = response.getStatus();
- Assert.assertNotNull(status);
- Assert.assertEquals(status.getStatusMessage().getValue(), "Foo");
+ assert status != null;
+ final StatusMessage msg = status.getStatusMessage();
+ assert msg != null;
+ Assert.assertEquals(msg.getValue(), "Foo");
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java
index dab672997..ff871a606 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java
@@ -72,14 +72,14 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
@Test
public void testNoAssertions() throws ComponentInitializationException {
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
action.setMethod(SubjectConfirmation.METHOD_BEARER);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+ Assert.assertTrue(((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().isEmpty());
}
@Test void testSuccess() throws ComponentInitializationException {
@@ -91,24 +91,24 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
Subject subject = assertion.getSubject();
- Assert.assertNotNull(subject);
+ assert subject != null;
Assert.assertEquals(subject.getSubjectConfirmations().size(), 1);
Assert.assertEquals(subject.getSubjectConfirmations().get(0).getMethod(), SubjectConfirmation.METHOD_BEARER);
- assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+ assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(1);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
+ assert subject != null;
Assert.assertEquals(subject.getSubjectConfirmations().size(), 1);
Assert.assertEquals(subject.getSubjectConfirmations().get(0).getMethod(), SubjectConfirmation.METHOD_BEARER);
final SubjectConfirmationData data = subject.getSubjectConfirmations().get(0).getSubjectConfirmationData();
- Assert.assertNotNull(data);
+ assert data != null;
Assert.assertNull(data.getRecipient());
Assert.assertNotNull(data.getNotOnOrAfter());
Assert.assertEquals(data.getAddress(), "127.0.0.1");
- Assert.assertEquals(data.getInResponseTo(), ((AuthnRequest) prc.getInboundMessageContext().getMessage()).getID());
+ Assert.assertEquals(data.getInResponseTo(), ((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getID());
}
@Test void testNoAddress() throws ComponentInitializationException {
@@ -121,13 +121,13 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ final Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
final Subject subject = assertion.getSubject();
- Assert.assertNotNull(subject);
+ assert subject != null;
Assert.assertEquals(subject.getSubjectConfirmations().size(), 1);
final SubjectConfirmationData data = subject.getSubjectConfirmations().get(0).getSubjectConfirmationData();
- Assert.assertNotNull(data);
+ assert data != null;
Assert.assertNull(data.getAddress());
}
@@ -136,10 +136,10 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
final Response response = SAML2ActionTestingSupport.buildResponse();
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
- prc.getOutboundMessageContext().setMessage(response);
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
- prc.getInboundMessageContext().getSubcontext(SAMLMessageInfoContext.class, true);
- response.setInResponseTo(((AuthnRequest) prc.getInboundMessageContext().getMessage()).getID());
+ prc.ensureOutboundMessageContext().setMessage(response);
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+ prc.ensureInboundMessageContext().ensureSubcontext(SAMLMessageInfoContext.class);
+ response.setInResponseTo(((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getID());
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java
index 2613aad57..747a8c8ad 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java
@@ -23,6 +23,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.testing.ActionTestingSupport;
import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.saml2.core.Assertion;
+import org.opensaml.saml.saml2.core.NameID;
import org.opensaml.saml.saml2.core.Response;
import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
@@ -33,6 +34,7 @@ import org.testng.annotations.Test;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Test for {@link CopyNameIDFromRequest}. */
+ at SuppressWarnings("javadoc")
public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
private static final String NAME_QUALIFIER = "https://idp.example.org";
@@ -57,17 +59,17 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
@Test
public void testNoAssertions() {
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+ Assert.assertTrue(((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().isEmpty());
}
@Test
public void testNoRequest() {
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
- ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
addAssertions();
action.execute(prc);
@@ -76,11 +78,11 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
@Test
public void testNoName() {
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
- ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
addAssertions();
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(null));
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(null));
action.execute(prc);
ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
@@ -89,19 +91,22 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
@Test void testCopy() {
Subject subject = SAML2ActionTestingSupport.buildSubject("jdoe");
- subject.getNameID().setNameQualifier(NAME_QUALIFIER);
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(subject));
+ NameID nameID = subject.getNameID();
+ assert nameID != null;
+ nameID.setNameQualifier(NAME_QUALIFIER);
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(subject));
addAssertions();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+ Assertion assertion = ((Response) prc.ensureOutboundMessageContext().ensureMessage()).getAssertions().get(0);
subject = assertion.getSubject();
- Assert.assertNotNull(subject);
- Assert.assertNotNull(subject.getNameID());
- Assert.assertEquals(subject.getNameID().getValue(), "jdoe");
- Assert.assertEquals(subject.getNameID().getNameQualifier(), NAME_QUALIFIER);
+ assert subject != null;
+ nameID = subject.getNameID();
+ assert nameID != null;
+ Assert.assertEquals(nameID.getValue(), "jdoe");
+ Assert.assertEquals(nameID.getNameQualifier(), NAME_QUALIFIER);
}
/** Set up the test message with some assertions. */
@@ -109,7 +114,7 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
final Response response = SAML2ActionTestingSupport.buildResponse();
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDsTest.java
index 78c25f291..154bc13e7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDsTest.java
@@ -70,6 +70,12 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
private SAMLObjectBuilder<Subject> subjectBuilder;
+ /**
+ * Test set up.
+ *
+ * @throws NoSuchAlgorithmException
+ * @throws KeyException
+ */
@BeforeMethod
public void setUp() throws NoSuchAlgorithmException, KeyException {
encURI = EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128;
@@ -92,12 +98,17 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
decParams.setDataKeyInfoCredentialResolver(keyResolver);
prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getInboundMessageContext().getSubcontext(
- SecurityParametersContext.class, true).setDecryptionParameters(decParams);
+ prc.ensureInboundMessageContext().ensureSubcontext(
+ SecurityParametersContext.class).setDecryptionParameters(decParams);
action = new DecryptNameIDs();
}
+ /**
+ * Test with no message.
+ *
+ * @throws ComponentInitializationException
+ */
@Test
public void testNoMessage() throws ComponentInitializationException {
action.initialize();
@@ -115,8 +126,8 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testEncryptedNameIDNoParams() throws EncryptionException, ComponentInitializationException {
final AuthnRequest authnRequest = SAML2ActionTestingSupport.buildAuthnRequest();
- prc.getInboundMessageContext().setMessage(authnRequest);
- final Subject subject = subjectBuilder.buildObject();
+ prc.ensureInboundMessageContext().setMessage(authnRequest);
+ Subject subject = subjectBuilder.buildObject();
authnRequest.setSubject(subject);
final NameID nameId = nameIdBuilder.buildObject();
@@ -128,11 +139,14 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
action.initialize();
- prc.getInboundMessageContext().removeSubcontext(SecurityParametersContext.class);
+ prc.ensureInboundMessageContext().removeSubcontext(SecurityParametersContext.class);
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.DECRYPT_NAMEID_FAILED);
- Assert.assertNull(authnRequest.getSubject().getNameID());
+
+ subject = ((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getSubject();
+ assert subject != null;
+ Assert.assertNull(subject.getNameID());
action = new DecryptNameIDs();
action.setErrorFatal(false);
@@ -140,7 +154,10 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNull(authnRequest.getSubject().getNameID());
+
+ subject = ((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getSubject();
+ assert subject != null;
+ Assert.assertNull(subject.getNameID());
}
@@ -153,11 +170,11 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testEncryptedNameID() throws EncryptionException, ComponentInitializationException {
final AuthnRequest authnRequest = SAML2ActionTestingSupport.buildAuthnRequest();
- prc.getInboundMessageContext().setMessage(authnRequest);
- final Subject subject = subjectBuilder.buildObject();
+ prc.ensureInboundMessageContext().setMessage(authnRequest);
+ Subject subject = subjectBuilder.buildObject();
authnRequest.setSubject(subject);
- final NameID nameId = nameIdBuilder.buildObject();
+ NameID nameId = nameIdBuilder.buildObject();
nameId.setFormat(NameID.TRANSIENT);
nameId.setValue("foo");
@@ -168,9 +185,12 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNotNull(authnRequest.getSubject().getNameID());
- Assert.assertEquals(authnRequest.getSubject().getNameID().getValue(), "foo");
- Assert.assertEquals(authnRequest.getSubject().getNameID().getFormat(), NameID.TRANSIENT);
+ subject = ((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getSubject();
+ assert subject != null;
+ nameId = subject.getNameID();
+ assert nameId != null;
+ Assert.assertEquals(nameId.getValue(), "foo");
+ Assert.assertEquals(nameId.getFormat(), NameID.TRANSIENT);
}
/**
@@ -181,8 +201,8 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testWrongKeyFatal() throws Exception {
final AuthnRequest authnRequest = SAML2ActionTestingSupport.buildAuthnRequest();
- prc.getInboundMessageContext().setMessage(authnRequest);
- final Subject subject = subjectBuilder.buildObject();
+ prc.ensureInboundMessageContext().setMessage(authnRequest);
+ Subject subject = subjectBuilder.buildObject();
authnRequest.setSubject(subject);
final NameID nameId = nameIdBuilder.buildObject();
@@ -194,15 +214,19 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
Credential encCred = AlgorithmSupport.generateSymmetricKeyAndCredential(encURI);
KeyInfoCredentialResolver badKeyResolver = new StaticKeyInfoCredentialResolver(encCred);
- prc.getInboundMessageContext().getSubcontext(
- SecurityParametersContext.class).getDecryptionParameters().setDataKeyInfoCredentialResolver(
- badKeyResolver);
+ final DecryptionParameters params = prc.ensureInboundMessageContext().ensureSubcontext(
+ SecurityParametersContext.class).getDecryptionParameters();
+ assert params != null;
+ params.setDataKeyInfoCredentialResolver(badKeyResolver);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.DECRYPT_NAMEID_FAILED);
- Assert.assertNull(authnRequest.getSubject().getNameID());
+
+ subject = ((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getSubject();
+ assert subject != null;
+ Assert.assertNull(subject.getNameID());
}
/**
@@ -213,8 +237,8 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testWrongKeyNonFatal() throws Exception {
final AuthnRequest authnRequest = SAML2ActionTestingSupport.buildAuthnRequest();
- prc.getInboundMessageContext().setMessage(authnRequest);
- final Subject subject = subjectBuilder.buildObject();
+ prc.ensureInboundMessageContext().setMessage(authnRequest);
+ Subject subject = subjectBuilder.buildObject();
authnRequest.setSubject(subject);
final NameID nameId = nameIdBuilder.buildObject();
@@ -226,16 +250,20 @@ public class DecryptNameIDsTest extends OpenSAMLInitBaseTestCase {
Credential encCred = AlgorithmSupport.generateSymmetricKeyAndCredential(encURI);
KeyInfoCredentialResolver badKeyResolver = new StaticKeyInfoCredentialResolver(encCred);
- prc.getInboundMessageContext().getSubcontext(
- SecurityParametersContext.class).getDecryptionParameters().setDataKeyInfoCredentialResolver(
- badKeyResolver);
+ final DecryptionParameters params = prc.ensureInboundMessageContext().ensureSubcontext(
+ SecurityParametersContext.class).getDecryptionParameters();
+ assert params != null;
+ params.setDataKeyInfoCredentialResolver(badKeyResolver);
action.setErrorFatal(false);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNull(authnRequest.getSubject().getNameID());
+
+ subject = ((AuthnRequest) prc.ensureInboundMessageContext().ensureMessage()).getSubject();
+ assert subject != null;
+ Assert.assertNull(subject.getNameID());
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java
index a8d403a78..43215622c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java
@@ -32,9 +32,12 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.algorithm.AlgorithmSupport;
+import org.opensaml.xmlsec.encryption.EncryptedData;
+import org.opensaml.xmlsec.encryption.EncryptionMethod;
import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.opensaml.xmlsec.keyinfo.impl.BasicKeyInfoGeneratorFactory;
+import org.opensaml.xmlsec.signature.KeyInfo;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -44,6 +47,7 @@ import com.google.common.base.Strings;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Unit test for {@link EncryptAssertions}. */
+ at SuppressWarnings("javadoc")
public class EncryptAssertionsTest extends OpenSAMLInitBaseTestCase {
private EncryptionParameters encParams;
@@ -67,7 +71,7 @@ public class EncryptAssertionsTest extends OpenSAMLInitBaseTestCase {
encParams.setKeyTransportKeyInfoGenerator(generator.newInstance());
prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getOutboundMessageContext().getSubcontext(EncryptionContext.class, true).setAssertionEncryptionParameters(encParams);
+ prc.ensureOutboundMessageContext().ensureSubcontext(EncryptionContext.class).setAssertionEncryptionParameters(encParams);
action = new EncryptAssertions();
}
@@ -79,7 +83,7 @@ public class EncryptAssertionsTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
}
@@ -87,7 +91,7 @@ public class EncryptAssertionsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testEncryptedAssertion() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
action.initialize();
@@ -99,21 +103,22 @@ public class EncryptAssertionsTest extends OpenSAMLInitBaseTestCase {
Assert.assertEquals(response.getEncryptedAssertions().size(), 2);
final EncryptedAssertion encTarget = response.getEncryptedAssertions().get(0);
-
- Assert.assertEquals(encTarget.getEncryptedData().getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
- Assert.assertEquals(encTarget.getEncryptedData().getEncryptionMethod().getAlgorithm(),
- EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
- Assert.assertNotNull(encTarget.getEncryptedData().getKeyInfo(), "KeyInfo");
- Assert.assertEquals(encTarget.getEncryptedData().getKeyInfo().getEncryptedKeys().size(), 1,
- "Number of EncryptedKeys");
- Assert.assertFalse(Strings.isNullOrEmpty(encTarget.getEncryptedData().getID()),
- "EncryptedData ID attribute was empty");
+ final EncryptedData encData = encTarget.getEncryptedData();
+ assert encData != null;
+ Assert.assertEquals(encData.getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
+ final EncryptionMethod method = encData.getEncryptionMethod();
+ assert method != null;
+ Assert.assertEquals(method.getAlgorithm(), EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
+ final KeyInfo keyInfo = encData.getKeyInfo();
+ assert keyInfo != null;
+ Assert.assertEquals(keyInfo.getEncryptedKeys().size(), 1, "Number of EncryptedKeys");
+ Assert.assertFalse(Strings.isNullOrEmpty(encData.getID()), "EncryptedData ID attribute was empty");
}
@Test
public void testFailure() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
action.initialize();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java
index 38fb50552..0b1726e9c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java
@@ -36,9 +36,12 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.algorithm.AlgorithmSupport;
+import org.opensaml.xmlsec.encryption.EncryptedData;
+import org.opensaml.xmlsec.encryption.EncryptionMethod;
import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.opensaml.xmlsec.keyinfo.impl.BasicKeyInfoGeneratorFactory;
+import org.opensaml.xmlsec.signature.KeyInfo;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
@@ -49,6 +52,7 @@ import com.google.common.base.Strings;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Unit test for {@link EncryptAttributes}. */
+ at SuppressWarnings("javadoc")
public class EncryptAttributesTest extends OpenSAMLInitBaseTestCase {
private SAMLObjectBuilder<Attribute> builder;
@@ -81,7 +85,7 @@ public class EncryptAttributesTest extends OpenSAMLInitBaseTestCase {
encParams.setKeyTransportKeyInfoGenerator(generator.newInstance());
prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getOutboundMessageContext().getSubcontext(EncryptionContext.class, true).setAttributeEncryptionParameters(encParams);
+ prc.ensureOutboundMessageContext().ensureSubcontext(EncryptionContext.class).setAttributeEncryptionParameters(encParams);
action = new EncryptAttributes();
}
@@ -93,7 +97,7 @@ public class EncryptAttributesTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
}
@@ -101,7 +105,7 @@ public class EncryptAttributesTest extends OpenSAMLInitBaseTestCase {
@Test
public void testEncryptedAttributes() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
final AttributeStatement statement = SAML2ActionTestingSupport.buildAttributeStatement();
response.getAssertions().get(0).getAttributeStatements().add(statement);
@@ -118,20 +122,22 @@ public class EncryptAttributesTest extends OpenSAMLInitBaseTestCase {
final EncryptedAttribute encTarget = statement.getEncryptedAttributes().get(0);
- Assert.assertEquals(encTarget.getEncryptedData().getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
- Assert.assertEquals(encTarget.getEncryptedData().getEncryptionMethod().getAlgorithm(),
- EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
- Assert.assertNotNull(encTarget.getEncryptedData().getKeyInfo(), "KeyInfo");
- Assert.assertEquals(encTarget.getEncryptedData().getKeyInfo().getEncryptedKeys().size(), 1,
- "Number of EncryptedKeys");
- Assert.assertFalse(Strings.isNullOrEmpty(encTarget.getEncryptedData().getID()),
- "EncryptedData ID attribute was empty");
+ final EncryptedData encData = encTarget.getEncryptedData();
+ assert encData != null;
+ Assert.assertEquals(encData.getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
+ final EncryptionMethod method = encData.getEncryptionMethod();
+ assert method != null;
+ Assert.assertEquals(method.getAlgorithm(), EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
+ final KeyInfo keyInfo = encData.getKeyInfo();
+ assert keyInfo != null;
+ Assert.assertEquals(keyInfo.getEncryptedKeys().size(), 1, "Number of EncryptedKeys");
+ Assert.assertFalse(Strings.isNullOrEmpty(encData.getID()), "EncryptedData ID attribute was empty");
}
@Test
public void testFailure() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
final AttributeStatement statement = SAML2ActionTestingSupport.buildAttributeStatement();
response.getAssertions().get(0).getAttributeStatements().add(statement);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java
index d526f27d9..4d78fad34 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java
@@ -26,15 +26,20 @@ import org.opensaml.profile.action.EventIds;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.testing.ActionTestingSupport;
import org.opensaml.profile.testing.RequestContextBuilder;
+import org.opensaml.saml.saml2.core.Assertion;
import org.opensaml.saml.saml2.core.EncryptedID;
import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.algorithm.AlgorithmSupport;
+import org.opensaml.xmlsec.encryption.EncryptedData;
+import org.opensaml.xmlsec.encryption.EncryptionMethod;
import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.opensaml.xmlsec.keyinfo.impl.BasicKeyInfoGeneratorFactory;
+import org.opensaml.xmlsec.signature.KeyInfo;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -44,6 +49,7 @@ import com.google.common.base.Strings;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Unit test for {@link EncryptNameIDs}. */
+ at SuppressWarnings("javadoc")
public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
private EncryptionParameters encParams;
@@ -67,7 +73,7 @@ public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
encParams.setKeyTransportKeyInfoGenerator(generator.newInstance());
prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getOutboundMessageContext().getSubcontext(EncryptionContext.class, true).setIdentifierEncryptionParameters(encParams);
+ prc.ensureOutboundMessageContext().ensureSubcontext(EncryptionContext.class).setIdentifierEncryptionParameters(encParams);
action = new EncryptNameIDs();
}
@@ -79,7 +85,7 @@ public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
+ prc.ensureOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
}
@@ -87,7 +93,7 @@ public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
@Test
public void testEncryptedNameID() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().get(0).setSubject(SAML2ActionTestingSupport.buildSubject("morpheus"));
action.initialize();
@@ -96,25 +102,32 @@ public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
ActionTestingSupport.assertProceedEvent(prc);
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNull(response.getAssertions().get(0).getSubject().getNameID());
- Assert.assertNotNull(response.getAssertions().get(0).getSubject().getEncryptedID());
+ final Assertion assertion = response.getAssertions().get(0);
+ assert assertion != null;
+ final Subject subject = assertion.getSubject();
+ assert subject != null;
+ Assert.assertNull(subject.getNameID());
+ Assert.assertNotNull(subject.getEncryptedID());
- final EncryptedID encTarget = response.getAssertions().get(0).getSubject().getEncryptedID();
+ final EncryptedID encTarget = subject.getEncryptedID();
+ assert encTarget != null;
- Assert.assertEquals(encTarget.getEncryptedData().getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
- Assert.assertEquals(encTarget.getEncryptedData().getEncryptionMethod().getAlgorithm(),
- EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
- Assert.assertNotNull(encTarget.getEncryptedData().getKeyInfo(), "KeyInfo");
- Assert.assertEquals(encTarget.getEncryptedData().getKeyInfo().getEncryptedKeys().size(), 1,
- "Number of EncryptedKeys");
- Assert.assertFalse(Strings.isNullOrEmpty(encTarget.getEncryptedData().getID()),
- "EncryptedData ID attribute was empty");
+ final EncryptedData encData = encTarget.getEncryptedData();
+ assert encData != null;
+ Assert.assertEquals(encData.getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
+ final EncryptionMethod method = encData.getEncryptionMethod();
+ assert method != null;
+ Assert.assertEquals(method.getAlgorithm(), EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
+ final KeyInfo keyInfo = encData.getKeyInfo();
+ assert keyInfo != null;
+ Assert.assertEquals(keyInfo.getEncryptedKeys().size(), 1, "Number of EncryptedKeys");
+ Assert.assertFalse(Strings.isNullOrEmpty(encData.getID()), "EncryptedData ID attribute was empty");
}
@Test
public void testFailure() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().get(0).setSubject(SAML2ActionTestingSupport.buildSubject("morpheus"));
@@ -126,8 +139,12 @@ public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
ActionTestingSupport.assertEvent(prc, EventIds.UNABLE_TO_ENCRYPT);
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(response.getAssertions().get(0).getSubject().getNameID());
- Assert.assertNull(response.getAssertions().get(0).getSubject().getEncryptedID());
+ final Assertion assertion = response.getAssertions().get(0);
+ assert assertion != null;
+ final Subject subject = assertion.getSubject();
+ assert subject != null;
+ Assert.assertNotNull(subject.getNameID());
+ Assert.assertNull(subject.getEncryptedID());
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java
index 613b003cc..78ef9b029 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java
@@ -38,6 +38,7 @@ import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.opensaml.xmlsec.EncryptionParameters;
/** Unit test for {@link PopulateECPContext}. */
+ at SuppressWarnings("javadoc")
public class PopulateECPContextTest extends OpenSAMLInitBaseTestCase {
private ProfileRequestContext prc;
@@ -58,7 +59,7 @@ public class PopulateECPContextTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final ECPContext ecp = prc.getOutboundMessageContext().getSubcontext(ECPContext.class);
+ final ECPContext ecp = prc.ensureOutboundMessageContext().getSubcontext(ECPContext.class);
if (ecp != null) {
Assert.assertFalse(ecp.isRequestAuthenticated());
Assert.assertNull(ecp.getSessionKey());
@@ -68,14 +69,14 @@ public class PopulateECPContextTest extends OpenSAMLInitBaseTestCase {
@Test
public void testAuthenticated() throws ComponentInitializationException {
- prc.getInboundMessageContext().getSubcontext(SAMLBindingContext.class, true).setHasBindingSignature(true);
+ prc.ensureInboundMessageContext().ensureSubcontext(SAMLBindingContext.class).setHasBindingSignature(true);
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final ECPContext ecp = prc.getOutboundMessageContext().getSubcontext(ECPContext.class);
+ final ECPContext ecp = prc.ensureOutboundMessageContext().ensureSubcontext(ECPContext.class);
Assert.assertTrue(ecp.isRequestAuthenticated());
Assert.assertNull(ecp.getSessionKey());
}
@@ -89,22 +90,22 @@ public class PopulateECPContextTest extends OpenSAMLInitBaseTestCase {
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final ECPContext ecp = prc.getOutboundMessageContext().getSubcontext(ECPContext.class);
+ final ECPContext ecp = prc.ensureOutboundMessageContext().ensureSubcontext(ECPContext.class);
Assert.assertNotNull(ecp.getSessionKey());
}
@Test
public void testEncrypted() throws ComponentInitializationException {
- prc.getOutboundMessageContext().getSubcontext(
- EncryptionContext.class, true).setAssertionEncryptionParameters(new EncryptionParameters());
+ prc.ensureOutboundMessageContext().ensureSubcontext(
+ EncryptionContext.class).setAssertionEncryptionParameters(new EncryptionParameters());
action.initialize();
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- final ECPContext ecp = prc.getOutboundMessageContext().getSubcontext(ECPContext.class);
+ final ECPContext ecp = prc.ensureOutboundMessageContext().ensureSubcontext(ECPContext.class);
Assert.assertNotNull(ecp.getSessionKey());
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
index 7a340846b..73bcaea92 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
@@ -39,6 +39,7 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/** {@link ResolveArtifact} unit test. */
+ at SuppressWarnings("javadoc")
public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
private BasicSAMLArtifactMap artifactMap;
@@ -50,7 +51,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
@BeforeMethod public void setUp() throws ComponentInitializationException {
prc = new RequestContextBuilder().setOutboundMessage(
SAML2ActionTestingSupport.buildArtifactResponse()).buildProfileRequestContext();
- prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).setEntityId("SP");
+ prc.ensureInboundMessageContext().ensureSubcontext(SAMLPeerEntityContext.class).setEntityId("SP");
artifactMap = new BasicSAMLArtifactMap();
artifactMap.initialize();
@@ -67,55 +68,55 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
}
@Test public void testNoArtifacts() {
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve(null));
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve(null));
action.execute(prc);
ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
}
@Test public void testNoResponse() {
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
- prc.getOutboundMessageContext().setMessage(null);
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
+ prc.ensureOutboundMessageContext().setMessage(null);
action.execute(prc);
ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
}
@Test public void testMissingArtifacts() throws IOException {
artifactMap.put("bar", "SP", "IdP", SAML2ActionTestingSupport.buildResponse());
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
- Assert.assertNull(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage());
+ Assert.assertNull(((ArtifactResponse) prc.ensureOutboundMessageContext().ensureMessage()).getMessage());
}
@Test public void testWrongSP() throws IOException {
artifactMap.put("foo", "SP2", "IdP", SAML2ActionTestingSupport.buildResponse());
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
- Assert.assertNull(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage());
+ Assert.assertNull(((ArtifactResponse) prc.ensureOutboundMessageContext().ensureMessage()).getMessage());
Assert.assertNull(artifactMap.get("foo"));
}
@Test public void testWrongIdP() throws IOException {
artifactMap.put("foo", "SP", "IdP2", SAML2ActionTestingSupport.buildResponse());
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
action.execute(prc);
ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
- Assert.assertNull(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage());
+ Assert.assertNull(((ArtifactResponse) prc.ensureOutboundMessageContext().ensureMessage()).getMessage());
Assert.assertNull(artifactMap.get("foo"));
}
@Test public void testOne() throws IOException {
artifactMap.put("foo", "SP", "IdP", SAML2ActionTestingSupport.buildResponse());
- prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
+ prc.ensureInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildArtifactResolve("foo"));
action.execute(prc);
ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertTrue(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage() instanceof Response);
+ Assert.assertTrue(((ArtifactResponse) prc.ensureOutboundMessageContext().ensureMessage()).getMessage() instanceof Response);
Assert.assertNull(artifactMap.get("foo"));
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
index 83ef0843c..659bb9686 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
@@ -19,11 +19,12 @@ package org.opensaml.saml.saml2.profile.impl;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
-import java.util.Collections;
import java.util.List;
+import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.logic.PredicateSupport;
import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
import org.opensaml.core.xml.io.MarshallingException;
@@ -33,21 +34,25 @@ import org.opensaml.profile.testing.ActionTestingSupport;
import org.opensaml.profile.testing.RequestContextBuilder;
import org.opensaml.saml.saml2.core.EncryptedID;
import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.profile.context.EncryptionContext;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.opensaml.xmlsec.EncryptionParameters;
import org.opensaml.xmlsec.algorithm.AlgorithmSupport;
+import org.opensaml.xmlsec.encryption.EncryptedData;
+import org.opensaml.xmlsec.encryption.EncryptionMethod;
import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
import org.opensaml.xmlsec.encryption.support.EncryptionException;
import org.opensaml.xmlsec.keyinfo.impl.BasicKeyInfoGeneratorFactory;
+import org.opensaml.xmlsec.signature.KeyInfo;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import com.google.common.base.Predicates;
import com.google.common.base.Strings;
/** Unit test for self-encryption support in {@link AbstractEncryptAction} (using {@link EncryptNameIDs} as the concrete impl.) */
+ at SuppressWarnings("javadoc")
public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
private EncryptionParameters encParams, encParamsSelf1, encParamsSelf2;
@@ -87,7 +92,7 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
encParamsSelf2.setKeyTransportKeyInfoGenerator(generator.newInstance());
prc = new RequestContextBuilder().buildProfileRequestContext();
- prc.getOutboundMessageContext().getSubcontext(EncryptionContext.class, true).setIdentifierEncryptionParameters(encParams);
+ prc.ensureOutboundMessageContext().ensureSubcontext(EncryptionContext.class).setIdentifierEncryptionParameters(encParams);
action = new EncryptNameIDs();
}
@@ -95,11 +100,11 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
@Test
public void testSelfEncryption() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().get(0).setSubject(SAML2ActionTestingSupport.buildSubject("morpheus"));
- action.setEncryptToSelf(Predicates.<ProfileRequestContext>alwaysTrue());
+ action.setEncryptToSelf(PredicateSupport.alwaysTrue());
action.setEncryptToSelfParametersStrategy(FunctionSupport.constant(List.of(encParamsSelf1, encParamsSelf2)));
action.setSelfRecipientLookupStrategy(FunctionSupport.constant("https://idp.example.org"));
@@ -109,30 +114,34 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
ActionTestingSupport.assertProceedEvent(prc);
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNull(response.getAssertions().get(0).getSubject().getNameID());
- Assert.assertNotNull(response.getAssertions().get(0).getSubject().getEncryptedID());
+ final Subject subject = response.getAssertions().get(0).getSubject();
+ assert subject != null;
+ Assert.assertNull(subject.getNameID());
- final EncryptedID encTarget = response.getAssertions().get(0).getSubject().getEncryptedID();
+ final EncryptedID encTarget = subject.getEncryptedID();
+ assert encTarget != null;
- Assert.assertEquals(encTarget.getEncryptedData().getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
- Assert.assertEquals(encTarget.getEncryptedData().getEncryptionMethod().getAlgorithm(),
- EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
- Assert.assertNotNull(encTarget.getEncryptedData().getKeyInfo(), "KeyInfo");
- Assert.assertEquals(encTarget.getEncryptedData().getKeyInfo().getEncryptedKeys().size(), 3,
- "Number of EncryptedKeys");
- Assert.assertFalse(Strings.isNullOrEmpty(encTarget.getEncryptedData().getID()),
- "EncryptedData ID attribute was empty");
+ final EncryptedData encData = encTarget.getEncryptedData();
+ assert encData != null;
+ Assert.assertEquals(encData.getType(), EncryptionConstants.TYPE_ELEMENT, "Type attribute");
+ final EncryptionMethod method = encData.getEncryptionMethod();
+ assert method != null;
+ Assert.assertEquals(method.getAlgorithm(), EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128, "Algorithm attribute");
+ final KeyInfo keyInfo = encData.getKeyInfo();
+ assert keyInfo != null;
+ Assert.assertEquals(keyInfo.getEncryptedKeys().size(), 3, "Number of EncryptedKeys");
+ Assert.assertFalse(Strings.isNullOrEmpty(encData.getID()), "EncryptedData ID attribute was empty");
}
@Test
public void testFailureNoSelfEncryptionCreds() throws EncryptionException, ComponentInitializationException, MarshallingException {
final Response response = SAML2ActionTestingSupport.buildResponse();
- prc.getOutboundMessageContext().setMessage(response);
+ prc.ensureOutboundMessageContext().setMessage(response);
response.getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
response.getAssertions().get(0).setSubject(SAML2ActionTestingSupport.buildSubject("morpheus"));
- action.setEncryptToSelf(Predicates.<ProfileRequestContext>alwaysTrue());
- action.setEncryptToSelfParametersStrategy(FunctionSupport.constant(Collections.emptyList()));
+ action.setEncryptToSelf(PredicateSupport.alwaysTrue());
+ action.setEncryptToSelfParametersStrategy(FunctionSupport.constant(CollectionSupport.emptyList()));
action.setSelfRecipientLookupStrategy(FunctionSupport.constant("https://idp.example.org"));
action.initialize();
@@ -141,8 +150,10 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
ActionTestingSupport.assertEvent(prc, EventIds.UNABLE_TO_ENCRYPT);
Assert.assertEquals(response.getAssertions().size(), 1);
- Assert.assertNotNull(response.getAssertions().get(0).getSubject().getNameID());
- Assert.assertNull(response.getAssertions().get(0).getSubject().getEncryptedID());
+ final Subject subject = response.getAssertions().get(0).getSubject();
+ assert subject != null;
+ Assert.assertNotNull(subject.getNameID());
+ Assert.assertNull(subject.getEncryptedID());
}
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertionsTest.java
index 1b4aa9706..09218a25b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertionsTest.java
@@ -43,6 +43,7 @@ import org.testng.annotations.Test;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.testing.ConstantSupplier;
+ at SuppressWarnings("javadoc")
public class ValidateAssertionsTest extends OpenSAMLInitBaseTestCase {
private ValidateAssertions action;
@@ -276,36 +277,12 @@ public class ValidateAssertionsTest extends OpenSAMLInitBaseTestCase {
checkObjectMetadataEmpty(samlResponse.getAssertions().get(0));
}
- @Test(expectedExceptions = ComponentInitializationException.class)
- public void testNoAssertionResolver() throws ComponentInitializationException {
- action.setAssertionResolver(null);
-
- action.initialize();
- }
-
- @Test(expectedExceptions = ComponentInitializationException.class)
- public void testNoValidators() throws ComponentInitializationException {
- action.setAssertionValidator(null);
- action.setAssertionValidatorLookup(null);
-
- action.initialize();
- }
-
@Test(expectedExceptions = ComponentInitializationException.class)
public void testNoHttpRequest() throws ComponentInitializationException {
action.setHttpServletRequestSupplier(null);
action.initialize();
}
-
- @Test(expectedExceptions = ComponentInitializationException.class)
- public void testNoContextBuilder() throws ComponentInitializationException {
- action.setValidationContextBuilder(null);
-
- action.initialize();
- }
-
-
// Helpers
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
index 6cdaf078b..8c6f8943e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
@@ -24,6 +24,7 @@ import java.security.cert.X509Certificate;
import java.util.Set;
import java.util.function.Function;
+import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opensaml.core.criterion.EntityIdCriterion;
@@ -50,9 +51,7 @@ import jakarta.servlet.http.HttpServletRequest;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.resolver.CriteriaSet;
-/**
- *
- */
+ at SuppressWarnings("javadoc")
public class DefaultSAML20AssertionValidationContextBuilderTest extends XMLObjectBaseTestCase {
private DefaultSAML20AssertionValidationContextBuilder builder;
@@ -74,19 +73,20 @@ public class DefaultSAML20AssertionValidationContextBuilderTest extends XMLObjec
@Test
public void testDefaults() {
- ValidationContext context = builder.apply(input);
-
- Assert.assertNotNull(context);
+ final ValidationContext context = builder.apply(input);
+ assert context != null;
// Signature
Assert.assertEquals(context.getStaticParameters().get(SAML2AssertionValidationParameters.SIGNATURE_REQUIRED), Boolean.TRUE);
CriteriaSet signatureCriteriaSet = (CriteriaSet) context.getStaticParameters().get(SAML2AssertionValidationParameters.SIGNATURE_VALIDATION_CRITERIA_SET);
Assert.assertEquals(signatureCriteriaSet.size(), 2);
- Assert.assertTrue(signatureCriteriaSet.contains(EntityIdCriterion.class));
- Assert.assertEquals(signatureCriteriaSet.get(EntityIdCriterion.class).getEntityId(), issuerEntityID);
- Assert.assertTrue(signatureCriteriaSet.contains(UsageCriterion.class));
- Assert.assertEquals(signatureCriteriaSet.get(UsageCriterion.class).getUsage(), UsageType.SIGNING);
+ final EntityIdCriterion entityCrit = signatureCriteriaSet.get(EntityIdCriterion.class);
+ assert entityCrit != null;
+ Assert.assertEquals(entityCrit.getEntityId(), issuerEntityID);
+ final UsageCriterion usageCrit = signatureCriteriaSet.get(UsageCriterion.class);
+ assert usageCrit != null;
+ Assert.assertEquals(usageCrit.getUsage(), UsageType.SIGNING);
// Subject confirmation
Assert.assertEquals(context.getStaticParameters().get(SAML2AssertionValidationParameters.SC_HOK_PRESENTER_CERT), clientTLSCert);
@@ -118,23 +118,26 @@ public class DefaultSAML20AssertionValidationContextBuilderTest extends XMLObjec
});
- ValidationContext context = builder.apply(input);
-
- Assert.assertNotNull(context);
+ final ValidationContext context = builder.apply(input);
+ assert context != null;
// Signature
Assert.assertEquals(context.getStaticParameters().get(SAML2AssertionValidationParameters.SIGNATURE_REQUIRED), Boolean.FALSE);
CriteriaSet signatureCriteriaSet = (CriteriaSet) context.getStaticParameters().get(SAML2AssertionValidationParameters.SIGNATURE_VALIDATION_CRITERIA_SET);
Assert.assertEquals(signatureCriteriaSet.size(), 4);
- Assert.assertTrue(signatureCriteriaSet.contains(EntityIdCriterion.class));
- Assert.assertEquals(signatureCriteriaSet.get(EntityIdCriterion.class).getEntityId(), issuerEntityID);
- Assert.assertTrue(signatureCriteriaSet.contains(UsageCriterion.class));
- Assert.assertEquals(signatureCriteriaSet.get(UsageCriterion.class).getUsage(), UsageType.SIGNING);
- Assert.assertTrue(signatureCriteriaSet.contains(EntityRoleCriterion.class));
- Assert.assertEquals(signatureCriteriaSet.get(EntityRoleCriterion.class).getRole(), IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
- Assert.assertTrue(signatureCriteriaSet.contains(ProtocolCriterion.class));
- Assert.assertEquals(signatureCriteriaSet.get(ProtocolCriterion.class).getProtocol(), SAMLConstants.SAML20P_NS);
+ final EntityIdCriterion entityCrit = signatureCriteriaSet.get(EntityIdCriterion.class);
+ assert entityCrit != null;
+ Assert.assertEquals(entityCrit.getEntityId(), issuerEntityID);
+ final UsageCriterion usageCrit = signatureCriteriaSet.get(UsageCriterion.class);
+ assert usageCrit != null;
+ Assert.assertEquals(usageCrit.getUsage(), UsageType.SIGNING);
+ final EntityRoleCriterion roleCrit = signatureCriteriaSet.get(EntityRoleCriterion.class);
+ assert roleCrit != null;
+ Assert.assertEquals(roleCrit.getRole(), IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
+ final ProtocolCriterion protocolCrit = signatureCriteriaSet.get(ProtocolCriterion.class);
+ assert protocolCrit != null;
+ Assert.assertEquals(protocolCrit.getProtocol(), SAMLConstants.SAML20P_NS);
// Subject confirmation
Assert.assertEquals(context.getStaticParameters().get(SAML2AssertionValidationParameters.SC_HOK_PRESENTER_CERT), clientTLSCert);
@@ -152,13 +155,13 @@ public class DefaultSAML20AssertionValidationContextBuilderTest extends XMLObjec
}
- private MessageContext buildMessageContext() {
+ @Nonnull private MessageContext buildMessageContext() {
final MessageContext messageContext = new MessageContext();
- messageContext.getSubcontext(SAMLSelfEntityContext.class, true).setEntityId(rpEntityID);
+ messageContext.ensureSubcontext(SAMLSelfEntityContext.class).setEntityId(rpEntityID);
return messageContext;
}
- private HttpServletRequest buildHttpServletRequest() throws URISyntaxException, CertificateException {
+ @Nonnull private HttpServletRequest buildHttpServletRequest() throws URISyntaxException, CertificateException {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setScheme("https");
request.setServerName("rp.example.com");
@@ -173,11 +176,11 @@ public class DefaultSAML20AssertionValidationContextBuilderTest extends XMLObjec
return request;
}
- private Assertion buildAssertion() {
+ @Nonnull private Assertion buildAssertion() {
Assertion assertion = SAML2ActionTestingSupport.buildAssertion();
assertion.setSubject(SAML2ActionTestingSupport.buildSubject("barney"));
assertion.setIssuer(SAML2ActionTestingSupport.buildIssuer(issuerEntityID));
return assertion;
}
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
index 58ff2b8c9..0aac53519 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
@@ -37,6 +37,7 @@ import org.opensaml.saml.common.messaging.context.SAMLSelfEntityContext;
import org.opensaml.saml.saml2.assertion.SAML20AssertionValidator;
import org.opensaml.saml.saml2.assertion.SAML2AssertionValidationParameters;
import org.opensaml.saml.saml2.core.Assertion;
+import org.opensaml.saml.saml2.core.Subject;
import org.opensaml.saml.saml2.core.SubjectConfirmation;
import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
import org.opensaml.saml.saml2.wssecurity.SAML20AssertionToken;
@@ -96,8 +97,8 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
handler.invoke(messageContext);
- WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
- Assert.assertNotNull(securityContext);
+ final WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
+ assert securityContext != null;
Assert.assertEquals(securityContext.getTokens().size(), 1);
Assert.assertTrue(securityContext.getTokens().get(0) instanceof SAML20AssertionToken);
SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
@@ -114,10 +115,12 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
try {
handler.invoke(messageContext);
Assert.fail("Assertion validation should have failed");
- } catch (MessageHandlerException e) {
- Fault fault = messageContext.getSubcontext(SOAP11Context.class, true).getFault();
- Assert.assertNotNull(fault);
- Assert.assertEquals(fault.getCode().getValue(), WSSecurityConstants.SOAP_FAULT_INVALID_SECURITY_TOKEN);
+ } catch (final MessageHandlerException e) {
+ Fault fault = messageContext.ensureSubcontext(SOAP11Context.class).getFault();
+ assert fault != null;
+ final FaultCode code = fault.getCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), WSSecurityConstants.SOAP_FAULT_INVALID_SECURITY_TOKEN);
}
}
@@ -129,10 +132,12 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
try {
handler.invoke(messageContext);
Assert.fail("Assertion validation should have failed");
- } catch (MessageHandlerException e) {
- Fault fault = messageContext.getSubcontext(SOAP11Context.class, true).getFault();
- Assert.assertNotNull(fault);
- Assert.assertEquals(fault.getCode().getValue(), WSSecurityConstants.SOAP_FAULT_INVALID_SECURITY_TOKEN);
+ } catch (final MessageHandlerException e) {
+ Fault fault = messageContext.ensureSubcontext(SOAP11Context.class).getFault();
+ assert fault != null;
+ final FaultCode code = fault.getCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), WSSecurityConstants.SOAP_FAULT_INVALID_SECURITY_TOKEN);
}
}
@@ -150,11 +155,11 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
handler.invoke(messageContext);
- WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
- Assert.assertNotNull(securityContext);
+ final WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
+ assert securityContext != null;
Assert.assertEquals(securityContext.getTokens().size(), 1);
Assert.assertTrue(securityContext.getTokens().get(0) instanceof SAML20AssertionToken);
- SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
+ final SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
Assert.assertSame(token.getWrappedToken(), assertion);
Assert.assertEquals(token.getValidationStatus(), ValidationStatus.VALID);
Assert.assertSame(token.getSubjectConfirmation(), subjectConfirmation);
@@ -168,11 +173,11 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
handler.invoke(messageContext);
- WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
- Assert.assertNotNull(securityContext);
+ final WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
+ assert securityContext != null;
Assert.assertEquals(securityContext.getTokens().size(), 1);
Assert.assertTrue(securityContext.getTokens().get(0) instanceof SAML20AssertionToken);
- SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
+ final SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
Assert.assertSame(token.getWrappedToken(), assertion);
Assert.assertEquals(token.getValidationStatus(), ValidationStatus.INVALID);
Assert.assertSame(token.getSubjectConfirmation(), null);
@@ -186,11 +191,11 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
handler.invoke(messageContext);
- WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
- Assert.assertNotNull(securityContext);
+ final WSSecurityContext securityContext = messageContext.getSubcontext(WSSecurityContext.class);
+ assert securityContext != null;
Assert.assertEquals(securityContext.getTokens().size(), 1);
Assert.assertTrue(securityContext.getTokens().get(0) instanceof SAML20AssertionToken);
- SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
+ final SAML20AssertionToken token = (SAML20AssertionToken) securityContext.getTokens().get(0);
Assert.assertSame(token.getWrappedToken(), assertion);
Assert.assertEquals(token.getValidationStatus(), ValidationStatus.INDETERMINATE);
Assert.assertSame(token.getSubjectConfirmation(), null);
@@ -204,10 +209,12 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
try {
handler.invoke(messageContext);
Assert.fail("Assertion validation should have failed");
- } catch (MessageHandlerException e) {
- Fault fault = messageContext.getSubcontext(SOAP11Context.class, true).getFault();
- Assert.assertNotNull(fault);
- Assert.assertEquals(fault.getCode().getValue(), FaultCode.SERVER);
+ } catch (final MessageHandlerException e) {
+ Fault fault = messageContext.ensureSubcontext(SOAP11Context.class).getFault();
+ assert fault != null;
+ final FaultCode code = fault.getCode();
+ assert code != null;
+ Assert.assertEquals(code.getValue(), FaultCode.SERVER);
}
}
@@ -226,7 +233,13 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
@Test
public void testNoAssertions() throws ComponentInitializationException, MessageHandlerException {
- messageContext.getSubcontext(SOAP11Context.class).getEnvelope().getHeader().getUnknownXMLObjects().clear();
+ final Envelope env = messageContext.ensureSubcontext(SOAP11Context.class).getEnvelope();
+ if (env != null) {
+ final Header header = env.getHeader();
+ if (header != null) {
+ header.getUnknownXMLObjects().clear();
+ }
+ }
handler.setAssertionValidator(new MockAssertionValidator(ValidationResult.VALID, subjectConfirmation, false));
handler.initialize();
@@ -239,7 +252,10 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
@Test
public void testNoHeader() throws ComponentInitializationException, MessageHandlerException {
- messageContext.getSubcontext(SOAP11Context.class).getEnvelope().setHeader(null);
+ final Envelope env = messageContext.ensureSubcontext(SOAP11Context.class).getEnvelope();
+ if (env != null) {
+ env.setHeader(null);
+ }
handler.setAssertionValidator(new MockAssertionValidator(ValidationResult.VALID, subjectConfirmation, false));
handler.initialize();
@@ -250,13 +266,6 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
Assert.assertNull(securityContext);
}
- @Test(expectedExceptions=ComponentInitializationException.class)
- public void testNoValidatorOrLookup() throws ComponentInitializationException, MessageHandlerException {
- handler.setAssertionValidator(null);
- handler.setAssertionValidatorLookup(null);
- handler.initialize();
- }
-
@Test(expectedExceptions=MessageHandlerException.class)
public void testNoValidatorAndFailedLookup() throws ComponentInitializationException, MessageHandlerException {
handler.setAssertionValidator(null);
@@ -294,25 +303,27 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
// Helper classes and methods
//
- private MessageContext buildMessageContext() {
+ @Nonnull private MessageContext buildMessageContext() {
final MessageContext mc = new MessageContext();
- mc.getSubcontext(SAMLSelfEntityContext.class, true).setEntityId(rpEntityID);
- XMLObject payload = buildXMLObject(simpleXMLObjectQName);
+ mc.ensureSubcontext(SAMLSelfEntityContext.class).setEntityId(rpEntityID);
+ final XMLObject payload = buildXMLObject(simpleXMLObjectQName);
mc.setMessage(payload);
if (assertion == null) {
throw new RuntimeException("Assertion wasn't built");
}
- Envelope envelope = buildXMLObject(Envelope.DEFAULT_ELEMENT_NAME);
- envelope.setBody((Body)buildXMLObject(Body.DEFAULT_ELEMENT_NAME));
- envelope.getBody().getUnknownXMLObjects().add(payload);
- envelope.setHeader((Header)buildXMLObject(Header.DEFAULT_ELEMENT_NAME));
+ final Body body = buildXMLObject(Body.DEFAULT_ELEMENT_NAME);
+ body.getUnknownXMLObjects().add(payload);
+ final Envelope envelope = buildXMLObject(Envelope.DEFAULT_ELEMENT_NAME);
+ envelope.setBody(body);
+ final Header header = buildXMLObject(Header.DEFAULT_ELEMENT_NAME);
+ envelope.setHeader(header);
- Security security = buildXMLObject(Security.ELEMENT_NAME);
+ final Security security = buildXMLObject(Security.ELEMENT_NAME);
SOAPSupport.addSOAP11MustUnderstandAttribute(security, true);
security.getUnknownXMLObjects().add(assertion);
- envelope.getHeader().getUnknownXMLObjects().add(security);
+ header.getUnknownXMLObjects().add(security);
- mc.getSubcontext(SOAP11Context.class, true).setEnvelope(envelope);
+ mc.ensureSubcontext(SOAP11Context.class).setEnvelope(envelope);
return mc;
}
@@ -327,13 +338,14 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
return request;
}
- private Assertion buildAssertion() throws SecurityException, MarshallingException, SignatureException {
+ @Nonnull private Assertion buildAssertion() throws SecurityException, MarshallingException, SignatureException {
Assertion a = SAML2ActionTestingSupport.buildAssertion();
a.setIssuer(SAML2ActionTestingSupport.buildIssuer(issuerEntityID));
- a.setSubject(SAML2ActionTestingSupport.buildSubject("barney"));
+ final Subject subject = SAML2ActionTestingSupport.buildSubject("barney");
subjectConfirmation = buildXMLObject(SubjectConfirmation.DEFAULT_ELEMENT_NAME);
subjectConfirmation.setMethod(SubjectConfirmation.METHOD_BEARER);
- a.getSubject().getSubjectConfirmations().add(subjectConfirmation);
+ subject.getSubjectConfirmations().add(subjectConfirmation);
+ a.setSubject(subject);
a.getAuthnStatements().add(SAML2ActionTestingSupport.buildAuthnStatement());
return a;
}
@@ -344,7 +356,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
private boolean isThrowException;
private SubjectConfirmation confirmedSubjectConfirmation;
- public MockAssertionValidator(ValidationResult result, SubjectConfirmation confirmed, boolean throwException) {
+ public MockAssertionValidator(final ValidationResult result, final SubjectConfirmation confirmed, boolean throwException) {
super(null, null, null, null, null, null);
validationResult = result;
confirmedSubjectConfirmation = confirmed;
@@ -360,6 +372,10 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
if (confirmedSubjectConfirmation != null) {
context.getDynamicParameters().put(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION, confirmedSubjectConfirmation);
}
+
+ if (validationResult == null) {
+ throw new AssertionValidationException("Mock result was null");
+ }
return validationResult;
}
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list