[picketlink-commits] Picketlink SVN: r1034 - in federation/trunk/picketlink-fed-core/src: main/java/org/picketlink/identity/federation/core/parsers/util and 3 other directories.

picketlink-commits at lists.jboss.org picketlink-commits at lists.jboss.org
Fri Jun 24 15:10:13 EDT 2011


Author: anil.saldhana at jboss.com
Date: 2011-06-24 15:10:12 -0400 (Fri, 24 Jun 2011)
New Revision: 1034

Added:
   federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-assertionIDref.xml
   federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-authzquery.xml
Modified:
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11RequestParser.java
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11SubjectParser.java
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/SAML11ParserUtil.java
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v1/SAML11Constants.java
   federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAML11RequestParserTestCase.java
Log:
more SAML11 parsing

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11RequestParser.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11RequestParser.java	2011-06-24 18:12:12 UTC (rev 1033)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11RequestParser.java	2011-06-24 19:10:12 UTC (rev 1034)
@@ -37,6 +37,7 @@
 import org.picketlink.identity.federation.core.saml.v2.util.XMLTimeUtil;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11AttributeQueryType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11AuthenticationQueryType;
+import org.picketlink.identity.federation.saml.v1.protocol.SAML11AuthorizationDecisionQueryType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11RequestType;
 
 /**
@@ -99,10 +100,22 @@
             startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
             request.addAssertionArtifact(StaxParserUtil.getElementText(xmlEventReader));
          }
+         else if (SAML11Constants.AUTHORIZATION_DECISION_QUERY.equals(elementName))
+         {
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            SAML11AuthorizationDecisionQueryType query = SAML11ParserUtil
+                  .parseSAML11AuthorizationDecisionQueryType(xmlEventReader);
+            request.setQuery(query);
+         }
          else if (elementName.equals(JBossSAMLConstants.SIGNATURE.get()))
          {
             request.setSignature(StaxParserUtil.getDOMElement(xmlEventReader));
          }
+         else if (SAML11Constants.ASSERTION_ID_REF.equals(elementName))
+         {
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            request.addAssertionIDRef(StaxParserUtil.getElementText(xmlEventReader));
+         }
          else
             throw new RuntimeException("Unknown Element:" + elementName + "::location=" + startElement.getLocation());
       }

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11SubjectParser.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11SubjectParser.java	2011-06-24 18:12:12 UTC (rev 1033)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAML11SubjectParser.java	2011-06-24 19:10:12 UTC (rev 1034)
@@ -90,7 +90,7 @@
             Attribute nameQAtt = peekedElement.getAttributeByName(new QName(SAML11Constants.NAME_QUALIFIER));
             if (nameQAtt != null)
             {
-               nameID.setNameQualifier(StaxParserUtil.getAttributeValue(formatAtt));
+               nameID.setNameQualifier(StaxParserUtil.getAttributeValue(nameQAtt));
             }
 
             String val = StaxParserUtil.getElementText(xmlEventReader);

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/SAML11ParserUtil.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/SAML11ParserUtil.java	2011-06-24 18:12:12 UTC (rev 1033)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/util/SAML11ParserUtil.java	2011-06-24 19:10:12 UTC (rev 1034)
@@ -48,6 +48,7 @@
 import org.picketlink.identity.federation.saml.v1.assertion.SAML11SubjectType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11AttributeQueryType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11AuthenticationQueryType;
+import org.picketlink.identity.federation.saml.v1.protocol.SAML11AuthorizationDecisionQueryType;
 import org.picketlink.identity.federation.saml.v2.assertion.SubjectConfirmationDataType;
 import org.picketlink.identity.xmlsec.w3.xmldsig.KeyInfoType;
 import org.picketlink.identity.xmlsec.w3.xmldsig.KeyValueType;
@@ -658,4 +659,64 @@
       }
       return query;
    }
+
+   /**
+    * Parse the {@link SAML11AuthorizationDecisionQueryType}
+    * @param xmlEventReader
+    * @return
+    * @throws ParsingException
+    */
+   public static SAML11AuthorizationDecisionQueryType parseSAML11AuthorizationDecisionQueryType(
+         XMLEventReader xmlEventReader) throws ParsingException
+   {
+      SAML11AuthorizationDecisionQueryType query = new SAML11AuthorizationDecisionQueryType();
+      StartElement startElement;
+      // There may be additional things under subject confirmation
+      while (xmlEventReader.hasNext())
+      {
+         XMLEvent xmlEvent = StaxParserUtil.peek(xmlEventReader);
+         if (xmlEvent instanceof EndElement)
+         {
+            EndElement endElement = StaxParserUtil.getNextEndElement(xmlEventReader);
+            if (StaxParserUtil.matches(endElement, SAML11Constants.AUTHORIZATION_DECISION_QUERY))
+               break;
+            else
+               throw new ParsingException("Unknown end element:" + StaxParserUtil.getEndElementName(endElement));
+         }
+
+         if (xmlEvent instanceof StartElement)
+         {
+            startElement = (StartElement) xmlEvent;
+
+            String startTag = StaxParserUtil.getStartElementName(startElement);
+
+            if (startTag.equals(JBossSAMLConstants.SUBJECT.get()))
+            {
+               SAML11SubjectParser parser = new SAML11SubjectParser();
+               query.setSubject((SAML11SubjectType) parser.parse(xmlEventReader));
+            }
+            else if (startTag.equals(SAML11Constants.RESOURCE))
+            {
+               startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+               query.setResource(URI.create(StaxParserUtil.getElementText(xmlEventReader)));
+            }
+            else if (startTag.equals(SAML11Constants.ACTION))
+            {
+               startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+               SAML11ActionType action = new SAML11ActionType();
+               Attribute nsAttr = startElement.getAttributeByName(new QName(SAML11Constants.NAMESPACE));
+               if (nsAttr != null)
+               {
+                  action.setNamespace(StaxParserUtil.getAttributeValue(nsAttr));
+               }
+
+               action.setValue(StaxParserUtil.getElementText(xmlEventReader));
+               query.add(action);
+            }
+            else
+               throw new ParsingException("Unknown tag:" + startTag);
+         }
+      }
+      return query;
+   }
 }
\ No newline at end of file

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v1/SAML11Constants.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v1/SAML11Constants.java	2011-06-24 18:12:12 UTC (rev 1033)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v1/SAML11Constants.java	2011-06-24 19:10:12 UTC (rev 1034)
@@ -36,6 +36,8 @@
 
    String ASSERTION_ARTIFACT = "AssertionArtifact";
 
+   String ASSERTION_ID_REF = "AssertionIDReference";
+
    String ATTRIBUTE_QUERY = "AttributeQuery";
 
    String ATTRIBUTE_NAME = "AttributeName";
@@ -54,6 +56,8 @@
 
    String AUTHENTICATION_STATEMENT = "AuthenticationStatement";
 
+   String AUTHORIZATION_DECISION_QUERY = "AuthorizationDecisionQuery";
+
    String AUTHORIZATION_DECISION_STATEMENT = "AuthorizationDecisionStatement";
 
    String CONFIRMATION_METHOD = "ConfirmationMethod";
@@ -62,6 +66,8 @@
 
    String FORMAT = "Format";
 
+   String FORMAT_EMAIL_ADDRESS = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
+
    String ISSUER = "Issuer";
 
    String MAJOR_VERSION = "MajorVersion";
@@ -72,7 +78,7 @@
 
    String NAME_QUALIFIER = "NameQualifier";
 
-   String NAMESPACE = "Namespace";
+   String NAMESPACE = "NameSpace";
 
    String PROTOCOL_11_NSURI = "urn:oasis:names:tc:SAML:1.0:protocol";
 

Modified: federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAML11RequestParserTestCase.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAML11RequestParserTestCase.java	2011-06-24 18:12:12 UTC (rev 1033)
+++ federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAML11RequestParserTestCase.java	2011-06-24 19:10:12 UTC (rev 1034)
@@ -26,13 +26,17 @@
 import static org.junit.Assert.assertTrue;
 
 import java.io.InputStream;
+import java.util.List;
 
 import org.junit.Test;
 import org.picketlink.identity.federation.core.parsers.saml.SAMLParser;
+import org.picketlink.identity.federation.core.saml.v1.SAML11Constants;
 import org.picketlink.identity.federation.core.saml.v2.util.XMLTimeUtil;
+import org.picketlink.identity.federation.saml.v1.assertion.SAML11ActionType;
 import org.picketlink.identity.federation.saml.v1.assertion.SAML11SubjectType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11AttributeQueryType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11AuthenticationQueryType;
+import org.picketlink.identity.federation.saml.v1.protocol.SAML11AuthorizationDecisionQueryType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11QueryAbstractType;
 import org.picketlink.identity.federation.saml.v1.protocol.SAML11RequestType;
 
@@ -92,6 +96,39 @@
    }
 
    @Test
+   public void testSAML11RequestWithAuthorizationQuery() throws Exception
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      InputStream configStream = tcl.getResourceAsStream("parser/saml1/saml1-request-authzquery.xml");
+
+      SAMLParser parser = new SAMLParser();
+      SAML11RequestType request = (SAML11RequestType) parser.parse(configStream);
+      assertNotNull(request);
+
+      assertEquals(1, request.getMajorVersion());
+      assertEquals(1, request.getMinorVersion());
+      assertEquals("1234", request.getID());
+      assertEquals(XMLTimeUtil.parse("2002-08-05T10:04:15"), request.getIssueInstant());
+
+      SAML11QueryAbstractType query = request.getQuery();
+      assertTrue(query instanceof SAML11AuthorizationDecisionQueryType);
+      SAML11AuthorizationDecisionQueryType attQuery = (SAML11AuthorizationDecisionQueryType) query;
+
+      SAML11SubjectType subject = attQuery.getSubject();
+      SAML11SubjectType.SAML11SubjectTypeChoice choice = subject.getChoice();
+      assertEquals("anil at anil.org", choice.getNameID().getValue());
+      assertEquals(SAML11Constants.FORMAT_EMAIL_ADDRESS, choice.getNameID().getFormat().toString());
+      assertEquals("http://jboss.org", choice.getNameID().getNameQualifier());
+
+      assertEquals("urn:jboss.resource", attQuery.getResource().toString());
+      List<SAML11ActionType> actions = attQuery.get();
+      assertEquals(1, actions.size());
+      SAML11ActionType action = actions.get(0);
+      assertEquals("create", action.getValue());
+      assertEquals("http://www.jboss.org", action.getNamespace());
+   }
+
+   @Test
    public void testSAML11RequestWithAssertionArtifact() throws Exception
    {
       ClassLoader tcl = Thread.currentThread().getContextClassLoader();
@@ -108,4 +145,22 @@
 
       assertEquals("abcd", request.getAssertionArtifact().get(0));
    }
+
+   @Test
+   public void testSAML11RequestWithAssertionIDReference() throws Exception
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      InputStream configStream = tcl.getResourceAsStream("parser/saml1/saml1-request-assertionIDref.xml");
+
+      SAMLParser parser = new SAMLParser();
+      SAML11RequestType request = (SAML11RequestType) parser.parse(configStream);
+      assertNotNull(request);
+
+      assertEquals(1, request.getMajorVersion());
+      assertEquals(1, request.getMinorVersion());
+      assertEquals("rid", request.getID());
+      assertEquals(XMLTimeUtil.parse("2002-06-19T17:03:44.022Z"), request.getIssueInstant());
+
+      assertEquals("abcd", request.getAssertionIDRef().get(0));
+   }
 }
\ No newline at end of file

Added: federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-assertionIDref.xml
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-assertionIDref.xml	                        (rev 0)
+++ federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-assertionIDref.xml	2011-06-24 19:10:12 UTC (rev 1034)
@@ -0,0 +1,7 @@
+<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
+xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
+	MajorVersion="1" MinorVersion="1" 
+	RequestID="rid"
+	IssueInstant="2002-06-19T17:03:44.022Z">
+	<saml:AssertionIDReference>abcd</saml:AssertionIDReference>
+</samlp:Request>
\ No newline at end of file

Added: federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-authzquery.xml
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-authzquery.xml	                        (rev 0)
+++ federation/trunk/picketlink-fed-core/src/test/resources/parser/saml1/saml1-request-authzquery.xml	2011-06-24 19:10:12 UTC (rev 1034)
@@ -0,0 +1,15 @@
+<Request RequestID="1234" MajorVersion="1" MinorVersion="1"
+    IssueInstant="2002-08-05T10:04:15"
+    xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
+   xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
+  <AuthorizationDecisionQuery>
+    <saml:Resource>urn:jboss.resource</saml:Resource>
+    <saml:Subject>
+      <saml:NameIdentifier NameQualifier="http://jboss.org"
+                              Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
+        anil at anil.org
+      </saml:NameIdentifier>
+    </saml:Subject>
+    <saml:Action NameSpace="http://www.jboss.org">create</saml:Action>
+  </AuthorizationDecisionQuery>
+</Request>
\ No newline at end of file



More information about the picketlink-commits mailing list