[jboss-cvs] Picketlink SVN: r235 - in federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core: saml/v2/metadata/store and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon May 3 13:00:48 EDT 2010


Author: anil.saldhana at jboss.com
Date: 2010-05-03 13:00:47 -0400 (Mon, 03 May 2010)
New Revision: 235

Modified:
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/constants/PicketLinkFederationConstants.java
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/FileBasedMetadataConfigurationStore.java
   federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/IMetadataConfigurationStore.java
Log:
PLFED-67: bootstrap() and cleanup() methods

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/constants/PicketLinkFederationConstants.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/constants/PicketLinkFederationConstants.java	2010-05-03 16:53:53 UTC (rev 234)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/constants/PicketLinkFederationConstants.java	2010-05-03 17:00:47 UTC (rev 235)
@@ -38,4 +38,10 @@
    String SCHEMA_IDFED_HANDLER = "schema/config/picketlink-fed-handler.xsd";
    String DSA_SIGNATURE_ALGORITHM = "SHA1withDSA";
    String RSA_SIGNATURE_ALGORITHM = "SHA1withRSA";
+   
+   // File Based Meta data Configuration Constants
+   String SERIALIZATION_EXTENSION = ".SER";
+   String FILE_STORE_DIRECTORY = "/picketlink-store";
+   String IDP_PROPERTIES = "/identityproviders.properties";
+   String SP_PROPERTIES = "/serviceproviders.properties";
 }
\ No newline at end of file

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/FileBasedMetadataConfigurationStore.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/FileBasedMetadataConfigurationStore.java	2010-05-03 16:53:53 UTC (rev 234)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/FileBasedMetadataConfigurationStore.java	2010-05-03 17:00:47 UTC (rev 235)
@@ -24,10 +24,16 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
@@ -35,9 +41,13 @@
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.log4j.Logger;
+import org.picketlink.identity.federation.core.constants.PicketLinkFederationConstants;
 import org.picketlink.identity.federation.core.util.JAXBUtil;
 import org.picketlink.identity.federation.saml.v2.metadata.EntityDescriptorType;
+import org.picketlink.identity.federation.saml.v2.metadata.IDPSSODescriptorType;
 import org.picketlink.identity.federation.saml.v2.metadata.ObjectFactory;
+import org.picketlink.identity.federation.saml.v2.metadata.RoleDescriptorType;
+import org.picketlink.identity.federation.saml.v2.metadata.SPSSODescriptorType;
 
 /**
  * File based metadata store that uses
@@ -49,29 +59,113 @@
 public class FileBasedMetadataConfigurationStore implements IMetadataConfigurationStore
 {
    private static Logger log = Logger.getLogger(FileBasedMetadataConfigurationStore.class);
-   private boolean trace = log.isTraceEnabled();
+   private boolean trace = log.isTraceEnabled(); 
    
-   private static String EXTENSION = ".SER";
-   
    private String userHome = null;
    
+   private String baseDirectory = null;
+   
    private String pkgName = "org.picketlink.identity.federation.saml.v2.metadata"; 
    
    public FileBasedMetadataConfigurationStore()
    {
+      bootstrap();
+   }
+   
+   /**
+    * @see {@code IMetadataConfigurationStore#bootstrap()}
+    */
+   public void bootstrap()
+   {  
       userHome = SecurityActions.getSystemProperty("user.home");
       if(userHome == null)
          throw new RuntimeException("user.home system property not set");
       
-      File jbid = new File(userHome + "/jbid-store");
-      if(jbid.exists() == false)
+      StringBuilder builder = new StringBuilder( userHome );
+      builder.append( PicketLinkFederationConstants.FILE_STORE_DIRECTORY );
+      baseDirectory = builder.toString();
+      
+      File plStore = new File( baseDirectory );
+      if(plStore.exists() == false)
       {
          if(trace)
-            log.trace(jbid.getPath() + " does not exist. Hence creating.");
-         jbid.mkdir();
+            log.trace(plStore.getPath() + " does not exist. Hence creating.");
+         plStore.mkdir();
       }
    }
    
+   /**
+    * @see IMetadataConfigurationStore#getIdentityProviderID()
+    */
+   public Set<String> getIdentityProviderID()
+   { 
+      Set<String> identityProviders = new HashSet<String>();
+      
+      Properties idp = new Properties();
+      
+      StringBuilder builder = new StringBuilder( baseDirectory );
+      builder.append( PicketLinkFederationConstants.IDP_PROPERTIES );
+      
+      File identityProviderFile = new File( builder.toString() );
+      if( identityProviderFile.exists() )
+      {
+         try
+         {
+            idp.load( new FileInputStream( identityProviderFile  ));
+            String listOfIDP = (String) idp.get("IDP");
+            
+            //Comma separated list
+            StringTokenizer st = new StringTokenizer( listOfIDP, ",");
+            while( st.hasMoreTokens() )
+            {
+               String token = st.nextToken();
+               identityProviders.add( token );
+            }
+         }
+         catch (Exception e)
+         {
+            log.error( "Exception loading the identity providers:", e );
+         } 
+      } 
+      return identityProviders;
+   }
+   
+   /**
+    * @see IMetadataConfigurationStore#getServiceProviderID()
+    */
+   public Set<String> getServiceProviderID()
+   { 
+      Set<String> serviceProviders = new HashSet<String>();
+      
+      Properties sp = new Properties();  
+      StringBuilder builder = new StringBuilder( baseDirectory );
+      builder.append( PicketLinkFederationConstants.SP_PROPERTIES );
+      
+      File serviceProviderFile = new File( builder.toString() ); 
+       
+      if( serviceProviderFile.exists() )
+      {
+         try
+         {
+            sp.load( new FileInputStream( serviceProviderFile  ));
+            String listOfSP = (String) sp.get("SP");
+            
+            //Comma separated list
+            StringTokenizer st = new StringTokenizer( listOfSP, "," );
+            while( st.hasMoreTokens() )
+            {
+               String token = st.nextToken();
+               serviceProviders.add( token );
+            }
+         }
+         catch (Exception e)
+         {
+            log.error( "Exception loading the service providers:", e );
+         } 
+      } 
+      return serviceProviders;
+   }
+   
    /** 
     * @see IMetadataConfigurationStore#load(String)
     */
@@ -102,6 +196,9 @@
     */
    public void persist(EntityDescriptorType entity, String id) throws IOException
    {
+      boolean isIDP = false;
+      boolean isSP = false;
+      
       File persistedFile = validateIdAndReturnMDFile(id);
       
       ObjectFactory of = new ObjectFactory();
@@ -121,6 +218,32 @@
          throw ioe;
       } 
       if(trace) log.trace("Persisted into " + persistedFile.getPath());
+      
+      //We need to figure out whether this is sp or idp from the entity data
+      List<RoleDescriptorType> roleDescriptorTypes = entity.getRoleDescriptorOrIDPSSODescriptorOrSPSSODescriptor();
+      for( RoleDescriptorType rdt: roleDescriptorTypes )
+      {
+         if( rdt instanceof IDPSSODescriptorType )
+         {
+            isIDP = true;
+            break;
+         }
+         if( rdt instanceof SPSSODescriptorType )
+         {
+            isSP = true;
+            break;
+         }
+      }
+      
+      if( isSP )
+      {
+         addServiceProvider(id); 
+      }
+      else if( isIDP )
+      {
+         addIdentityProvider( id);
+      }
+         
    }
 
    /**
@@ -193,11 +316,17 @@
    
    private File validateIdAndReturnMDFile(String id)
    {
+      String serializationExtension = PicketLinkFederationConstants.SERIALIZATION_EXTENSION;
+      
       if(id == null)
          throw new IllegalArgumentException("id is null");
-      if(!id.endsWith(EXTENSION))
-         id += EXTENSION;
-      return new File(userHome + "/jbid-store/" + id); 
+      if( !id.endsWith( serializationExtension ))
+         id += serializationExtension;
+      
+      StringBuilder builder = new StringBuilder( baseDirectory );
+      builder.append( "/").append( id );
+      
+      return new File( builder.toString() ); 
    }
    
    private File validateIdAndReturnTrustedProvidersFile(String id)
@@ -205,8 +334,87 @@
       if(id == null)
          throw new IllegalArgumentException("id is null");
       
-      id += "-trusted" + EXTENSION; 
+      id += "-trusted" + PicketLinkFederationConstants.SERIALIZATION_EXTENSION; 
+
+      StringBuilder builder = new StringBuilder( baseDirectory );
+      builder.append( "/").append( id );
       
-      return new File(userHome + "/jbid-store/" + id); 
+      return new File( builder.toString() ); 
    }
+   
+   private void addServiceProvider( String id )
+   {  
+      Properties sp = new Properties(); 
+
+      StringBuilder builder = new StringBuilder( baseDirectory );
+      builder.append( PicketLinkFederationConstants.SP_PROPERTIES );
+      
+      File serviceProviderFile = new File( builder.toString() ); 
+       
+      try
+      {
+         if( serviceProviderFile.exists() == false )
+            serviceProviderFile.createNewFile();
+         
+            sp.load( new FileInputStream( serviceProviderFile  ));
+            String listOfSP = (String) sp.get("SP");
+            if( listOfSP == null )
+            {
+               listOfSP = id; 
+            }
+            else
+            {
+               listOfSP += "," + id; 
+            } 
+            sp.put( "SP", listOfSP );
+            
+            sp.store( new FileWriter( serviceProviderFile ), ""); 
+      }
+      catch (Exception e)
+      {
+          log.error( "Exception loading the service providers:", e );
+      }   
+   }
+   
+   private void addIdentityProvider( String id )
+   {  
+      Properties idp = new Properties(); 
+
+      StringBuilder builder = new StringBuilder( baseDirectory );
+      builder.append( PicketLinkFederationConstants.IDP_PROPERTIES );
+      
+      File idpProviderFile = new File( builder.toString() ); 
+       
+      try
+      {
+         if( idpProviderFile.exists() == false )
+            idpProviderFile.createNewFile();
+         
+            idp.load( new FileInputStream( idpProviderFile  ));
+            String listOfIDP = (String) idp.get("IDP");
+            if( listOfIDP == null )
+            {
+               listOfIDP = id; 
+            }
+            else
+            {
+               listOfIDP += "," + id; 
+            } 
+            idp.put( "IDP", listOfIDP );
+            
+            idp.store( new FileWriter( idpProviderFile ), ""); 
+      }
+      catch (Exception e)
+      {
+          log.error( "Exception loading the identity providers:", e );
+      }   
+   }
+
+
+   /**
+    * @see {@code IMetadataConfigurationStore#cleanup()}
+    */
+   public void cleanup()
+   { 
+   } 
 }
\ No newline at end of file

Modified: federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/IMetadataConfigurationStore.java
===================================================================
--- federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/IMetadataConfigurationStore.java	2010-05-03 16:53:53 UTC (rev 234)
+++ federation/trunk/picketlink-fed-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/metadata/store/IMetadataConfigurationStore.java	2010-05-03 17:00:47 UTC (rev 235)
@@ -23,6 +23,7 @@
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Set;
 
 import org.picketlink.identity.federation.saml.v2.metadata.EntityDescriptorType;
 
@@ -34,6 +35,29 @@
 public interface IMetadataConfigurationStore
 {
    /**
+    * <p> 
+    *   Perform any bootstrap or initialization the store needs.
+    * </p>
+    */
+   void bootstrap();
+   
+   /**
+    * Get a set of the service provider ID, which
+    * can individually be drilled down to get additional
+    * trusted provider information
+    * @return
+    */
+   Set<String> getServiceProviderID();
+   
+   /**
+    * Get a set of the identity provider ID, which
+    * can individually be drilled down to get additional
+    * trusted provider information
+    * @return
+    */
+   Set<String> getIdentityProviderID();
+   
+   /**
     * Get the Trusted Providers
     * @param id
     * @return a map of name of provider, metadata urls 
@@ -77,4 +101,11 @@
     * @param id 
     */
    void deleteTrustedProviders(String id);
+   
+   /**
+    * <p> 
+    * Perform final cleanup if needed.
+    * </p>
+    */
+   void cleanup();
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list