[jboss-cvs] Picketlink SVN: r1034 - in federation/trunk/picketlink-fed-core/src: main/java/org/picketlink/identity/federation/core/parsers/util and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-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 jboss-cvs-commits
mailing list