[jboss-cvs] Picketlink SVN: r1053 - in federation/trunk/picketlink-fed-core/src: main/java/org/picketlink/identity/federation/core/saml/v2/constants and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 1 15:58:08 EDT 2011


Author: anil.saldhana at jboss.com
Date: 2011-07-01 15:58:08 -0400 (Fri, 01 Jul 2011)
New Revision: 1053

Added:
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLArtifactResolveParser.java
   federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAMLArtifactResolveParerTestCase.java
   federation/trunk/picketlink-fed-core/src/test/resources/parser/saml2/saml2-artifact-resolve.xml
Modified:
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLParser.java
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/constants/JBossSAMLConstants.java
Log:
PLFED-116: saml artifact resolve parsing

Added: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLArtifactResolveParser.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLArtifactResolveParser.java	                        (rev 0)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLArtifactResolveParser.java	2011-07-01 19:58:08 UTC (rev 1053)
@@ -0,0 +1,98 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors. 
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.picketlink.identity.federation.core.parsers.saml;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.events.StartElement;
+
+import org.picketlink.identity.federation.core.exceptions.ParsingException;
+import org.picketlink.identity.federation.core.parsers.ParserNamespaceSupport;
+import org.picketlink.identity.federation.core.parsers.util.StaxParserUtil;
+import org.picketlink.identity.federation.core.saml.v2.constants.JBossSAMLConstants;
+import org.picketlink.identity.federation.core.saml.v2.constants.JBossSAMLURIConstants;
+import org.picketlink.identity.federation.saml.v2.protocol.ArtifactResolveType;
+
+/**
+ * Parse the {@link ArtifactResolveType}
+ * @author Anil.Saldhana at redhat.com
+ * @since Jul 1, 2011
+ */
+public class SAMLArtifactResolveParser extends SAMLRequestAbstractParser implements ParserNamespaceSupport
+{
+   public Object parse(XMLEventReader xmlEventReader) throws ParsingException
+   {
+      //Get the startelement
+      StartElement startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+      StaxParserUtil.validate(startElement, JBossSAMLConstants.ARTIFACT_RESOLVE.get());
+
+      ArtifactResolveType artifactResolve = parseBaseAttributes(startElement);
+
+      while (xmlEventReader.hasNext())
+      {
+         //Let us peek at the next start element
+         startElement = StaxParserUtil.peekNextStartElement(xmlEventReader);
+         if (startElement == null)
+            break;
+         super.parseCommonElements(startElement, xmlEventReader, artifactResolve);
+         String elementName = StaxParserUtil.getStartElementName(startElement);
+
+         if (JBossSAMLConstants.ARTIFACT.get().equals(elementName))
+         {
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            artifactResolve.setArtifact(StaxParserUtil.getElementText(xmlEventReader));
+         }
+         else if (JBossSAMLConstants.ISSUER.get().equals(elementName))
+         {
+            continue;
+         }
+         else if (JBossSAMLConstants.SIGNATURE.get().equals(elementName))
+         {
+            continue;
+         }
+         else
+            throw new RuntimeException("Unknown Element:" + elementName + "::location=" + startElement.getLocation());
+      }
+      return artifactResolve;
+   }
+
+   public boolean supports(QName qname)
+   {
+      return JBossSAMLURIConstants.PROTOCOL_NSURI.get().equals(qname.getNamespaceURI());
+   }
+
+   /**
+    * Parse the attributes at the authnrequesttype element
+    * @param startElement
+    * @return 
+    * @throws ParsingException 
+    */
+   private ArtifactResolveType parseBaseAttributes(StartElement startElement) throws ParsingException
+   {
+      super.parseRequiredAttributes(startElement);
+      ArtifactResolveType authnRequest = new ArtifactResolveType(id, issueInstant);
+      //Let us get the attributes
+      super.parseBaseAttributes(startElement, authnRequest);
+
+      return authnRequest;
+   }
+}
\ No newline at end of file

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLParser.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLParser.java	2011-07-01 17:50:35 UTC (rev 1052)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/SAMLParser.java	2011-07-01 19:58:08 UTC (rev 1053)
@@ -109,6 +109,12 @@
                }
                throw new RuntimeException("Unknown xsi:type=" + xsiTypeValue);
             }
+            else if (JBossSAMLURIConstants.PROTOCOL_NSURI.get().equals(nsURI)
+                  && JBossSAMLConstants.ARTIFACT_RESOLVE.get().equals(startElementName.getLocalPart()))
+            {
+               SAMLArtifactResolveParser artifactResolverParser = new SAMLArtifactResolveParser();
+               return artifactResolverParser.parse(xmlEventReader);
+            }
             else if (JBossSAMLConstants.XACML_AUTHZ_DECISION_QUERY.get().equals(localPart))
             {
                SAMLXACMLRequestParser samlXacmlParser = new SAMLXACMLRequestParser();

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/constants/JBossSAMLConstants.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/constants/JBossSAMLConstants.java	2011-07-01 17:50:35 UTC (rev 1052)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/constants/JBossSAMLConstants.java	2011-07-01 19:58:08 UTC (rev 1053)
@@ -30,6 +30,8 @@
 {
    ADDRESS( "Address" ),
    ALLOW_CREATE( "AllowCreate" ),
+   ARTIFACT( "Artifact" ),
+   ARTIFACT_RESOLVE( "ArtifactResolve" ),
    ARTIFACT_RESOLUTION_SERVICE( "ArtifactResolutionService" ),
    ASSERTION( "Assertion" ), 
    ASSERTION_CONSUMER_SERVICE( "AssertionConsumerService" ),

Added: federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAMLArtifactResolveParerTestCase.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAMLArtifactResolveParerTestCase.java	                        (rev 0)
+++ federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/parser/saml/SAMLArtifactResolveParerTestCase.java	2011-07-01 19:58:08 UTC (rev 1053)
@@ -0,0 +1,61 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors. 
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.picketlink.test.identity.federation.core.parser.saml;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.InputStream;
+
+import org.junit.Test;
+import org.picketlink.identity.federation.core.parsers.saml.SAMLParser;
+import org.picketlink.identity.federation.core.saml.v2.util.XMLTimeUtil;
+import org.picketlink.identity.federation.core.util.JAXPValidationUtil;
+import org.picketlink.identity.federation.saml.v2.protocol.ArtifactResolveType;
+
+/**
+ * Unit test the parsing of {@link ArtifactResolveType}
+ * @author Anil.Saldhana at redhat.com
+ * @since Jul 1, 2011
+ */
+public class SAMLArtifactResolveParerTestCase
+{
+   @Test
+   public void testSAMLArtifactResolveParse() throws Exception
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      InputStream configStream = tcl.getResourceAsStream("parser/saml2/saml2-artifact-resolve.xml");
+
+      JAXPValidationUtil.validate(configStream);
+      configStream = tcl.getResourceAsStream("parser/saml2/saml2-artifact-resolve.xml");
+
+      SAMLParser parser = new SAMLParser();
+      ArtifactResolveType artifactResolve = (ArtifactResolveType) parser.parse(configStream);
+      assertNotNull("ArtifactResolveType is not null", artifactResolve);
+
+      assertEquals("ID_cce4ee769ed970b501d680f697989d14", artifactResolve.getID());
+      assertEquals(XMLTimeUtil.parse("2004-12-05T09:21:58Z"), artifactResolve.getIssueInstant());
+      assertEquals("https://sp.example.com/SAML2/ArtifactResolution", artifactResolve.getDestination().toString());
+      assertEquals("https://idp.example.org/SAML2", artifactResolve.getIssuer().getValue());
+      assertEquals("AAQAAMh48/1oXIM+sDo7Dh2qMp1HM4IF5DaRNmDj6RdUmllwn9jJHyEgIi8=", artifactResolve.getArtifact());
+   }
+}
\ No newline at end of file

Added: federation/trunk/picketlink-fed-core/src/test/resources/parser/saml2/saml2-artifact-resolve.xml
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/resources/parser/saml2/saml2-artifact-resolve.xml	                        (rev 0)
+++ federation/trunk/picketlink-fed-core/src/test/resources/parser/saml2/saml2-artifact-resolve.xml	2011-07-01 19:58:08 UTC (rev 1053)
@@ -0,0 +1,42 @@
+<samlp:ArtifactResolve
+   xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
+   xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
+   ID="ID_cce4ee769ed970b501d680f697989d14"
+   Version="2.0"
+   IssueInstant="2004-12-05T09:21:58Z"
+   Destination="https://sp.example.com/SAML2/ArtifactResolution">
+   <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
+   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignedInfo>
+			<ds:CanonicalizationMethod
+				Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments" />
+			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmlds#rsa-sha1" />
+			<ds:Reference URI="#ID_ab0392ef-b557-4453-95a8-a7e168da8ac5">
+				<ds:Transforms>
+					<ds:Transform Algorithm="http://www.w3.org/2000/09/xmlds#enveloped-signature" />
+					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+				</ds:Transforms>
+				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmlds#sha1" />
+				<ds:DigestValue>0Y9QM5c5qCShz5UWmbFzBmbuTus=</ds:DigestValue>
+			</ds:Reference>
+		</ds:SignedInfo>
+		<ds:SignatureValue>
+			se/flQ2htUQ0IUYieVkXNn9cfjnfgv6H99nFarsTNTpRI9xuSlw5OTai/2PYdZI2Va9+QzzBf99m
+			VFyigfFdfrqug6aKFhF0lsujzlFfPfmXBbDRiTFX+4SkBeV71uuy7rOUI/jRiitEA0QrKqs0e/pV
+			+C8PoaariisK96Mtt7A=
+          </ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:KeyValue>
+				<ds:RSAKeyValue>
+					<ds:Modulus>
+						suGIyhVTbFvDwZdx8Av62zmP+aGOlsBN8WUE3eEEcDtOIZgO78SImMQGwB2C0eIVMhiLRzVPqoW1
+						dCPAveTm653zHOmubaps1fY0lLJDSZbTbhjeYhoQmmaBro/tDpVw5lKJwspqVnMuRK19ju2dxpKw
+						lYGGtrP5VQv00dfNPbs=
+                </ds:Modulus>
+					<ds:Exponent>AQAB</ds:Exponent>
+				</ds:RSAKeyValue>
+			</ds:KeyValue>
+		</ds:KeyInfo>
+	</ds:Signature>
+   <samlp:Artifact>AAQAAMh48/1oXIM+sDo7Dh2qMp1HM4IF5DaRNmDj6RdUmllwn9jJHyEgIi8=</samlp:Artifact>
+ </samlp:ArtifactResolve>
\ No newline at end of file



More information about the jboss-cvs-commits mailing list