[java-identity-provider COMMIT] /trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/audit/impl/SessionIndexAud...

noreply at shibboleth.net noreply at shibboleth.net
Wed Nov 4 14:46:44 EST 2015


Author: scantor
Date: Wed Nov  4 14:46:44 2015
New Revision: 7933

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=7933&view=rev
Log:
IDP-224 - Allow for multiple SessionIndex values, and add LogoutRequest support

Modified:
    trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/audit/impl/SessionIndexAuditExtractor.java

Modified: trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/audit/impl/SessionIndexAuditExtractor.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/audit/impl/SessionIndexAuditExtractor.java?rev=7933&r1=7932&r2=7933&view=diff
==============================================================================
--- trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/audit/impl/SessionIndexAuditExtractor.java	(original)
+++ trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/audit/impl/SessionIndexAuditExtractor.java	Wed Nov  4 14:46:44 2015
@@ -17,6 +17,10 @@
 
 package net.shibboleth.idp.saml.audit.impl;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -25,17 +29,19 @@
 import org.opensaml.saml.saml2.core.ArtifactResponse;
 import org.opensaml.saml.saml2.core.Assertion;
 import org.opensaml.saml.saml2.core.AuthnStatement;
+import org.opensaml.saml.saml2.core.LogoutRequest;
 import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.core.SessionIndex;
 
 import com.google.common.base.Function;
 
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-/** {@link Function} that returns the first SessionIndex from an assertions in a response. */
-public class SessionIndexAuditExtractor implements Function<ProfileRequestContext,String> {
+/** {@link Function} that returns SessionIndex values from assertions in a response or a logout request. */
+public class SessionIndexAuditExtractor implements Function<ProfileRequestContext,Collection<String>> {
 
     /** Lookup strategy for message to read from. */
-    @Nonnull private final Function<ProfileRequestContext,SAMLObject> responseLookupStrategy;
+    @Nonnull private final Function<ProfileRequestContext,SAMLObject> messageLookupStrategy;
     
     /**
      * Constructor.
@@ -43,32 +49,45 @@
      * @param strategy lookup strategy for message
      */
     public SessionIndexAuditExtractor(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
+        messageLookupStrategy = Constraint.isNotNull(strategy, "Message lookup strategy cannot be null");
     }
 
+// Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
     @Override
-    @Nullable public String apply(@Nullable final ProfileRequestContext input) {
-        SAMLObject response = responseLookupStrategy.apply(input);
-        if (response != null) {
+    @Nullable public Collection<String> apply(@Nullable final ProfileRequestContext input) {
+        
+        SAMLObject message = messageLookupStrategy.apply(input);
+        if (message != null) {
+            
+            final Collection<String> indexes = new ArrayList<>(1);
             
             // Step down into ArtifactResponses.
-            if (response instanceof ArtifactResponse) {
-                response = ((ArtifactResponse) response).getMessage();
+            if (message instanceof ArtifactResponse) {
+                message = ((ArtifactResponse) message).getMessage();
             }
             
-            if (response instanceof Response) {
-                for (final Assertion assertion : ((Response) response).getAssertions()) {
+            if (message instanceof Response) {
+                for (final Assertion assertion : ((Response) message).getAssertions()) {
                     for (final AuthnStatement statement : assertion.getAuthnStatements()) {
                         if (statement.getSessionIndex() != null) {
-                            return statement.getSessionIndex();
+                            indexes.add(statement.getSessionIndex());
                         }
                     }
                 }
+            } else if (message instanceof LogoutRequest) {
+                for (final SessionIndex index : ((LogoutRequest) message).getSessionIndexes()) {
+                    if (index != null && index.getSessionIndex() != null) {
+                        indexes.add(index.getSessionIndex());
+                    }
+                }
             }
+            
+            return indexes;
         }
         
-        return null;
+        return Collections.emptyList();
     }
+// Checkstyle: CyclomaticComplexity ON
     
 }



More information about the commits mailing list