portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From roger...@apache.org
Subject cvs commit: jakarta-jetspeed-2/components/sso/src/java/META-INF sso_repository.xml
Date Tue, 30 Nov 2004 18:19:11 GMT
rogerrut    2004/11/30 10:19:11

  Modified:    components/sso/src/java/org/apache/jetspeed/sso/impl
                        SSOSiteImpl.java PersistenceBrokerSSOProvider.java
                        SSOPrincipalImpl.java
               components/sso/src/test/org/apache/jetspeed/sso
                        TestSSOComponent.java
               components/sso/src/java/META-INF sso_repository.xml
  Log:
  Updated SSO Framework. The relationship between site/principal and remote principal is defined
as following:
  --> each site can have multiple principals (Jetspeed user principal)
  --> each principals has a remote principal and an associated credential
  --> A jetspeed user can only have one remote principal/credential per site
  --> A site can be an url (IFrame) or an application instance (PHP)
  
  Revision  Changes    Path
  1.4       +7 -7      jakarta-jetspeed-2/components/sso/src/java/org/apache/jetspeed/sso/impl/SSOSiteImpl.java
  
  Index: SSOSiteImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/sso/src/java/org/apache/jetspeed/sso/impl/SSOSiteImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SSOSiteImpl.java	29 Nov 2004 01:32:25 -0000	1.3
  +++ SSOSiteImpl.java	30 Nov 2004 18:19:10 -0000	1.4
  @@ -23,7 +23,7 @@
   import org.apache.jetspeed.sso.SSOException;
   import org.apache.jetspeed.sso.SSOSite;
   import org.apache.jetspeed.security.om.InternalCredential;
  -import org.apache.jetspeed.security.om.InternalPrincipal;
  +import org.apache.jetspeed.sso.SSOPrincipal;
   
   /**
   * SSOSiteImpl
  @@ -194,7 +194,7 @@
   		 * Adds the credentail to the credentials collection
   		 *
   		 */
  -		public void addPrincipal(InternalPrincipal principal) throws SSOException {
  +		public void addPrincipal(SSOPrincipal principal) throws SSOException {
   			boolean bStatus = false;
   			
   			try
  @@ -219,20 +219,20 @@
   		public void removePrincipal(long principalId) throws SSOException
   		{
   			boolean bStatus = false;
  -			InternalPrincipal principalObj = null;
  +			SSOPrincipal principalObj = null;
   			Iterator itSitePrincipals = principals.iterator();
   			
   			while (itSitePrincipals.hasNext() )
   			{
  -				principalObj = (InternalPrincipal)itSitePrincipals.next();
  +				principalObj = (SSOPrincipal)itSitePrincipals.next();
   				if ( principalObj.getPrincipalId() == principalId)
   				{
   				
   					try
   					{
   						// TODO: Removing results in an OJB exception. Ignore it for the moment but it needs
to be fixed soon...
  -						//bStatus = principals.remove(principalObj);
  -						bStatus = true;
  +						bStatus = principals.remove(principalObj);
  +						//bStatus = true;
   					}
   					catch(Exception e)
   					{
  
  
  
  1.5       +295 -82   jakarta-jetspeed-2/components/sso/src/java/org/apache/jetspeed/sso/impl/PersistenceBrokerSSOProvider.java
  
  Index: PersistenceBrokerSSOProvider.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/sso/src/java/org/apache/jetspeed/sso/impl/PersistenceBrokerSSOProvider.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- PersistenceBrokerSSOProvider.java	29 Nov 2004 01:32:25 -0000	1.4
  +++ PersistenceBrokerSSOProvider.java	30 Nov 2004 18:19:10 -0000	1.5
  @@ -15,6 +15,7 @@
    */
   package org.apache.jetspeed.sso.impl;
   
  +import java.util.ArrayList;
   import java.util.Collection;
   import java.util.Hashtable;
   import java.util.Iterator;
  @@ -29,16 +30,18 @@
   import org.apache.jetspeed.sso.SSOException;
   import org.apache.jetspeed.sso.SSOProvider;
   import org.apache.jetspeed.sso.SSOSite;
  -
  +import org.apache.jetspeed.sso.SSOPrincipal;
   
   import org.apache.jetspeed.sso.impl.SSOSiteImpl;
   import org.apache.jetspeed.sso.impl.SSOPrincipalImpl;
   
  +
   import org.apache.jetspeed.security.SecurityHelper;
   import org.apache.jetspeed.security.BasePrincipal;
   import org.apache.jetspeed.security.om.InternalCredential;
  -import org.apache.jetspeed.security.om.InternalPrincipal;
  +import org.apache.jetspeed.security.om.InternalUserPrincipal;
   import org.apache.jetspeed.security.om.impl.InternalCredentialImpl;
  +import org.apache.jetspeed.security.om.impl.InternalUserPrincipalImpl;
   import org.apache.jetspeed.security.spi.impl.DefaultPasswordCredentialImpl;
   
   import org.apache.ojb.broker.query.Criteria;
  @@ -80,17 +83,18 @@
   			return false;	// no entry for site
   		}
   		
  +		
   		// Get the principal from the subject
   		BasePrincipal principal = (BasePrincipal)SecurityHelper.getBestPrincipal(subject, UserPrincipal.class);
   		String fullPath = principal.getFullPath();
   		
  -		// Filter the credentials for the given principals
  -		InternalCredential  credential = getCredential(ssoSite, fullPath);	
  +		//	Check if the principal has any remote principals
  +		Collection remotePrincipals = getRemotePrincipalsForPrincipal(ssoSite, fullPath);
   		
  -		if (credential == null)
  -			return false;
  +		if (remotePrincipals == null || remotePrincipals.size() < 1)
  +			return false;	// No remote credentials for Principal
   		else
  -			return true;
  +			return true;	// User has credentials for site
   	}
   
   	/* (non-Javadoc)
  @@ -110,13 +114,11 @@
   		String fullPath = principal.getFullPath();
   		
   		// Filter the credentials for the given principals
  -		InternalCredential  credential = getCredential(ssoSite, fullPath);	
  +		SSOContext context = getCredential(ssoSite, fullPath);	
   		
  -		if ( credential == null)
  +		if ( context == null)
   			throw new SSOException(SSOException.NO_CREDENTIALS_FOR_SITE);	// no entry for site
   		
  -		SSOContext context = new SSOContextImpl(credential.getPrincipalId(), principal.getName(),credential.getValue());
  -		
   		return context;
   	}
   
  @@ -127,7 +129,7 @@
   	public void addCredentialsForSite(Subject subject, String remoteUser, String site, String
pwd)
   			throws SSOException {
   		
  -		// Check if the site already exists
  +		// Check if an entry for the site already exists otherwise create a new one
   		SSOSite ssoSite = getSSOSiteObject(site);
   		if (ssoSite == null)
   		{
  @@ -139,23 +141,33 @@
   			ssoSite.setAllowUserSet(true);
   		}
   		
  -		// Get the Principal information
  +		// Get the Principal information (logged in user)
   		String fullPath = ((BasePrincipal)SecurityHelper.getBestPrincipal(subject, UserPrincipal.class)).getFullPath();
  -			
  -		InternalPrincipal principal = this.getPrincipalForPath(subject, fullPath);
  +		String principalName = ((BasePrincipal)SecurityHelper.getBestPrincipal(subject, UserPrincipal.class)).getName();
  +		
  +		// Add an entry for the principal to the site if it doesn't exist
  +		SSOPrincipal principal = this.getPrincipalForSite(ssoSite, fullPath);
   		
   		if (principal == null)
  -			throw new SSOException(SSOException.REQUESTED_PRINCIPAL_DOES_NOT_EXIST);
  +			throw new SSOException(SSOException.FAILED_ADDING_PRINCIPAL_TO_MAPPING_TABLE_FOR_SITE);
   		
  -		// New credential object
  +		// Create a remote principal and add it to the principal
  +		InternalUserPrincipalImpl remotePrincipal = new InternalUserPrincipalImpl(remoteUser);
  +		remotePrincipal.setFullPath("/sso/user/"+ principalName + "/" + remoteUser);
  +	
  +		// New credential object for remote principal
   		 InternalCredentialImpl credential = 
  -            new InternalCredentialImpl(principal.getPrincipalId(),
  +            new InternalCredentialImpl(remotePrincipal.getPrincipalId(),
               		pwd, 0, DefaultPasswordCredentialImpl.class.getName());
   		 
  -		// Add credential to mapping table
  -		 ssoSite.addCredential(credential);
  -		 ssoSite.addPrincipal(principal);
  -	
  +		 if ( remotePrincipal.getCredentials() == null)
  +		 	remotePrincipal.setCredentials(new ArrayList(0));
  +		 
  +		remotePrincipal.getCredentials().add( credential);
  +		 
  +		 
  +		 principal.addRemotePrincipal(remotePrincipal);
  +		 	
   		// Update database and reset cache
   		 try
            {
  @@ -178,6 +190,10 @@
   	public void removeCredentialsForSite(Subject subject, String site)
   			throws SSOException {
   		
  +		// Initailization
  +		InternalUserPrincipal remotePrincipal = null;
  +		SSOPrincipal principal = null;
  +		
   		//Get the site
   		SSOSite ssoSite = getSSOSiteObject(site);
   		if (ssoSite == null)
  @@ -187,22 +203,32 @@
   		
   		// Get the Principal information
   		String fullPath = ((BasePrincipal)SecurityHelper.getBestPrincipal(subject, UserPrincipal.class)).getFullPath();
  -			
  -		InternalPrincipal principal = this.getPrincipalForPath(subject, fullPath);
   		
  -		/*
  -		 * Should never happen except if the function gets invoked from outside the current credential
store
  -		 */
  -		if (principal == null)
  -			throw new SSOException(SSOException.REQUESTED_PRINCIPAL_DOES_NOT_EXIST);
  -		
  -		// New credential object
  -		 InternalCredential credential = getCredential(ssoSite, fullPath);
  -		 
  -		// Remove credential and principal from mapping
  -		 ssoSite.removeCredential(credential);
  -		 ssoSite.removePrincipal(principal.getPrincipalId());
  -	
  +		try
  +		{
  +			// Remove remote principal from the association table
  +			remotePrincipal = removeRemotePrincipalForPrincipal(ssoSite, fullPath);
  +			
  +			// Remove the principal association
  +			principal = this.getPrincipalForSite(ssoSite, fullPath);
  +			if ( principal != null )
  +				ssoSite.getPrincipals().remove(principal);
  +			
  +			// Remove Remote principal and associated credential from persistence store
  +			if (remotePrincipal != null)
  +				getPersistenceBrokerTemplate().delete(remotePrincipal);
  +			
  +		}
  +		catch(SSOException ssoex)
  +		{
  +			throw new SSOException(ssoex);
  +		}
  +		catch (Exception e)
  +        {
  +        	e.printStackTrace();
  +           throw new SSOException(SSOException.FAILED_STORING_SITE_INFO_IN_DB + e.toString()
);
  +        }
  +								
   		// Update database and reset cache
   		 try
            {
  @@ -218,6 +244,67 @@
            this.mapSite.clear();
   	}
   	
  +	/**
  +	 * updateCredentialsForSite
  +	 * @param subject	Current subject
  +	 * @param remoteUser	remote user login
  +	 * @param site		URL or description of site
  +	 * @param pwd	Password for credentail
  +	 */
  +	public void  updateCredentialsForSite(Subject subject, String remoteUser, String site,
String pwd)  
  +	    throws SSOException
  +	    {
  +	        // Check if the the current user has a credential for the site
  +		
  +			// Update the credential
  +			//		 Initailization
  +			InternalUserPrincipal remotePrincipal = null;
  +			
  +			//Get the site
  +			SSOSite ssoSite = getSSOSiteObject(site);
  +			if (ssoSite == null)
  +			{
  +				throw new SSOException(SSOException.NO_CREDENTIALS_FOR_SITE);
  +			}
  +			
  +			// Get the Principal information
  +			String fullPath = ((BasePrincipal)SecurityHelper.getBestPrincipal(subject, UserPrincipal.class)).getFullPath();
  +			String principalName  = ((BasePrincipal)SecurityHelper.getBestPrincipal(subject, UserPrincipal.class)).getName();
  +			
  +			// Get collection of remote principals and find a match for the one to remove
  +			Collection remotePrincipals = getRemotePrincipalsForPrincipal(ssoSite, fullPath);
  +			if ( remotePrincipals == null || remotePrincipals.size() < 1)
  +				throw new SSOException(SSOException.REQUESTED_PRINCIPAL_DOES_NOT_EXIST);
  +			
  +			// User can have one remote user per site
  +			Iterator itRemotePrincipals = remotePrincipals.iterator();
  +			remotePrincipal = (InternalUserPrincipal)itRemotePrincipals.next();
  +			
  +			// Update principal information
  +			remotePrincipal.setFullPath("/sso/user/"+ principalName + "/" + remoteUser);
  +			InternalCredential credential = (InternalCredential)remotePrincipal.getCredentials().iterator().next();
  +					
  +			// New credential object
  +			 if ( credential != null) 
  +				// Remove credential and principal from mapping
  +				 credential.setValue(pwd);
  +			
  +			// Update database and reset cache
  +			 try
  +			 {
  +			     getPersistenceBrokerTemplate().store(ssoSite);
  +			  }
  +			 catch (Exception e)
  +			 {
  +			 	e.printStackTrace();
  +			    throw new SSOException(SSOException.FAILED_STORING_SITE_INFO_IN_DB + e.toString()
);
  +			 }
  +			 
  +			 // Clear cache
  +			 this.mapSite.clear();
  +		
  +	    }
  +	
   	/*
   	 * Helper utilities
   	 * 
  @@ -275,82 +362,208 @@
   	 * getCredential
   	 * returns the credentials for a given user
   	 */
  -	private InternalCredential  getCredential(SSOSite ssoSite, String fullPath)
  +	private SSOContext  getCredential(SSOSite ssoSite, String fullPath)
   	{
  -		long  principalID = -1;
   		InternalCredential credential = null;
  +		String remoteUser = null;
  +		String remoteFullPath = null;
   				
   		/* Error checking
   		 * 1) should have at least one principal
  -		 * 2) should have at least one credential
   		 * 
   		 * If one of the above fails return null wich means that the user doesn't have credentials
for that site
   		 */
   		Collection principals = ssoSite.getPrincipals();
  -		Collection credentials = ssoSite.getCredentials();
   		
  -		if ( principals == null  || credentials == null)
  +		if ( principals == null )
   		{
   			return null;
   		}
  +		
   		// Iterate over the principals and extract the principal id for the given full path
  +		SSOPrincipal principal = null;
  +		
   		Iterator itPrincipals = principals.iterator();
  -		while (itPrincipals.hasNext() && principalID == -1 /*not found yet*/)
  +		while (itPrincipals.hasNext() && principal == null /*not found yet*/)
   		{
  -			InternalPrincipal principal = (InternalPrincipal)itPrincipals.next();
  -			if ( principal != null && principal.getFullPath().compareToIgnoreCase(fullPath)
== 0)
  +			SSOPrincipal tmp = (SSOPrincipal)itPrincipals.next();
  +			if ( tmp != null && tmp.getFullPath().compareToIgnoreCase(fullPath) == 0)
   			{
  -				principalID = principal.getPrincipalId();
  +				// Found it stop iteration
  +				principal = tmp;
   			}
   		}
   		
  -		if ( principalID == -1)
  +		if ( principal == null)
   			return null;	// No principal found for that site
   		
  -		// Last lookup to see if there are credentials for that user
  -		Iterator itCredentials = credentials.iterator();
  -		while (itCredentials.hasNext() && credential == null /*not found yet*/)
  +		// Extract the remote principal
  +		Collection remotePrincipals = principal.getRemotePrincipals();
  +		if (remotePrincipals == null || remotePrincipals.size() < 1)
  +			return null;	// no remote principals
  +		
  +		InternalUserPrincipal remotePrincipal = (InternalUserPrincipal)remotePrincipals.iterator().next();
  +		
  +		// Get credentail  for this remote user
  +		if ( remotePrincipal.getCredentials() != null)
  +			credential = (InternalCredential)remotePrincipal.getCredentials().iterator().next();
  +		
  +		// Error checking  -- should have a credential at this point
  +		if ( credential == null)
   		{
  -			InternalCredential cred = (InternalCredential)itCredentials.next();
  -			
  -			if ( cred != null && cred.getPrincipalId() == principalID)
  +			System.out.println("Warning: Remote User " + remotePrincipal.getFullPath() + " doesn't
have a credential");
  +			return null; 
  +		}
  +		else
  +		{
  +			System.out.println("Found Credential: " + credential.getValue() + " for PrincipalID
" + remotePrincipal.getPrincipalId() + " Name: "+remotePrincipal.getFullPath() );
  +		}
  +		
  +		// Create new context
  +		String name = remotePrincipal.getFullPath();
  +		int ix = name.lastIndexOf('/');
  +		if ( ix != -1)
  +			name = name.substring(ix);
  +		
  +		SSOContext context = new SSOContextImpl(credential.getPrincipalId(), name, credential.getValue());
  +		
  +		return context;
  +	}
  +	
  +	/*
  +	 * Get a Collection of remote Principals for the logged in principal identified by the
full path
  +	 */
  +	private Collection getRemotePrincipalsForPrincipal(SSOSite ssoSite, String fullPath)
  +	{
  +		// The site orincipals list contains a list of remote principals for the user
  +		Collection principals = ssoSite.getPrincipals();
  +		
  +		if ( principals == null )
  +			return null;	// No principals for this site
  +		
  +		Iterator ixPrincipals = principals.iterator();
  +		while (ixPrincipals.hasNext())
  +		{
  +			SSOPrincipal principal = (SSOPrincipal)ixPrincipals.next();
  +			if ( principal != null && principal.getFullPath().compareToIgnoreCase(fullPath)
== 0)
   			{
  -				// Found credentials for Orincipals
  -				// TODO: Remove debug
  -				System.out.println("Found Credential: " + cred.getValue() + " for PrincipalID " + principalID);
  -				credential = cred;
  +				// Found Principal -- extract remote principals 
  +				return principal.getRemotePrincipals();
   			}
   		}
   		
  -		return credential;
  +		// Principal is not in list
  +		return null;
   	}
   	
  -	private InternalPrincipal getPrincipalForPath(Subject subject, String fullPath)
  +	/*
  +	 * getPrincipalForSite()
  +	 * returns a principal that matches the full path for the site or creates a new entry
if it doesn't exist
  +	 */
  +	private SSOPrincipal getPrincipalForSite(SSOSite ssoSite, String fullPath)
   	{
  -		Criteria filter = new Criteria();       
  -	    filter.addEqualTo("fullPath", fullPath);
  -	    
  -	    QueryByCriteria query = QueryFactory.newQuery(SSOPrincipalImpl.class, filter);
  -	    Collection principals = getPersistenceBrokerTemplate().getCollectionByQuery(query);
                   
  -	    
  -	    if ( principals != null && principals.isEmpty() != true)
  -	    {
  -	    	Iterator itPrincipals = principals.iterator();
  -	    	// Get the site from the collection. There should be only one entry (uniqueness)
  -	    	if (itPrincipals.hasNext())
  +		SSOPrincipal principal = null;
  +		
  +		if ( ssoSite.getPrincipals() != null)
  +		{
  +			Iterator itPrincipals = ssoSite.getPrincipals().iterator();
  +			while (itPrincipals.hasNext() && principal == null)
  +			{
  +				SSOPrincipal tmp  = (SSOPrincipal)itPrincipals.next();
  +				if ( tmp != null && tmp.getFullPath().compareToIgnoreCase(fullPath) == 0)
  +					principal = tmp;	// Found existing entry
  +			}
  +		}
  +		
  +		// Not yest in the site list. Add it but make sure that a user exists
  +		if ( principal == null)
  +		{
  +			Criteria filter = new Criteria();       
  +		    filter.addEqualTo("fullPath", fullPath);
  +		    
  +		    QueryByCriteria query = QueryFactory.newQuery(SSOPrincipalImpl.class, filter);
  +		    Collection principals = getPersistenceBrokerTemplate().getCollectionByQuery(query);
                   
  +		    
  +		    if ( principals != null && principals.isEmpty() != true)
   		    {
  -		    	return (InternalPrincipal) itPrincipals.next();
  +		    	Iterator itPrincipals = principals.iterator();
  +		    	// Get the site from the collection. There should be only one entry (uniqueness)
  +		    	if (itPrincipals.hasNext())
  +			    {
  +		    		principal = (SSOPrincipal) itPrincipals.next();
  +		    		try
  +					{
  +		    			ssoSite.addPrincipal(principal);
  +					}
  +		    		catch (SSOException ssoex)
  +					{
  +		    			System.out.println("ERROR-SSO: Failed adding principal to principla map. Error:
" + ssoex.getMessage());
  +					}
  +			    }
   		    }
  -	    }
  -	    
  -	    // Principal for path doesn't exist
  -	    return null;
  -	    
  +		}
  +	    		
  +		return principal;		
  +	}
  +	
  +	/**
  +	 * getCredentialForPrincipal
  +	 * @param site
  +	 * @param principalId
  +	 * @return InternalCredential for the principal ID
  +	 */
  +	private InternalCredential getCredentialForPrincipal(SSOSite site, long principalId)
  +	{
  +		if ( site.getCredentials() != null)
  +		{
  +			Iterator itCredentials = site.getCredentials().iterator();
  +			while(itCredentials.hasNext() )
  +			{
  +				InternalCredential tmp = (InternalCredential)itCredentials.next();
  +				if ( tmp != null && tmp.getPrincipalId() == principalId)
  +					return tmp;
  +			}
  +		}
  +	
  +		return null;
  +	}
  +	
  +	/**
  +	 * removeRemotePrincipalForPrincipal
  +	 * @param site
  +	 * @param fullPath
  +	 * @return
  +	 * 
  +	 * removes remotePrincipal for a site & principal
  +	 */
  +	private InternalUserPrincipal  removeRemotePrincipalForPrincipal(SSOSite site, String
fullPath) throws SSOException
  +	{
  +		if (site.getPrincipals() != null)
  +		{
  +			Iterator itPrincipals = site.getPrincipals().iterator();
  +			while (itPrincipals.hasNext())
  +			{
  +				SSOPrincipal tmp = (SSOPrincipal)itPrincipals.next();
  +				if ( tmp.getFullPath().compareToIgnoreCase(fullPath) == 0)
  +				{
  +					// Found -- get the remotePrincipal
  +					Collection collRemotePrincipals = tmp.getRemotePrincipals() ;
  +					if (collRemotePrincipals != null)
  +					{
  +					
  +						Iterator itRemotePrincipals = collRemotePrincipals.iterator();
  +						if  (itRemotePrincipals.hasNext())
  +						{
  +							InternalUserPrincipal remotePrincipal = (InternalUserPrincipal)itRemotePrincipals.next();
  +							// Found remove the object
  +							collRemotePrincipals.remove(remotePrincipal);
  +							return remotePrincipal;
  +						}
  +					}
  +				}
  +			}
  +		}		
  +		
  +		throw new SSOException(SSOException.REQUESTED_PRINCIPAL_DOES_NOT_EXIST);
   	}
  -    
  -    public void  updateCredentialsForSite(Subject subject, String remoteUser, String site,
String pwd)  
  -    throws SSOException
  -    {
  -        
  -    }
   }
  
  
  
  1.2       +35 -2     jakarta-jetspeed-2/components/sso/src/java/org/apache/jetspeed/sso/impl/SSOPrincipalImpl.java
  
  Index: SSOPrincipalImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/sso/src/java/org/apache/jetspeed/sso/impl/SSOPrincipalImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SSOPrincipalImpl.java	16 Nov 2004 19:08:47 -0000	1.1
  +++ SSOPrincipalImpl.java	30 Nov 2004 18:19:10 -0000	1.2
  @@ -16,8 +16,11 @@
   package org.apache.jetspeed.sso.impl;
   
   import java.sql.Timestamp;
  +import java.util.ArrayList;
   import java.util.Collection;
  -import org.apache.jetspeed.security.om.InternalPrincipal;
  +
  +import org.apache.jetspeed.security.om.InternalUserPrincipal;
  +import org.apache.jetspeed.sso.SSOPrincipal;
   
   /**
   * <p>
  @@ -28,7 +31,7 @@
   *
   * @author <a href="mailto:rogerrut	@apache.org">Roger Ruttimann</a>
   */
  -public class SSOPrincipalImpl implements InternalPrincipal {
  +public class SSOPrincipalImpl implements SSOPrincipal {
   	 /** The principal id. */
   	   private long principalId;
   
  @@ -52,6 +55,10 @@
   	   
   	   /** Permissions not used by required by the interface*/
   	   private Collection permissions;
  +	   
  +	   /** Remote principals for Principal */
  +	   private Collection remotePrincipals;
  +	   
   
   	   /**
   	    * <p>
  @@ -89,6 +96,20 @@
   	       this.creationDate = new Timestamp(System.currentTimeMillis());
   	       this.modifiedDate = this.creationDate;
   	   }
  +	   
  +	   /**
  +	    * addRemotePrincipal()
  +	    * adds a principal to the list of remote principals
  +	    */
  +	   public void  addRemotePrincipal(InternalUserPrincipal principal)
  +	   {
  +	   		if (remotePrincipals == null)
  +	   		{
  +	   			remotePrincipals = new ArrayList(1);
  +	   		}
  +	   		
  +	   		remotePrincipals.add(principal);
  +	   }
   
   	   /**
   	    * @see org.apache.jetspeed.security.om.InternalPrincipal#getPrincipalId()
  @@ -218,5 +239,17 @@
   	   {
   	       this.enabled = enabled;
   	   }    
  +	/**
  +	 * @return Returns the remotePrincipals.
  +	 */
  +	public Collection getRemotePrincipals() {
  +		return remotePrincipals;
  +	}
  +	/**
  +	 * @param remotePrincipals The remotePrincipals to set.
  +	 */
  +	public void setRemotePrincipals(Collection remotePrincipals) {
  +		this.remotePrincipals = remotePrincipals;
  +	}
   }
   
  
  
  
  1.5       +24 -1     jakarta-jetspeed-2/components/sso/src/test/org/apache/jetspeed/sso/TestSSOComponent.java
  
  Index: TestSSOComponent.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/sso/src/test/org/apache/jetspeed/sso/TestSSOComponent.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestSSOComponent.java	28 Nov 2004 02:23:49 -0000	1.4
  +++ TestSSOComponent.java	30 Nov 2004 18:19:10 -0000	1.5
  @@ -50,6 +50,9 @@
   	 */
   	static private String TEST_URL= "http://localhost/jetspeed";
   	static private String TEST_USER= "joe";
  +	static private String REMOTE_USER= "remoteJS";
  +	static private String REMOTE_PWD_1 = "remote_1";
  +	static private String REMOTE_PWD_2 = "remote_2";
   	
   		
       /** The property manager. */
  @@ -121,7 +124,7 @@
       		// Add credential
       		try
   			{
  -    			ssoBroker.addCredentialsForSite(subject, "TODO", TEST_URL,"test");
  +    			ssoBroker.addCredentialsForSite(subject, REMOTE_USER, TEST_URL,REMOTE_PWD_1);
       			System.out.println("SSO Credential added for user:" + TEST_USER+ " site: " + TEST_URL);
   			}
   			catch(SSOException ssoex)
  @@ -135,6 +138,26 @@
       	{
       		System.out.println("SSO Credential found for user:" + TEST_USER+ " site: " + TEST_URL);
       	}
  +    	
  +    	// Test credential update
  +    	SSOContext ssocontext = ssoBroker.getCredentials(subject, TEST_URL);
  +    	System.out.println("SSO Credential: User:" + ssocontext.getUserName() + " Password:
" + ssocontext.getPassword());
  +    	
  +    	try
  +		{
  +    		// Update Remote credential
  +    		System.out.println("SSO Credential Update" );
  +    		ssoBroker.updateCredentialsForSite(subject, REMOTE_USER , TEST_URL, REMOTE_PWD_2);
  +    		
  +    		ssocontext = ssoBroker.getCredentials(subject, TEST_URL);
  +    		System.out.println("SSO Credential updated: User:" + ssocontext.getUserName() + "
Password: " + ssocontext.getPassword());
  +    		
  +		}
  +    	catch(SSOException ssoex)
  +		{
  +    		System.out.println("SSO Credential update FAILED for user:" + TEST_USER+ " site:
" + TEST_URL);
  +    		throw new Exception(ssoex.getMessage());
  +		}
       	
        	try
   		{
  
  
  
  1.3       +16 -16    jakarta-jetspeed-2/components/sso/src/java/META-INF/sso_repository.xml
  
  Index: sso_repository.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/sso/src/java/META-INF/sso_repository.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- sso_repository.xml	22 Nov 2004 06:13:31 -0000	1.2
  +++ sso_repository.xml	30 Nov 2004 18:19:11 -0000	1.3
  @@ -78,6 +78,20 @@
             nullable="false"
         >
         </field-descriptor>
  +      <collection-descriptor
  +	        name="remotePrincipals"
  +	        element-class-ref="org.apache.jetspeed.security.om.impl.InternalUserPrincipalImpl"
  +	        proxy="true"
  +	        refresh="true"
  +	        auto-retrieve="true"
  +	        auto-update="object"
  +	        auto-delete="object"
  +	        indirection-table="SSO_PRINCIPAL_TO_REMOTE_PRINCIPAL"
  +	    >
  +	        <documentation>This is the reference to principals.</documentation>
  +	        <fk-pointing-to-this-class column="PRINCIPAL_ID"/>
  +	        <fk-pointing-to-element-class column="REMOTE_PRINCIPAL_ID"/>
  +	    </collection-descriptor>
         </class-descriptor>
   
   	
  @@ -129,28 +143,14 @@
   	        nullable="false"
   	    >
   	    </field-descriptor>
  - 	    <collection-descriptor
  -	        name="credentials"
  -	        element-class-ref="org.apache.jetspeed.security.om.impl.InternalCredentialImpl"
  -	        proxy="true"
  -	        refresh="true"
  -	        auto-retrieve="true"
  -	        auto-update="object"
  -	        auto-delete="object"
  -	        indirection-table="SSO_SITE_TO_CREDENTIALS"
  -	    >
  -	        <documentation>This is the reference to credentials.</documentation>
  -	        <fk-pointing-to-this-class column="SITE_ID"/>
  -	        <fk-pointing-to-element-class column="CREDENTIAL_ID"/>
  -	    </collection-descriptor>
   	     <collection-descriptor
   	        name="principals"
   	        element-class-ref="org.apache.jetspeed.sso.impl.SSOPrincipalImpl"
   	       proxy="true"
   	        refresh="true"
   	        auto-retrieve="true"
  -	        auto-update="link"
  -	        auto-delete="link"
  +	        auto-update="object"
  +	        auto-delete="object"
   	        indirection-table="SSO_SITE_TO_PRINCIPALS"
   	    >
   	        <documentation>This is the reference to principals.</documentation>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org


Mime
View raw message