[java-opensaml] 07/16: Refactor action PopulateSignatureValidationParameters.
Brent Putman
putmanb at georgetown.edu
Sun Dec 17 00:08:17 EST 2017
This is an automated email from the git hooks/post-receive script.
putmanb pushed a commit to branch master
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=72ffb0d781cbc42dc02f116142a724319486cba9
commit 72ffb0d781cbc42dc02f116142a724319486cba9
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Thu Sep 14 22:26:22 2017 -0400
Refactor action PopulateSignatureValidationParameters.
---
.../PopulateSignatureValidationParameters.java | 68 +++++++---------------
.../PopulateSignatureValidationParametersTest.java | 4 +-
opensaml-xmlsec-impl/pom.xml | 5 ++
...pulateSignatureValidationParametersHandler.java | 66 +++++++++------------
...teSignatureValidationParametersHandlerTest.java | 63 +++++++++-----------
5 files changed, 84 insertions(+), 122 deletions(-)
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
index 1de12d4..bc8182e 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
@@ -22,8 +22,8 @@ import java.util.List;
import javax.annotation.Nonnull;
-import org.opensaml.profile.action.AbstractProfileAction;
-import org.opensaml.profile.action.ActionSupport;
+import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.profile.action.AbstractHandlerDelegatingProfileAction;
import org.opensaml.profile.action.EventIds;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
@@ -32,31 +32,28 @@ import org.opensaml.xmlsec.SignatureValidationConfiguration;
import org.opensaml.xmlsec.SignatureValidationParameters;
import org.opensaml.xmlsec.SignatureValidationParametersResolver;
import org.opensaml.xmlsec.context.SecurityParametersContext;
-import org.opensaml.xmlsec.criterion.SignatureValidationConfigurationCriterion;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.xmlsec.messaging.impl.PopulateSignatureValidationParametersHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
import com.google.common.base.Functions;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
/**
* Action that resolves and populates {@link SignatureValidationParameters} on a {@link SecurityParametersContext}
* created/accessed via a lookup function, by default on the inbound message context.
*
* @event {@link EventIds#PROCEED_EVENT_ID}
- * @event {@link EventIds#INVALID_PROFILE_CTX}
- * @event {@link EventIds#INVALID_SEC_CFG}
+ * @event {@link EventIds#INVALID_MSG_CTX}
+ * @event {@link EventIds#MESSAGE_PROC_ERROR}
*/
-public class PopulateSignatureValidationParameters extends AbstractProfileAction {
+public class PopulateSignatureValidationParameters
+ extends AbstractHandlerDelegatingProfileAction<PopulateSignatureValidationParametersHandler> {
/** Class logger. */
@Nonnull private final Logger log = LoggerFactory.getLogger(PopulateSignatureValidationParameters.class);
@@ -75,6 +72,8 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
* Constructor.
*/
public PopulateSignatureValidationParameters() {
+ super(PopulateSignatureValidationParametersHandler.class, new InboundMessageContextLookup());
+
// Create context by default.
securityParametersContextLookupStrategy = Functions.compose(
new ChildContextLookup<>(SecurityParametersContext.class, true), new InboundMessageContextLookup());
@@ -133,41 +132,14 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
}
};
}
- }
-
-// Checkstyle: ReturnCount OFF
- /** {@inheritDoc} */
- @Override
- protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
-
- log.debug("{} Resolving SignatureValidationParameters for request", getLogPrefix());
-
- final List<SignatureValidationConfiguration> configs = configurationLookupStrategy.apply(profileRequestContext);
- if (configs == null || configs.isEmpty()) {
- log.error("{} No SignatureValidationConfiguration returned by lookup strategy", getLogPrefix());
- ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_SEC_CFG);
- return;
- }
- final SecurityParametersContext paramsCtx =
- securityParametersContextLookupStrategy.apply(profileRequestContext);
- if (paramsCtx == null) {
- log.debug("{} No SecurityParametersContext returned by lookup strategy", getLogPrefix());
- ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
- return;
- }
+ final PopulateSignatureValidationParametersHandler delegate = getDelegate();
+ delegate.setSignatureValidationParametersResolver(resolver);
+ delegate.setConfigurationLookupStrategy(adapt(configurationLookupStrategy));
+ delegate.setSecurityParametersContextLookupStrategy(adapt(securityParametersContextLookupStrategy));
+ delegate.initialize();
- try {
- final SignatureValidationParameters params = resolver.resolveSingle(
- new CriteriaSet(new SignatureValidationConfigurationCriterion(configs)));
- paramsCtx.setSignatureValidationParameters(params);
- log.debug("{} {} SignatureValidationParameters", getLogPrefix(),
- params != null ? "Resolved" : "Failed to resolve");
- } catch (final ResolverException e) {
- log.error("{} Error resolving SignatureValidationParameters", getLogPrefix(), e);
- ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_SEC_CFG);
- }
}
-// Checkstyle: ReturnCount ON
+
}
\ No newline at end of file
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java
index 3b8da87..99516c5 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java
+++ b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java
@@ -61,7 +61,7 @@ public class PopulateSignatureValidationParametersTest extends OpenSAMLInitBaseT
prc.setInboundMessageContext(null);
action.execute(prc);
- ActionTestingSupport.assertEvent(prc, EventIds.INVALID_PROFILE_CTX);
+ ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
}
@Test public void testResolverError() throws Exception {
@@ -69,7 +69,7 @@ public class PopulateSignatureValidationParametersTest extends OpenSAMLInitBaseT
action.initialize();
action.execute(prc);
- ActionTestingSupport.assertEvent(prc, EventIds.INVALID_SEC_CFG);
+ ActionTestingSupport.assertEvent(prc, EventIds.MESSAGE_PROC_ERROR);
}
@Test public void testSuccess() throws Exception {
diff --git a/opensaml-xmlsec-impl/pom.xml b/opensaml-xmlsec-impl/pom.xml
index 90e4567..e11e171 100644
--- a/opensaml-xmlsec-impl/pom.xml
+++ b/opensaml-xmlsec-impl/pom.xml
@@ -20,6 +20,11 @@
<!-- Compile Dependencies -->
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>opensaml-messaging-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>opensaml-xmlsec-api</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java
similarity index 72%
copy from opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
copy to opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java
index 1de12d4..9ef6b81 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java
@@ -15,24 +15,27 @@
* limitations under the License.
*/
-package org.opensaml.profile.action.impl;
+package org.opensaml.xmlsec.messaging.impl;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
-import org.opensaml.profile.action.AbstractProfileAction;
-import org.opensaml.profile.action.ActionSupport;
-import org.opensaml.profile.action.EventIds;
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
+import org.opensaml.messaging.context.MessageContext;
+import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.messaging.handler.AbstractMessageHandler;
+import org.opensaml.messaging.handler.MessageHandlerException;
import org.opensaml.xmlsec.SecurityConfigurationSupport;
import org.opensaml.xmlsec.SignatureValidationConfiguration;
import org.opensaml.xmlsec.SignatureValidationParameters;
import org.opensaml.xmlsec.SignatureValidationParametersResolver;
import org.opensaml.xmlsec.context.SecurityParametersContext;
import org.opensaml.xmlsec.criterion.SignatureValidationConfigurationCriterion;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
@@ -41,32 +44,22 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
/**
- * Action that resolves and populates {@link SignatureValidationParameters} on a {@link SecurityParametersContext}
- * created/accessed via a lookup function, by default on the inbound message context.
- *
- * @event {@link EventIds#PROCEED_EVENT_ID}
- * @event {@link EventIds#INVALID_PROFILE_CTX}
- * @event {@link EventIds#INVALID_SEC_CFG}
+ * Handler that resolves and populates {@link SignatureValidationParameters} on a {@link SecurityParametersContext}
+ * created/accessed via a lookup function, by default as an immediate child context of the target
+ * {@link MessageContext}.
*/
-public class PopulateSignatureValidationParameters extends AbstractProfileAction {
+public class PopulateSignatureValidationParametersHandler extends AbstractMessageHandler {
/** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(PopulateSignatureValidationParameters.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(PopulateSignatureValidationParametersHandler.class);
/** Strategy used to look up the {@link SecurityParametersContext} to set the parameters for. */
- @Nonnull private Function<ProfileRequestContext,SecurityParametersContext> securityParametersContextLookupStrategy;
+ @Nonnull private Function<MessageContext,SecurityParametersContext> securityParametersContextLookupStrategy;
/** Strategy used to lookup a per-request {@link SignatureValidationConfiguration} list. */
@NonnullAfterInit
- private Function<ProfileRequestContext,List<SignatureValidationConfiguration>> configurationLookupStrategy;
+ private Function<MessageContext,List<SignatureValidationConfiguration>> configurationLookupStrategy;
/** Resolver for parameters to store into context. */
@NonnullAfterInit private SignatureValidationParametersResolver resolver;
@@ -74,10 +67,9 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
/**
* Constructor.
*/
- public PopulateSignatureValidationParameters() {
+ public PopulateSignatureValidationParametersHandler() {
// Create context by default.
- securityParametersContextLookupStrategy = Functions.compose(
- new ChildContextLookup<>(SecurityParametersContext.class, true), new InboundMessageContextLookup());
+ securityParametersContextLookupStrategy = new ChildContextLookup<>(SecurityParametersContext.class, true);
}
/**
@@ -86,7 +78,7 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
* @param strategy lookup strategy
*/
public void setSecurityParametersContextLookupStrategy(
- @Nonnull final Function<ProfileRequestContext,SecurityParametersContext> strategy) {
+ @Nonnull final Function<MessageContext,SecurityParametersContext> strategy) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
securityParametersContextLookupStrategy = Constraint.isNotNull(strategy,
@@ -99,7 +91,7 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
* @param strategy lookup strategy
*/
public void setConfigurationLookupStrategy(
- @Nonnull final Function<ProfileRequestContext,List<SignatureValidationConfiguration>> strategy) {
+ @Nonnull final Function<MessageContext,List<SignatureValidationConfiguration>> strategy) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
configurationLookupStrategy = Constraint.isNotNull(strategy,
@@ -126,8 +118,8 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
if (resolver == null) {
throw new ComponentInitializationException("SignatureValidationParametersResolver cannot be null");
} else if (configurationLookupStrategy == null) {
- configurationLookupStrategy = new Function<ProfileRequestContext,List<SignatureValidationConfiguration>>() {
- public List<SignatureValidationConfiguration> apply(final ProfileRequestContext input) {
+ configurationLookupStrategy = new Function<MessageContext,List<SignatureValidationConfiguration>>() {
+ public List<SignatureValidationConfiguration> apply(final MessageContext input) {
return Collections.singletonList(
SecurityConfigurationSupport.getGlobalSignatureValidationConfiguration());
}
@@ -138,23 +130,21 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
// Checkstyle: ReturnCount OFF
/** {@inheritDoc} */
@Override
- protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+ protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
log.debug("{} Resolving SignatureValidationParameters for request", getLogPrefix());
- final List<SignatureValidationConfiguration> configs = configurationLookupStrategy.apply(profileRequestContext);
+ final List<SignatureValidationConfiguration> configs = configurationLookupStrategy.apply(messageContext);
if (configs == null || configs.isEmpty()) {
log.error("{} No SignatureValidationConfiguration returned by lookup strategy", getLogPrefix());
- ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_SEC_CFG);
- return;
+ throw new MessageHandlerException("No SignatureValidationConfiguration returned by lookup strategy");
}
final SecurityParametersContext paramsCtx =
- securityParametersContextLookupStrategy.apply(profileRequestContext);
+ securityParametersContextLookupStrategy.apply(messageContext);
if (paramsCtx == null) {
log.debug("{} No SecurityParametersContext returned by lookup strategy", getLogPrefix());
- ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
- return;
+ throw new MessageHandlerException("SecurityParametersContext returned by lookup strategy");
}
try {
@@ -165,7 +155,7 @@ public class PopulateSignatureValidationParameters extends AbstractProfileAction
params != null ? "Resolved" : "Failed to resolve");
} catch (final ResolverException e) {
log.error("{} Error resolving SignatureValidationParameters", getLogPrefix(), e);
- ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_SEC_CFG);
+ throw new MessageHandlerException("Error resolving SignatureValidationParameters");
}
}
// Checkstyle: ReturnCount ON
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java
similarity index 65%
copy from opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java
copy to opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java
index 3b8da87..212e937 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParametersTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java
@@ -15,20 +15,13 @@
* limitations under the License.
*/
-package org.opensaml.profile.action.impl;
+package org.opensaml.xmlsec.messaging.impl;
import java.util.Collections;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
import org.opensaml.core.OpenSAMLInitBaseTestCase;
-import org.opensaml.profile.RequestContextBuilder;
-import org.opensaml.profile.action.ActionTestingSupport;
-import org.opensaml.profile.action.EventIds;
-import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.messaging.context.MessageContext;
+import org.opensaml.messaging.handler.MessageHandlerException;
import org.opensaml.xmlsec.SignatureValidationParameters;
import org.opensaml.xmlsec.SignatureValidationParametersResolver;
import org.opensaml.xmlsec.context.SecurityParametersContext;
@@ -37,49 +30,51 @@ import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
/** Unit test for {@link PopulateSignatureValidationParameters}. */
-public class PopulateSignatureValidationParametersTest extends OpenSAMLInitBaseTestCase {
+public class PopulateSignatureValidationParametersHandlerTest extends OpenSAMLInitBaseTestCase {
- private ProfileRequestContext prc;
+ private MessageContext messageContext;
- private PopulateSignatureValidationParameters action;
+ private PopulateSignatureValidationParametersHandler handler;
@BeforeMethod public void setUp() {
- prc = new RequestContextBuilder().buildProfileRequestContext();
- action = new PopulateSignatureValidationParameters();
+ messageContext = new MessageContext<>();
+ handler = new PopulateSignatureValidationParametersHandler();
}
@Test(expectedExceptions=ComponentInitializationException.class)
public void testConfig() throws ComponentInitializationException {
- action.initialize();
+ handler.initialize();
}
- @Test public void testNoContext() throws Exception {
- action.setSignatureValidationParametersResolver(new MockResolver(false));
- action.initialize();
-
- prc.setInboundMessageContext(null);
+ @Test(expectedExceptions=ConstraintViolationException.class)
+ public void testNoContext() throws Exception {
+ handler.setSignatureValidationParametersResolver(new MockResolver(false));
+ handler.initialize();
- action.execute(prc);
- ActionTestingSupport.assertEvent(prc, EventIds.INVALID_PROFILE_CTX);
+ handler.invoke(null);
}
- @Test public void testResolverError() throws Exception {
- action.setSignatureValidationParametersResolver(new MockResolver(true));
- action.initialize();
+ @Test(expectedExceptions=MessageHandlerException.class)
+ public void testResolverError() throws Exception {
+ handler.setSignatureValidationParametersResolver(new MockResolver(true));
+ handler.initialize();
- action.execute(prc);
- ActionTestingSupport.assertEvent(prc, EventIds.INVALID_SEC_CFG);
+ handler.invoke(messageContext);
}
@Test public void testSuccess() throws Exception {
- action.setSignatureValidationParametersResolver(new MockResolver(false));
- action.initialize();
+ handler.setSignatureValidationParametersResolver(new MockResolver(false));
+ handler.initialize();
- action.execute(prc);
- ActionTestingSupport.assertProceedEvent(prc);
- Assert.assertNotNull(prc.getInboundMessageContext().getSubcontext(
- SecurityParametersContext.class).getSignatureValidationParameters());
+ handler.invoke(messageContext);
+ Assert.assertNotNull(messageContext.getSubcontext(SecurityParametersContext.class).getSignatureValidationParameters());
}
private class MockResolver implements SignatureValidationParametersResolver {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list