[java-identity-provider] branch master updated: IDP-1605 - AuthenticationResult reuseCondition not re-populated

Scott Cantor cantor.2 at osu.edu
Mon May 18 23:10:50 UTC 2020


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

scantor pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=97249ab412827e88f2bce7e5b3bae7848295c83e

The following commit(s) were added to refs/heads/master by this push:
       new  97249ab41 IDP-1605 - AuthenticationResult reuseCondition not re-populated
97249ab41 is described below

commit 97249ab412827e88f2bce7e5b3bae7848295c83e
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon May 18 19:09:43 2020 -0400

    IDP-1605 - AuthenticationResult reuseCondition not re-populated
    
    https://issues.shibboleth.net/jira/browse/IDP-1605
---
 .../idp/authn/AuthenticationFlowDescriptor.java    |  13 +-
 .../shibboleth/idp/authn/AuthenticationResult.java |  29 +++-
 .../DefaultAuthenticationResultSerializerTest.java | 170 +++++++++++++++++----
 3 files changed, 178 insertions(+), 34 deletions(-)

diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
index 936b36875..238037951 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationFlowDescriptor.java
@@ -256,11 +256,22 @@ public class AuthenticationFlowDescriptor extends AbstractIdentifiableInitializa
     public void setDiscoveryRequired(final boolean flag) {
         discoveryRequired = flag;
     }
+    
+    /**
+     * Get condition controlling whether results from this flow should be reused for SSO.
+     * 
+     * @return condition
+     * 
+     * @since 4.0.1
+     */
+    @Nonnull public Predicate<ProfileRequestContext> getReuseCondition() {
+        return reuseCondition;
+    }
 
     /**
      * Set condition controlling whether results from this flow should be reused for SSO.
      * 
-     * <p>Defaults to {@link Predicates#alwaysTrue()}.</p>
+     * <p>Defaults to {@link ProxyCountPredicate}.</p>
      * 
      * @param condition condition to set
      * 
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java
index 0f97e3d96..dd9809adc 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AuthenticationResult.java
@@ -32,6 +32,7 @@ import javax.security.auth.Subject;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
+import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.principal.PrincipalSupportingComponent;
 import net.shibboleth.idp.authn.principal.ProxyAuthenticationPrincipal;
 import net.shibboleth.idp.authn.principal.UsernamePrincipal;
@@ -41,6 +42,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.PredicateSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import com.google.common.base.MoreObjects;
@@ -94,7 +96,7 @@ public class AuthenticationResult implements PrincipalSupportingComponent {
         authenticationInstant = Instant.now();
         lastActivityInstant = authenticationInstant;
         additionalData = new HashMap<>();
-        reuseCondition = Predicates.alwaysTrue();
+        reuseCondition = new DescriptorReusePredicate();
     }
 
     /**
@@ -316,4 +318,29 @@ public class AuthenticationResult implements PrincipalSupportingComponent {
         }
     }
     
+    /**
+     * Inner class that delegates reuse condition evaluation to the underlying {@link AuthenticationFlowDescriptor}.
+     */
+    class DescriptorReusePredicate extends ProxyRestrictionReusePredicate {
+
+        /** {@inheritDoc} */
+        public boolean test(@Nullable final ProfileRequestContext input) {
+            if (input != null) {
+                final AuthenticationContext ac = input.getSubcontext(AuthenticationContext.class);
+                if (ac != null) {
+                    final AuthenticationFlowDescriptor flow = ac.getAvailableFlows().get(authenticationFlowId);
+                    if (flow != null) {
+                        if (flow.getReuseCondition().test(input)) {
+                             if (flow.isProxyRestrictionsEnforced()) {
+                                 return super.test(input);
+                             }
+                        }
+                    }
+                }
+            }
+            
+            return false;
+        }
+        
+    }
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
index 9bf64ee0f..a0bf4d3fb 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
@@ -34,7 +34,9 @@ import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
+import net.shibboleth.idp.authn.AuthenticationFlowDescriptor;
 import net.shibboleth.idp.authn.AuthenticationResult;
+import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.principal.AuthenticationResultPrincipal;
 import net.shibboleth.idp.authn.principal.IdPAttributePrincipal;
 import net.shibboleth.idp.authn.principal.PasswordPrincipal;
@@ -54,10 +56,14 @@ import org.ldaptive.LdapAttribute;
 import org.ldaptive.LdapEntry;
 import org.ldaptive.SortBehavior;
 import org.ldaptive.jaas.LdapPrincipal;
+import org.opensaml.profile.RequestContextBuilder;
+import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.core.io.ClassPathResource;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.google.common.base.Predicates;
+
 /** {@link DefaultAuthenticationResultSerializer} unit test. */
 public class DefaultAuthenticationResultSerializerTest {
 
@@ -73,8 +79,14 @@ public class DefaultAuthenticationResultSerializerTest {
     
     private DefaultAuthenticationResultSerializer serializer;
     
-    @BeforeMethod public void setUp() {
+    private AuthenticationFlowDescriptor flowDescriptor;
+    
+    @BeforeMethod public void setUp() throws ComponentInitializationException {
         serializer = new DefaultAuthenticationResultSerializer();
+        flowDescriptor = new AuthenticationFlowDescriptor();
+        flowDescriptor.setId("test");
+        flowDescriptor.setResultSerializer(serializer);
+        flowDescriptor.setReuseCondition(Predicates.alwaysTrue());
     }
 
     @Test public void testInvalid() throws Exception {
@@ -110,43 +122,62 @@ public class DefaultAuthenticationResultSerializerTest {
     
     @Test public void testSimple() throws Exception {
         serializer.initialize();
+        flowDescriptor.initialize();
         
-        final AuthenticationResult result = createResult("test", new Subject());
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         result.getAdditionalData().put("foo", "bar");
         result.getAdditionalData().put("frobnitz", "zorkmid");
         result.getSubject().getPrincipals().add(new UsernamePrincipal("bob"));
         
-        serializer.serialize(result);
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+        
+        flowDescriptor.serialize(result);
         final String s2 = fileToString(DATAPATH + "simpleAuthenticationResult.json");
         // assertEquals(s, s2); 
         
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
         
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
         assertEquals(result.getAdditionalData(), result2.getAdditionalData());
+        assertTrue(result2.getReuseCondition().test(prc));
     }
 
     @Test public void testComplex() throws Exception {
         serializer.initialize();
+        flowDescriptor.initialize();
         
-        AuthenticationResult result = createResult("test", new Subject());
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         result.getSubject().getPrincipals().add(new UsernamePrincipal("bob"));
         result.getSubject().getPrincipals().add(new TestPrincipal("foo"));
         result.getSubject().getPrincipals().add(new TestPrincipal("bar"));
         
-        String s = serializer.serialize(result);
-        String s2 = fileToString(DATAPATH + "complexAuthenticationResult.json");
+        final String s = flowDescriptor.serialize(result);
+        final String s2 = fileToString(DATAPATH + "complexAuthenticationResult.json");
         assertEquals(s, s2);
-        
-        AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
+
         
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
+        assertTrue(result2.getReuseCondition().test(prc));
     }
 
     @Test public void testCreds() throws Exception {
@@ -176,39 +207,59 @@ public class DefaultAuthenticationResultSerializerTest {
         serializer.setPrincipalSerializers(Collections.singletonList(pwSerializer));
         serializer.initialize();
         
-        final AuthenticationResult result = createResult("test", new Subject());
+        flowDescriptor.initialize();
+        
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         result.getSubject().getPrincipals().add(new UsernamePrincipal("bob"));
         result.getSubject().getPrivateCredentials().add(new PasswordPrincipal("bar"));
-        
-        final String s = serializer.serialize(result);
-        
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s, ACTIVITY);
+
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+
+        final String s = flowDescriptor.serialize(result);
+                
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
         
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
+        assertTrue(result2.getReuseCondition().test(prc));
     }
 
     @Test public void testSymbolic() throws Exception {
         serializer.getGenericPrincipalSerializer().setSymbolics(Collections.singletonMap(TestPrincipal.class.getName(), 1));
         serializer.initialize();
+        flowDescriptor.initialize();
         
-        final AuthenticationResult result = createResult("test", new Subject());
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         result.getSubject().getPrincipals().add(new UsernamePrincipal("bob"));
         result.getSubject().getPrincipals().add(new TestPrincipal("foo"));
         result.getSubject().getPrincipals().add(new TestPrincipal("bar"));
         
-        final String s = serializer.serialize(result);
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+
+        final String s = flowDescriptor.serialize(result);
         final String s2 = fileToString(DATAPATH + "symbolicAuthenticationResult.json");
         assertEquals(s, s2);
         
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
+
         
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
+        assertTrue(result2.getReuseCondition().test(prc));
     }
     
 
@@ -216,8 +267,9 @@ public class DefaultAuthenticationResultSerializerTest {
         final LDAPPrincipalSerializer lpSerializer = new LDAPPrincipalSerializer();
         serializer.setPrincipalSerializers(Collections.singletonList(lpSerializer));
         serializer.initialize();
+        flowDescriptor.initialize();
         
-        final AuthenticationResult result = createResult("test", new Subject());
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         final LdapEntry entry = new LdapEntry(SortBehavior.SORTED);
         entry.setDn("uid=1234,ou=people,dc=shibboleth,dc=net");
         final LdapAttribute givenName = new LdapAttribute(SortBehavior.SORTED);
@@ -230,11 +282,18 @@ public class DefaultAuthenticationResultSerializerTest {
                 new LdapAttribute("mail", "bob at shibboleth.net"));
         result.getSubject().getPrincipals().add(new LdapPrincipal("bob", entry));
 
-        final String s = serializer.serialize(result);
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+
+        final String s = flowDescriptor.serialize(result);
         final String s2 = fileToString(DATAPATH + "LDAPAuthenticationResult.json");
         assertEquals(s, s2);
 
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
 
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
@@ -243,14 +302,16 @@ public class DefaultAuthenticationResultSerializerTest {
         assertEquals(
                 ((LdapPrincipal) result.getSubject().getPrincipals().iterator().next()).getLdapEntry(),
                 ((LdapPrincipal) result2.getSubject().getPrincipals().iterator().next()).getLdapEntry());
+        assertTrue(result2.getReuseCondition().test(prc));
     }
 
     @Test public void testIdPAttribute() throws Exception {
         final IdPAttributePrincipalSerializer attrSerializer = new IdPAttributePrincipalSerializer();
         serializer.setPrincipalSerializers(Collections.singletonList(attrSerializer));
         serializer.initialize();
+        flowDescriptor.initialize();
         
-        final AuthenticationResult result = createResult("test", new Subject());
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         final IdPAttributePrincipal prin = new IdPAttributePrincipal(new IdPAttribute("foo"));
         prin.getAttribute().setValues(List.of(new StringAttributeValue("bar"),
                 new ScopedStringAttributeValue("bar2", "scope"), EmptyAttributeValue.ZERO_LENGTH,
@@ -258,16 +319,25 @@ public class DefaultAuthenticationResultSerializerTest {
         
         result.getSubject().getPrincipals().add(prin);
 
-        final String s = serializer.serialize(result);
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+        
+        final String s = flowDescriptor.serialize(result);
         final String s2 = fileToString(DATAPATH + "IdPAttributeAuthenticationResult.json");
         assertEquals(s, s2);
 
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
+                
 
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
+        assertTrue(result2.getReuseCondition().test(prc));
         
         final IdPAttribute attribute =
                 ((IdPAttributePrincipal) result2.getSubject().getPrincipals().iterator().next()).getAttribute();
@@ -282,50 +352,76 @@ public class DefaultAuthenticationResultSerializerTest {
         final ProxyAuthenticationPrincipalSerializer proxySerializer = new ProxyAuthenticationPrincipalSerializer();
         serializer.setPrincipalSerializers(Collections.singletonList(proxySerializer));
         serializer.initialize();
+        flowDescriptor.initialize();
         
-        final AuthenticationResult result = createResult("test", new Subject());
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         final ProxyAuthenticationPrincipal prin = new ProxyAuthenticationPrincipal(List.of("foo","bar","baz"));
         prin.setProxyCount(10);
         prin.getAudiences().add("zorkmid");
         result.getSubject().getPrincipals().add(prin);
 
-        final String s = serializer.serialize(result);
+        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+
+        final String s = flowDescriptor.serialize(result);
         final String s2 = fileToString(DATAPATH + "ProxyAuthenticationResult.json");
         assertEquals(s, s2);
 
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
+                
 
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
+        assertTrue(result2.getReuseCondition().test(prc));
         
         final ProxyAuthenticationPrincipal prin2 = (ProxyAuthenticationPrincipal)result2.getSubject().getPrincipals().iterator().next(); 
         assertEquals(prin.getAuthorities(), prin2.getAuthorities());
         assertEquals(prin.getProxyCount(), prin2.getProxyCount());
         assertEquals(prin.getAudiences(), prin2.getAudiences());
+        assertTrue(result2.getReuseCondition().test(prc));
     }
 
     @Test public void testNestedAuthenticationResult() throws Exception {
         serializer.initialize();
+        flowDescriptor.initialize();
+        
+        final AuthenticationResult result = createResult(flowDescriptor, new Subject());
         
-        final AuthenticationResult result = createResult("test", new Subject());
-        final AuthenticationResult nested = createResult("nested", new Subject());
+        final AuthenticationFlowDescriptor nestedDescriptor = new AuthenticationFlowDescriptor();
+        nestedDescriptor.setId("nested");
+        nestedDescriptor.setResultSerializer(serializer);
+        nestedDescriptor.initialize();
+        
+        final AuthenticationResult nested = createResult(nestedDescriptor, new Subject());
         nested.setLastActivityInstant(INSTANT);
         nested.getSubject().getPrincipals().add(new UsernamePrincipal("bob"));
         
         result.getSubject().getPrincipals().add(new AuthenticationResultPrincipal(nested));
 
-        final String s = serializer.serialize(result);
+        final ProfileRequestContext prc = getProfileRequestContext(List.of(flowDescriptor, nestedDescriptor));
+        assertTrue(result.getReuseCondition().test(prc));
+
+        final String s = flowDescriptor.serialize(result);
         final String s2 = fileToString(DATAPATH + "NestedAuthenticationResult.json");
         assertEquals(s, s2);
 
-        final AuthenticationResult result2 = serializer.deserialize(1, CONTEXT, KEY, s2, ACTIVITY);
+        final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
+                Instant.ofEpochMilli(ACTIVITY)
+                    .plus(flowDescriptor.getInactivityTimeout())
+                    .plus(AuthenticationFlowDescriptor.STORAGE_EXPIRATION_OFFSET)
+                    .toEpochMilli());
 
         assertEquals(result.getAuthenticationFlowId(), result2.getAuthenticationFlowId());
         assertEquals(result.getAuthenticationInstant(), result2.getAuthenticationInstant());
         assertEquals(result.getLastActivityInstant(), result2.getLastActivityInstant());
         assertEquals(result.getSubject(), result2.getSubject());
+        assertTrue(result2.getReuseCondition().test(prc));
         
         final AuthenticationResult nested2 =
                 ((AuthenticationResultPrincipal) result2.getSubject().getPrincipals().iterator().next()).getAuthenticationResult();
@@ -333,15 +429,25 @@ public class DefaultAuthenticationResultSerializerTest {
         assertEquals(nested.getAuthenticationInstant(), nested2.getAuthenticationInstant());
         assertEquals(nested.getLastActivityInstant(), nested2.getLastActivityInstant());
         assertEquals(nested.getSubject(), nested2.getSubject());
+        assertTrue(nested2.getReuseCondition().test(prc));
     }
 
-    private AuthenticationResult createResult(String flowId, Subject subject) {
-        final AuthenticationResult result = new AuthenticationResult(flowId, subject);
+    private AuthenticationResult createResult(AuthenticationFlowDescriptor flow, Subject subject) {
+        final AuthenticationResult result = flow.newAuthenticationResult(subject);
         result.setAuthenticationInstant(INSTANT);
         result.setLastActivityInstant(Instant.ofEpochMilli(ACTIVITY));
         return result;
     }
     
+    private ProfileRequestContext getProfileRequestContext(final List<AuthenticationFlowDescriptor> flows) {
+        final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, true);
+        for (final AuthenticationFlowDescriptor flow : flows) {
+            ac.getAvailableFlows().put(flow.getId(), flow);
+        }
+        return prc;
+    }
+    
     private String fileToString(String pathname) throws URISyntaxException, IOException {
         try (final FileInputStream stream = new FileInputStream(
                 new File(DefaultAuthenticationResultSerializerTest.class.getResource(pathname).toURI()))) {

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


More information about the commits mailing list