[java-idp-plugin-duo] branch main updated: Add conditional resource resolver to spring test custom flowbuilders

Phil Smart philip.smart at jisc.ac.uk
Mon Oct 5 09:44:58 UTC 2020


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

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

View the commit online:
http://git.shibboleth.net/view/?p=java-idp-plugin-duo.git;a=commit;h=2914af744c4943e258e70933e76a6df25dd8f766

The following commit(s) were added to refs/heads/main by this push:
       new  2914af7   Add conditional resource resolver to spring test custom flowbuilders
2914af7 is described below

commit 2914af744c4943e258e70933e76a6df25dd8f766
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Mon Oct 5 10:44:52 2020 +0100

    Add conditional resource resolver to spring test custom flowbuilders
    
    allows use of the conditional: import
---
 .../plugin/authn/duo/impl/ValidateTokenClaims.java |  1 +
 .../flows/authn/DuoOIDC/duo-oidc-authn-beans.xml   |  4 ++--
 .../authn/spring/CustomFlowModelFlowBuilder.java   |  9 ++++++--
 .../spring/CustomFlowRelativeResourceLoader.java   | 25 ++++++++++++++++++++++
 4 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/ValidateTokenClaims.java b/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/ValidateTokenClaims.java
index 8c372a7..80f3075 100644
--- a/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/ValidateTokenClaims.java
+++ b/idp-duo-impl/src/main/java/net/shibboleth/idp/plugin/authn/duo/impl/ValidateTokenClaims.java
@@ -86,6 +86,7 @@ import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
  * 
  * @event {@link org.opensaml.profile.action.EventIds#PROCEED_EVENT_ID}
  * @event {@link net.shibboleth.idp.authn.AuthnEventIds#AUTHN_EXCEPTION}
+ * @event {@link net.shibboleth.idp.authn.AuthnEventIds#NO_CREDENTIALS}
  */
 public class ValidateTokenClaims extends AbstractDuoAuthenticationAction {
     
diff --git a/idp-duo-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/DuoOIDC/duo-oidc-authn-beans.xml b/idp-duo-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/DuoOIDC/duo-oidc-authn-beans.xml
index 7514a71..4c027bb 100644
--- a/idp-duo-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/DuoOIDC/duo-oidc-authn-beans.xml
+++ b/idp-duo-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/DuoOIDC/duo-oidc-authn-beans.xml
@@ -50,8 +50,8 @@
 
     <!-- Can override one or more of the beans above. Note, the property override is mostly to allow tests
     to change the location of the user config file. -->
-    <!--  FIXME: Add this back in as conditional import
-    <import resource="%{idp.home}%{idp.duo.oidc.user.config.home:/conf/authn/duo-authn-config.xml}" />--> 
+    <!--  FIXME: Add this back in as conditional import-->
+    <import resource="conditional:%{idp.home}%{idp.duo.oidc.user.config.home:/conf/authn/duo-authn-config.xml}" />
 
     
 
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowModelFlowBuilder.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowModelFlowBuilder.java
index 4b28d89..6b91918 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowModelFlowBuilder.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowModelFlowBuilder.java
@@ -114,8 +114,11 @@ import org.springframework.webflow.scope.FlowScope;
 import org.springframework.webflow.scope.ViewScope;
 import org.springframework.webflow.security.SecurityRule;
 
+import net.shibboleth.ext.spring.resource.ConditionalResourceResolver;
+
 /**
- * Copy of {@link FlowModelFlowBuilder} for setting the property placeholder prefix of <code>%{</code>.
+ * Copy of {@link FlowModelFlowBuilder} for setting the property placeholder prefix of <code>%{</code>, and
+ * inclusion of a conditional resource resolver for resolving {@literal conditional:} resources.
  */
 public class CustomFlowModelFlowBuilder extends AbstractFlowBuilder {
 
@@ -369,7 +372,9 @@ public class CustomFlowModelFlowBuilder extends AbstractFlowBuilder {
         flowContext.setClassLoader(classLoaderToUse);
 
         Resource flowResource = flowModelHolder.getFlowModelResource();
-        flowContext.setResourceLoader(new CustomFlowRelativeResourceLoader(flowResource));
+        CustomFlowRelativeResourceLoader loader = new CustomFlowRelativeResourceLoader(flowResource);
+        loader.addProtocolResolver(new ConditionalResourceResolver());
+        flowContext.setResourceLoader(loader);
         
 
         AnnotationConfigUtils.registerAnnotationConfigProcessors(flowContext);
diff --git a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java
index 46eb616..957c4f0 100644
--- a/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java
+++ b/idp-duo-impl/src/test/java/net/shibboleth/idp/plugin/authn/spring/CustomFlowRelativeResourceLoader.java
@@ -17,14 +17,29 @@
 package net.shibboleth.idp.plugin.authn.spring;
 
 import java.io.IOException;
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.ProtocolResolver;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
+import org.springframework.util.Assert;
 
+/** 
+ * Custom FlowRelativeResourceLoader which allows the addition of protocol resolvers. 
+ * Of particular importance allowing {@literal conditional:} resources.
+ */
 public class CustomFlowRelativeResourceLoader implements ResourceLoader {
+    
+    private final Set<ProtocolResolver> protocolResolvers = new LinkedHashSet<>(4);
 
     private Resource flowResource;
+    
+    public void addProtocolResolver(ProtocolResolver resolver) {
+        Assert.notNull(resolver, "ProtocolResolver must not be null");
+        this.protocolResolvers.add(resolver);
+    }
 
     public CustomFlowRelativeResourceLoader(Resource resource) {
         this.flowResource = resource;
@@ -35,6 +50,16 @@ public class CustomFlowRelativeResourceLoader implements ResourceLoader {
     }
 
     public Resource getResource(String location) {
+        Assert.notNull(location, "Location must not be null");
+
+        for (ProtocolResolver protocolResolver : protocolResolvers) {
+            Resource resource = protocolResolver.resolve(location, this);
+            if (resource != null) {
+                return resource;
+            }
+        }
+
+        //maintain old behaviour for classpath resources
         if (location.startsWith(CLASSPATH_URL_PREFIX)) {
             return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
         } else {

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


More information about the commits mailing list