[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