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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 11 16:05:15 EST 2011


Author: anil.saldhana at jboss.com
Date: 2011-02-11 16:05:14 -0500 (Fri, 11 Feb 2011)
New Revision: 751

Added:
   federation/trunk/picketlink-fed-core/src/test/resources/saml2/metadata/sp-entitydescOrgContact.xml
Modified:
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/metadata/SAMLEntityDescriptorParser.java
   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/writers/SAMLMetadataWriter.java
   federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataParsingUnitTestCase.java
   federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataWriterUnitTestCase.java
   federation/trunk/picketlink-fed-model/src/main/java/org/picketlink/identity/federation/newmodel/saml/v2/metadata/EntityDescriptorType.java
Log:
add contact person parsing/writing for entity descriptor

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/metadata/SAMLEntityDescriptorParser.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/metadata/SAMLEntityDescriptorParser.java	2011-02-11 20:17:13 UTC (rev 750)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/parsers/saml/metadata/SAMLEntityDescriptorParser.java	2011-02-11 21:05:14 UTC (rev 751)
@@ -41,6 +41,8 @@
 import org.picketlink.identity.federation.newmodel.saml.v2.assertion.AttributeType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.AttributeAuthorityDescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.AttributeConsumingServiceType;
+import org.picketlink.identity.federation.newmodel.saml.v2.metadata.ContactType;
+import org.picketlink.identity.federation.newmodel.saml.v2.metadata.ContactTypeType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EndpointType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EntityDescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EntityDescriptorType.EDTChoiceType;
@@ -136,6 +138,10 @@
             
             entityDescriptorType.setOrganization(organization); 
          }
+         else if( JBossSAMLConstants.CONTACT_PERSON.get().equals( localPart ))
+         {
+            entityDescriptorType.addContactPerson( parseContactPerson(xmlEventReader)); 
+         }
          else 
             throw new RuntimeException( "Unknown " + localPart );
       }
@@ -478,7 +484,61 @@
       }
       return org;
    }
+   
+   private ContactType parseContactPerson( XMLEventReader xmlEventReader ) throws ParsingException
+   {
+      StartElement startElement = StaxParserUtil.getNextStartElement( xmlEventReader );
+      StaxParserUtil.validate(startElement, JBossSAMLConstants.CONTACT_PERSON.get() );
 
+      Attribute attr = startElement.getAttributeByName( new QName( JBossSAMLConstants.CONTACT_TYPE.get() ));
+      if( attr == null )
+         throw new ParsingException( "attribute contactType required" );
+      ContactType contactType = new ContactType(ContactTypeType.fromValue( StaxParserUtil.getAttributeValue(attr)));
+      
+      while( xmlEventReader.hasNext() )
+      {
+         XMLEvent xmlEvent = StaxParserUtil.peek(xmlEventReader);
+         if( xmlEvent instanceof EndElement )
+         {
+            EndElement end = StaxParserUtil.getNextEndElement(xmlEventReader); 
+            StaxParserUtil.validate( end , JBossSAMLConstants.CONTACT_PERSON.get() );
+            break;
+         }
+         
+         startElement = (StartElement) xmlEvent; 
+         String localPart = startElement.getName().getLocalPart();
+         
+         if( JBossSAMLConstants.COMPANY.get().equals( localPart ))
+         { 
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            contactType.setCompany( StaxParserUtil.getElementText(xmlEventReader) ); 
+         }  
+         else if( JBossSAMLConstants.GIVEN_NAME.get().equals( localPart ))
+         { 
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            contactType.setGivenName( StaxParserUtil.getElementText(xmlEventReader) ); 
+         }
+         else if( JBossSAMLConstants.SURNAME.get().equals( localPart ))
+         { 
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            contactType.setSurName( StaxParserUtil.getElementText(xmlEventReader) ); 
+         }
+         else if( JBossSAMLConstants.EMAIL_ADDRESS.get().equals( localPart ))
+         { 
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            contactType.addEmailAddress( StaxParserUtil.getElementText(xmlEventReader) ); 
+         }
+         else if( JBossSAMLConstants.TELEPHONE_NUMBER.get().equals( localPart ))
+         { 
+            startElement = StaxParserUtil.getNextStartElement(xmlEventReader);
+            contactType.addTelephone( StaxParserUtil.getElementText(xmlEventReader) ); 
+         }
+         else 
+            throw new RuntimeException( "Unknown " + localPart ); 
+      }
+      return contactType;
+   }
+
    private LocalizedNameType getLocalizedName(XMLEventReader xmlEventReader, StartElement startElement)
          throws ParsingException
    {

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-02-11 20:17:13 UTC (rev 750)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/constants/JBossSAMLConstants.java	2011-02-11 21:05:14 UTC (rev 751)
@@ -54,9 +54,13 @@
    AUTHN_REQUESTS_SIGNED( "AuthnRequestsSigned" ),
    BINDING( "Binding" ),
    CACHE_DURATION( "cacheDuration" ),
+   COMPANY( "Company" ),
    CONDITIONS( "Conditions" ),
    CONSENT( "Consent" ),
+   CONTACT_PERSON( "ContactPerson" ),
+   CONTACT_TYPE( "contactType" ),
    DESTINATION( "Destination" ),
+   EMAIL_ADDRESS( "EmailAddress" ),
    ENCODING( "Encoding" ),
    ENCRYPTED_ASSERTION( "EncryptedAssertion" ),
    ENTITY_ID( "entityID" ),
@@ -64,6 +68,7 @@
    ENTITIES_DESCRIPTOR( "EntitiesDescriptor" ),
    FORMAT( "Format" ),
    FRIENDLY_NAME( "FriendlyName" ),
+   GIVEN_NAME( "GivenName" ),
    ID( "ID" ),
    IDP_SSO_DESCRIPTOR( "IDPSSODescriptor" ),
    INDEX( "index" ),
@@ -125,6 +130,8 @@
    SUBJECT( "Subject" ),
    SUBJECT_CONFIRMATION( "SubjectConfirmation" ),
    SUBJECT_CONFIRMATION_DATA( "SubjectConfirmationData" ),
+   SURNAME( "SurName" ),
+   TELEPHONE_NUMBER( "TelephoneNumber" ),
    TYPE( "type" ),
    USE( "use" ),
    VALUE( "Value" ),

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/writers/SAMLMetadataWriter.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/writers/SAMLMetadataWriter.java	2011-02-11 20:17:13 UTC (rev 750)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/writers/SAMLMetadataWriter.java	2011-02-11 21:05:14 UTC (rev 751)
@@ -38,6 +38,8 @@
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.AttributeAuthorityDescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.AttributeConsumingServiceType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.AuthnAuthorityDescriptorType;
+import org.picketlink.identity.federation.newmodel.saml.v2.metadata.ContactType;
+import org.picketlink.identity.federation.newmodel.saml.v2.metadata.ContactTypeType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EndpointType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EntityDescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EntityDescriptorType.EDTChoiceType;
@@ -116,6 +118,12 @@
       OrganizationType organization = entityDescriptor.getOrganization();
       writeOrganization(organization);
       
+      List<ContactType> contactPersons = entityDescriptor.getContactPerson();
+      for( ContactType contact : contactPersons )
+      {
+         write( contact );
+      }
+      
       StaxUtil.writeEndElement(writer);
       StaxUtil.flush(writer); 
    }
@@ -359,6 +367,63 @@
       StaxUtil.flush(writer);
    }
    
+   public void write( ContactType contact ) throws ProcessingException
+   { 
+      StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.CONTACT_PERSON.get(),
+            METADATA_NSURI.get());
+      
+      ContactTypeType attribs  = contact.getContactType();
+      StaxUtil.writeAttribute(writer, JBossSAMLConstants.CONTACT_TYPE.get(), attribs.value() );
+      
+      //Write the name
+      String company = contact.getCompany();
+      if( company != null )
+      {
+         StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.COMPANY.get(),
+               METADATA_NSURI.get());
+         StaxUtil.writeCharacters(writer, company);
+         StaxUtil.writeEndElement(writer); 
+      }
+      String givenName = contact.getGivenName();
+      if( givenName != null )
+      {
+         StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.GIVEN_NAME.get(),
+               METADATA_NSURI.get());
+         StaxUtil.writeCharacters(writer, givenName );
+         StaxUtil.writeEndElement(writer);
+      }
+      
+      String surName = contact.getSurName();
+      if( surName != null )
+      {
+         StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.SURNAME.get(),
+               METADATA_NSURI.get());
+         StaxUtil.writeCharacters(writer, surName );
+         StaxUtil.writeEndElement(writer);
+      }
+      
+      List<String> emailAddresses = contact.getEmailAddress();
+      for( String email: emailAddresses )
+      {
+         StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.EMAIL_ADDRESS.get(),
+               METADATA_NSURI.get());
+         StaxUtil.writeCharacters(writer, email );
+         StaxUtil.writeEndElement(writer);
+      }
+      
+      List<String> tels = contact.getTelephoneNumber();
+      for( String telephone: tels )
+      {
+         StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.TELEPHONE_NUMBER.get(),
+               METADATA_NSURI.get());
+         StaxUtil.writeCharacters(writer, telephone );
+         StaxUtil.writeEndElement(writer);
+      }
+      
+      StaxUtil.writeEndElement(writer);
+      StaxUtil.flush(writer);
+   }
+   
    public void writeKeyDescriptor( KeyDescriptorType keyDescriptor ) throws ProcessingException
    { 
       StaxUtil.writeStartElement(writer, METADATA_PREFIX, JBossSAMLConstants.KEY_DESCRIPTOR.get(),

Modified: federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataParsingUnitTestCase.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataParsingUnitTestCase.java	2011-02-11 20:17:13 UTC (rev 750)
+++ federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataParsingUnitTestCase.java	2011-02-11 21:05:14 UTC (rev 751)
@@ -21,20 +21,25 @@
  */
 package org.picketlink.test.identity.federation.core.saml.v2.metadata;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.InputStream;
 import java.security.cert.X509Certificate;
+import java.util.List;
 
 import junit.framework.Assert;
 
 import org.junit.Test;
 import org.picketlink.identity.federation.core.parsers.saml.SAMLParser;
 import org.picketlink.identity.federation.core.saml.v2.util.SAMLMetadataUtil;
+import org.picketlink.identity.federation.newmodel.saml.v2.metadata.ContactType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EntitiesDescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.EntityDescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.IDPSSODescriptorType;
 import org.picketlink.identity.federation.newmodel.saml.v2.metadata.KeyDescriptorType;
+import org.picketlink.identity.federation.newmodel.saml.v2.metadata.OrganizationType;
 
 /**
  * Unit test the SAML metadata parsing
@@ -62,4 +67,27 @@
       Assert.assertNotNull(cert);
       Assert.assertEquals( "CN=test, OU=OpenSSO, O=Sun, L=Santa Clara, ST=California, C=US", cert.getIssuerDN().getName() );
    }
+   
+   @Test
+   public void parseOrganizationAndContactPerson() throws Exception
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      InputStream is = 
+         tcl.getResourceAsStream("saml2/metadata/sp-entitydescOrgContact.xml");
+      assertNotNull("Inputstream not null", is); 
+      
+      SAMLParser parser = new SAMLParser();
+      EntityDescriptorType entity = (EntityDescriptorType) parser.parse(is);
+      assertNotNull( entity );
+      OrganizationType org = entity.getOrganization();
+      assertNotNull( org );
+      
+      List<ContactType> contactPersons = entity.getContactPerson();
+      assertNotNull( contactPersons );
+      assertTrue( contactPersons.size() == 1 );
+      
+      assertEquals( "technical", contactPersons.get(0).getContactType().value() );
+      assertEquals( "SAML SP Support", contactPersons.get(0).getSurName() );
+      assertEquals( "mailto:saml-support at sp.example.com", contactPersons.get(0).getEmailAddress().get(0) ); 
+   }
 }
\ No newline at end of file

Modified: federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataWriterUnitTestCase.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataWriterUnitTestCase.java	2011-02-11 20:17:13 UTC (rev 750)
+++ federation/trunk/picketlink-fed-core/src/test/java/org/picketlink/test/identity/federation/core/saml/v2/metadata/SAMLMetadataWriterUnitTestCase.java	2011-02-11 21:05:14 UTC (rev 751)
@@ -62,4 +62,26 @@
       
       System.out.println( new String( baos.toByteArray() ));
    }
+   
+   @Test
+   public void testWriteEntityDescWithContactPerson() throws Exception
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      InputStream is = 
+         tcl.getResourceAsStream("saml2/metadata/sp-entitydescOrgContact.xml");
+      assertNotNull("Inputstream not null", is); 
+      
+      SAMLParser parser = new SAMLParser();
+      EntityDescriptorType entity = (EntityDescriptorType) parser.parse(is);
+      assertNotNull( entity );
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      
+      XMLStreamWriter  writer = StaxUtil.getXMLStreamWriter( baos );
+      
+      //write it back
+      SAMLMetadataWriter mdWriter = new SAMLMetadataWriter( writer );
+      mdWriter.writeEntityDescriptor( entity ) ; 
+      
+      System.out.println( new String( baos.toByteArray() ));
+   }
 }
\ No newline at end of file

Added: federation/trunk/picketlink-fed-core/src/test/resources/saml2/metadata/sp-entitydescOrgContact.xml
===================================================================
--- federation/trunk/picketlink-fed-core/src/test/resources/saml2/metadata/sp-entitydescOrgContact.xml	                        (rev 0)
+++ federation/trunk/picketlink-fed-core/src/test/resources/saml2/metadata/sp-entitydescOrgContact.xml	2011-02-11 21:05:14 UTC (rev 751)
@@ -0,0 +1,21 @@
+<md:EntityDescriptor
+   xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
+   xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
+   xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
+   entityID="https://sp.example.com/SAML2">
+   <md:Organization>
+     <md:OrganizationName xml:lang="en">
+       SAML Service Provider 
+     </md:OrganizationName>
+     <md:OrganizationDisplayName xml:lang="en">
+       SAML Service Provider @ Some Location
+     </md:OrganizationDisplayName>
+     <md:OrganizationURL xml:lang="en">
+       http://www.sp.example.com/
+     </md:OrganizationURL>
+   </md:Organization>
+   <md:ContactPerson contactType="technical">
+     <md:SurName>SAML SP Support</md:SurName>
+     <md:EmailAddress>mailto:saml-support at sp.example.com</md:EmailAddress>
+   </md:ContactPerson>
+ </md:EntityDescriptor>
\ No newline at end of file

Modified: federation/trunk/picketlink-fed-model/src/main/java/org/picketlink/identity/federation/newmodel/saml/v2/metadata/EntityDescriptorType.java
===================================================================
--- federation/trunk/picketlink-fed-model/src/main/java/org/picketlink/identity/federation/newmodel/saml/v2/metadata/EntityDescriptorType.java	2011-02-11 20:17:13 UTC (rev 750)
+++ federation/trunk/picketlink-fed-model/src/main/java/org/picketlink/identity/federation/newmodel/saml/v2/metadata/EntityDescriptorType.java	2011-02-11 21:05:14 UTC (rev 751)
@@ -267,6 +267,20 @@
    }
 
    /**
+    * Add a {@link ContactType} contact person
+    * @param ct
+    */
+   public void addContactPerson( ContactType ct )
+   {
+      contactPerson.add(ct);
+   }
+   
+   public void removeContactPerson( ContactType ct )
+   {
+      contactPerson.remove(ct);
+   }
+   
+   /**
     * Gets the value of the contactPerson property.
     * <p>
     * Objects of the following type(s) are allowed in the list



More information about the jboss-cvs-commits mailing list