You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2002/06/05 03:21:53 UTC

cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine TurbineAuthentication.java TurbineUserManagement.java

taylor      2002/06/04 18:21:53

  Modified:    src/java/org/apache/jetspeed/om/security Tag: security_14
                        BaseJetspeedUser.java JetspeedUser.java
                        JetspeedUserFactory.java
               src/java/org/apache/jetspeed/om/security/turbine Tag:
                        security_14 TurbineUserPeer.java
               src/java/org/apache/jetspeed/services Tag: security_14
                        JetspeedSecurity.java JetspeedUserManagement.java
               src/java/org/apache/jetspeed/services/security Tag:
                        security_14 TestPortalAuthentication.java
                        TestUserManagement.java
               src/java/org/apache/jetspeed/services/security/turbine Tag:
                        security_14 TurbineAuthentication.java
                        TurbineUserManagement.java
  Log:
  - completed initial implementation of JetspeedUserManagement
  - unit tests for UserManagement (getUser, getUsers, saveUser, addUser, removeUser)
  - next step is to integrate into Jetspeed actions (login,logout,access-control)
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.3.2.3   +34 -2     jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/BaseJetspeedUser.java
  
  Index: BaseJetspeedUser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/BaseJetspeedUser.java,v
  retrieving revision 1.3.2.2
  retrieving revision 1.3.2.3
  diff -u -r1.3.2.2 -r1.3.2.3
  --- BaseJetspeedUser.java	4 Jun 2002 06:34:53 -0000	1.3.2.2
  +++ BaseJetspeedUser.java	5 Jun 2002 01:21:52 -0000	1.3.2.3
  @@ -79,9 +79,9 @@
    * for custom attributes). 
    *
    * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  - * @version $Id: BaseJetspeedUser.java,v 1.3.2.2 2002/06/04 06:34:53 taylor Exp $
  + * @version $Id: BaseJetspeedUser.java,v 1.3.2.3 2002/06/05 01:21:52 taylor Exp $
    */
  -public class BaseJetspeedUser extends SecurityObject implements JetspeedUser
  +public class BaseJetspeedUser /*extends SecurityObject*/ implements JetspeedUser
   {
       /** The date on which the user account was created. */
       private Date createDate = null;
  @@ -94,6 +94,10 @@
       /** This is data that will not survive a servlet engine restart. */
       private Hashtable tempStorage = null;
   
  +    protected String name = "";
  +
  +    protected boolean isNew = true;
  +
       /**
        * Constructor.
        * Create a new User and set the createDate.
  @@ -105,6 +109,7 @@
           permStorage = new Hashtable(10);
           setHasLoggedIn(Boolean.FALSE);
           setDisabled(false);
  +        isNew = true;
       }
   
   
  @@ -130,6 +135,14 @@
           return tmp;
       }
   
  +    public void setUserId(String id)
  +    {
  +        if (getUserId() == null)
  +        {
  +            setPerm(JetspeedUser.USER_ID, id);
  +        }
  +    }
  +
       /**
        * Gets the access counter for a user during a session.
        *
  @@ -736,4 +749,23 @@
           setPerm(JetspeedUser.DISABLED, (disabled) ? "T" : "F");
       }
   
  +    public String getName()
  +    {
  +        return name;
  +    }
  +
  +    public void setName(String name)
  +    {
  +        this.name = name;
  +    }
  +
  +    public boolean isNew()
  +    {
  +        return isNew;
  +    }
  +
  +    void setNew(boolean isNew)
  +    {
  +        this.isNew = isNew;
  +    }
   }
  
  
  
  1.1.2.3   +3 -1      jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/JetspeedUser.java
  
  Index: JetspeedUser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/JetspeedUser.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- JetspeedUser.java	4 Jun 2002 06:34:53 -0000	1.1.2.2
  +++ JetspeedUser.java	5 Jun 2002 01:21:52 -0000	1.1.2.3
  @@ -60,7 +60,7 @@
    * A Jetspeed extension of the Turbine User interface.
    *
    * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  - * @version $Id: JetspeedUser.java,v 1.1.2.2 2002/06/04 06:34:53 taylor Exp $
  + * @version $Id: JetspeedUser.java,v 1.1.2.3 2002/06/05 01:21:52 taylor Exp $
    */
   public interface JetspeedUser extends User
   {
  @@ -84,4 +84,6 @@
         */
       public String getUserId();
   
  +
  +    public boolean isNew();
   }
  
  
  
  1.1.2.2   +10 -0     jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/Attic/JetspeedUserFactory.java
  
  Index: JetspeedUserFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/Attic/JetspeedUserFactory.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- JetspeedUserFactory.java	30 May 2002 07:04:10 -0000	1.1.2.1
  +++ JetspeedUserFactory.java	5 Jun 2002 01:21:52 -0000	1.1.2.2
  @@ -88,6 +88,12 @@
       public static JetspeedUser getInstance()
           throws UserException
       {
  +        return getInstance(true);
  +    }
  +
  +    public static JetspeedUser getInstance(boolean isNew)
  +        throws UserException
  +    {
           JetspeedUser user = null;
   
           if (null == userClassName)
  @@ -109,6 +115,10 @@
           try
           {
               user = (JetspeedUser)userClass.newInstance();
  +            if (user instanceof BaseJetspeedUser)
  +            {
  +                ((BaseJetspeedUser)user).setNew(isNew);
  +            }            
           }
           catch(Exception e)
           {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.3   +38 -1     jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/turbine/Attic/TurbineUserPeer.java
  
  Index: TurbineUserPeer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/om/security/turbine/Attic/TurbineUserPeer.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- TurbineUserPeer.java	4 Jun 2002 06:34:53 -0000	1.1.2.2
  +++ TurbineUserPeer.java	5 Jun 2002 01:21:52 -0000	1.1.2.3
  @@ -147,7 +147,7 @@
               //populateObject(row, offset, obj);
               //obj.setModified(false);
               //obj.setNew(false);
  -            JetspeedUser user = JetspeedUserFactory.getInstance();
  +            JetspeedUser user = JetspeedUserFactory.getInstance(false);
               populateUserObject(row, offset, user);
               return user;
           }
  @@ -178,10 +178,16 @@
           int objectDataPosition = columnNames.length;
           for( int i=0; i<columnNames.length; i++ )
           {
  +            if (columnNames[i].equals(USER_ID))
  +                idPosition = i+1;
  +
               if (columnNames[i].equals(TURBINE_OBJECTDATA))
                   objectDataPosition = i+1;
           }
   
  +        //((org.apache.turbine.om.Persistent)user).setPrimaryKey( 
  +        //    new org.apache.turbine.om.NumberKey(row.getValue(idPosition).asBigDecimal()) );
  +
           // Restore the Permanent Storage Hashtable.  First the
           // Hashtable is restored, then any explicit table columns
           // which should be included in the Hashtable are added.
  @@ -239,6 +245,37 @@
               }
           }
           user.setPermStorage( tempHash );
  +    }
  +
  +    /**
  +     * Builds a criteria object based upon an User object
  +     */
  +    public static Criteria buildCriteria(JetspeedUser user)
  +    {
  +        Hashtable permData = (Hashtable) user.getPermStorage().clone();
  +        Criteria criteria = new Criteria();
  +        if ( !user.isNew() )
  +        {
  +            System.out.println("$$$ User IS NOT NEW");
  +            criteria.add(USER_ID, new NumberKey(user.getUserId()));
  +        }
  +
  +        for (int i=1; i < columnNames.length; i++ )
  +        {
  +            if ( permData.containsKey(columnNames[i]) )
  +            {
  +                String key = new StringBuffer(TABLE_NAME)
  +                    .append('.').append(columnNames[i]).toString();
  +
  +                System.out.println("setting column = " + key);
  +
  +                criteria.add( key,
  +                              permData.remove(TurbineUserPeer.columnNames[i]) );
  +            }
  +        }
  +        String dataKey = new StringBuffer(TABLE_NAME).append('.').append(TURBINE_OBJECTDATA).toString();
  +        criteria.add( dataKey, permData );
  +        return criteria;
       }
   
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.10.2.5  +37 -3     jakarta-jetspeed/src/java/org/apache/jetspeed/services/JetspeedSecurity.java
  
  Index: JetspeedSecurity.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/JetspeedSecurity.java,v
  retrieving revision 1.10.2.4
  retrieving revision 1.10.2.5
  diff -u -r1.10.2.4 -r1.10.2.5
  --- JetspeedSecurity.java	2 Jun 2002 13:09:21 -0000	1.10.2.4
  +++ JetspeedSecurity.java	5 Jun 2002 01:21:53 -0000	1.10.2.5
  @@ -73,6 +73,8 @@
   import org.apache.jetspeed.om.security.JetspeedUser;
   import org.apache.jetspeed.services.JetspeedPortalAccessController;
   import org.apache.jetspeed.services.security.PortalResource;
  +import org.apache.jetspeed.services.JetspeedUserManagement;
  +import org.apache.jetspeed.services.JetspeedAuthentication;
   import org.apache.turbine.util.Log;
   
   /**
  @@ -81,7 +83,7 @@
    * 
    * @see org.apache.jetspeed.services.security.JetspeedSecurityService
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: JetspeedSecurity.java,v 1.10.2.4 2002/06/02 13:09:21 paulsp Exp $
  + * @version $Id: JetspeedSecurity.java,v 1.10.2.5 2002/06/05 01:21:53 taylor Exp $
    */
   
   abstract public class JetspeedSecurity extends TurbineSecurity
  @@ -221,12 +223,19 @@
   
       /**
        * @see JetspeedSecurityService#getAuthenticatedUser
  -     */
      public static User getAuthenticatedUser(String username, String password)
           throws DataBackendException, UnknownEntityException, PasswordMismatchException
       {
  -       return ((JetspeedSecurityService)getService()).getAuthenticatedUser(username, password);
  +       try
  +       {
  +           JetspeedUser user = JetspeedAuthentication.login(username, password);
  +       }
  +       catch(JetspeedSecurityException e)
  +       {
  +           throw new 
  +       }
       }
  +*/
   
       /**
        * @see JetspeedSecurityService#convertUserName
  @@ -265,4 +274,29 @@
          return ((JetspeedSecurityService)getService()).getAutoLogonDisable();
       }
   
  +/*
  +    public static User getUser( String username ) 
  +        throws DataBackendException, UnknownEntityException
  +    {
  +        return JetspeedUserManagement.getUser(username);
  +    }
  +
  +    public static User[] getUsers( Criteria criteria )
  +        throws DataBackendException
  +    {
  +        return JetspeedUserManagement.getUsers(criteria);
  +    }
  +
  +    public static User getAnonymousUser()
  +        throws UnknownEntityException
  +    {
  +        return JetspeedUserManagement.getAnonymousUser();
  +    }
  +
  +    public static void saveUser( User user )
  +        throws UnknownEntityException, DataBackendException
  +    {
  +        JetspeedUserManagement.saveUser(user);
  +    }
  +  */
   }
  
  
  
  1.1.2.2   +6 -6      jakarta-jetspeed/src/java/org/apache/jetspeed/services/Attic/JetspeedUserManagement.java
  
  Index: JetspeedUserManagement.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/Attic/JetspeedUserManagement.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- JetspeedUserManagement.java	30 May 2002 07:04:10 -0000	1.1.2.1
  +++ JetspeedUserManagement.java	5 Jun 2002 01:21:53 -0000	1.1.2.2
  @@ -72,7 +72,7 @@
    * Static accessor for the PortalAccessController service
    *
    * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  - * @version $Id: JetspeedUserManagement.java,v 1.1.2.1 2002/05/30 07:04:10 taylor Exp $
  + * @version $Id: JetspeedUserManagement.java,v 1.1.2.2 2002/06/05 01:21:53 taylor Exp $
    */
   public abstract class JetspeedUserManagement
   {
  @@ -101,7 +101,7 @@
       /**
        * @see org.apache.jetspeed.services.security.UserManagement#getUsers
        */
  -    Iterator getUsers()
  +    public static Iterator getUsers()
           throws JetspeedSecurityException
       {
           return getService().getUsers();
  @@ -110,7 +110,7 @@
       /**
        * @see org.apache.jetspeed.services.security.UserManagement#getUsers
        */
  -    Iterator getUsers(String filter)
  +    public static Iterator getUsers(String filter)
           throws JetspeedSecurityException
       {
           return getService().getUsers(filter);
  @@ -119,7 +119,7 @@
       /**
        * @see org.apache.jetspeed.services.security.UserManagement#saveUser
        */
  -    void saveUser(JetspeedUser user)
  +    public static void saveUser(JetspeedUser user)
           throws JetspeedSecurityException
       {
           getService().saveUser(user);
  @@ -128,7 +128,7 @@
       /**
        * @see org.apache.jetspeed.services.security.UserManagement#addUser
        */
  -    void addUser(JetspeedUser user)
  +    public static void addUser(JetspeedUser user)
           throws JetspeedSecurityException
       {
           getService().addUser(user);
  @@ -137,7 +137,7 @@
       /**
        * @see org.apache.jetspeed.services.security.UserManagement#removeUser
        */
  -    void removeUser(Principal principal)
  +    public static void removeUser(Principal principal)
           throws JetspeedSecurityException
       {
           getService().removeUser(principal);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.3   +36 -20    jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/Attic/TestPortalAuthentication.java
  
  Index: TestPortalAuthentication.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/Attic/TestPortalAuthentication.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- TestPortalAuthentication.java	4 Jun 2002 04:52:29 -0000	1.1.2.2
  +++ TestPortalAuthentication.java	5 Jun 2002 01:21:53 -0000	1.1.2.3
  @@ -76,7 +76,7 @@
    * Unit test for PortalAuthentication interface
    * 
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: TestPortalAuthentication.java,v 1.1.2.2 2002/06/04 04:52:29 taylor Exp $
  + * @version $Id: TestPortalAuthentication.java,v 1.1.2.3 2002/06/05 01:21:53 taylor Exp $
    */
   
   public class TestPortalAuthentication extends TestCase {    
  @@ -103,19 +103,6 @@
       public void setup() 
       {
           System.out.println("Setup: Testing Turbine Authentication");
  -
  -        DBConnection con = null;
  -
  -        try
  -        {
  -            con = Torque.getConnection();
  -        }
  -        catch (Exception e)
  -        {
  -            System.out.println("Error in Setup: failed to start Torque: " + e);
  -        }
  -        System.out.println("Setup Done");
  -         
       }
   
       /**
  @@ -132,7 +119,8 @@
   
   
       /**
  -     * Tests ConfigElement unmarshaling entryset base stuff
  +     * Tests PortalAuthentication.login()
  +     *
        * @throws Exception
        */
   
  @@ -161,21 +149,49 @@
               System.out.println("e = " + e);
               assertTrue(e instanceof FailedLoginException);
           }
  -        boolean loggedOn = true;
           try
           {
               user = service.login("turbine", "turbine");
           }
           catch (Exception e)
           {
  -            e.printStackTrace();
  -            loggedOn = false;
  +            fail(StringUtils.stackTrace(e));
           }
   
  -        assertTrue(loggedOn);
  -        System.out.println("Completed Login Test OK for Turbine");
  +        assertTrue(user.hasLoggedIn() == true);
  +
  +        System.out.println("Completed Login Test OK ");
   
       }
  +
  +    /**
  +     * Tests PortalAuthentication.login()
  +     *
  +     * @throws Exception
  +     */
  +
  +    public void testGetAnonymousUser()
  +    {
  +        setup();
  +
  +        PortalAuthentication service = getService();
  +        JetspeedUser user = null;
  +
  +        try
  +        {
  +            user = service.getAnonymousUser();
  +        }
  +        catch (Exception e)
  +        {
  +            fail(StringUtils.stackTrace(e));
  +        }
  +
  +        assertTrue(user.hasLoggedIn() == false);
  +
  +        System.out.println("Completed Anonymous Test OK");
  +
  +    }
  +
   
     /*
       Configuration object to run Turbine outside a servlet container
  
  
  
  1.1.2.3   +250 -16   jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/Attic/TestUserManagement.java
  
  Index: TestUserManagement.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/Attic/TestUserManagement.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- TestUserManagement.java	4 Jun 2002 06:34:53 -0000	1.1.2.2
  +++ TestUserManagement.java	5 Jun 2002 01:21:53 -0000	1.1.2.3
  @@ -54,6 +54,8 @@
   
   package org.apache.jetspeed.services.security;
   
  +import java.util.Iterator;
  +
   // Junit imports
   import junit.framework.Test;
   import junit.framework.TestSuite;
  @@ -71,6 +73,7 @@
   
   import org.apache.jetspeed.services.JetspeedUserManagement;
   import org.apache.jetspeed.om.security.JetspeedUser;
  +import org.apache.jetspeed.om.security.JetspeedUserFactory;
   import org.apache.jetspeed.om.security.UserNamePrincipal;
   import org.apache.jetspeed.om.security.UserIdPrincipal;
   
  @@ -78,7 +81,7 @@
    * Unit test for UserManagement interface
    * 
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: TestUserManagement.java,v 1.1.2.2 2002/06/04 06:34:53 taylor Exp $
  + * @version $Id: TestUserManagement.java,v 1.1.2.3 2002/06/05 01:21:53 taylor Exp $
    */
   
   public class TestUserManagement extends TestCase {    
  @@ -104,20 +107,7 @@
    
       public void setup() 
       {
  -        System.out.println("Setup: Testing Turbine User Management");
  -
  -        DBConnection con = null;
  -
  -        try
  -        {
  -            con = Torque.getConnection();
  -        }
  -        catch (Exception e)
  -        {
  -            System.out.println("Error in Setup: failed to start Torque: " + e);
  -        }
  -        System.out.println("Setup Done");
  -         
  +        System.out.println("Setup: Testing Turbine User Management");         
       }
   
       /**
  @@ -134,7 +124,7 @@
   
   
       /**
  -     * Tests ConfigElement unmarshaling entryset base stuff
  +     * Tests getUser method
        * @throws Exception
        */
   
  @@ -161,9 +151,253 @@
           assertTrue(user.getEmail().equals("david@bluesunrise.com"));
           assertTrue(user.getConfirmed().equals("CONFIRMED"));
           assertTrue(user.getDisabled() == false);
  +        subtestTemp(user);
  +
  +        try
  +        {
  +            JetspeedUserManagement.getUser(new UserNamePrincipal("nobody"));
  +        }
  +        catch (Exception e)
  +        {
  +            System.out.println("CAUGHT GETUSER EXCEPTION: " + e.toString());
  +            assertTrue(e instanceof UnknownUserException);
  +        }
   
           System.out.println("Completed getUser Test OK for Turbine");
   
  +    }
  +
  +    /**
  +     * Tests getUsers method
  +     * @throws Exception
  +     */
  +
  +    public void testGetUsers() throws Exception 
  +    {
  +        setup();
  +
  +        UserManagement service = getService();
  +        JetspeedUser user = null;
  +
  +        try
  +        {
  +            Iterator users = JetspeedUserManagement.getUsers();
  +            while (users.hasNext())
  +            {
  +                user = (JetspeedUser)users.next();
  +                //System.out.println("user name = " + user.getUserName());
  +                if (user.getUserName().equals("turbine"))
  +                {
  +                    assertTrue(user.getUserId().equals("0"));
  +                    assertTrue(user.getLastName().equals("Turbine"));
  +                }
  +                if (user.getUserName().equals("admin"))
  +                {
  +                    assertTrue(user.getUserId().equals("1"));
  +                    assertTrue(user.getLastName().equals("Admin"));
  +                }
  +            }
  +        }
  +        catch (Exception e)
  +        {
  +            fail(StringUtils.stackTrace(e));
  +        }
  +
  +        System.out.println("Completed getUsers Test OK for Turbine");
  +
  +    }
  +
  +
  +    static final String TEMP_LAST_NAME = "UnitTestLastName";
  +
  +    /**
  +     * Tests saveUser method
  +     * @throws Exception
  +     */
  +
  +    public void testSaveUser() throws Exception 
  +    {
  +        setup();
  +
  +        UserManagement service = getService();
  +        JetspeedUser user = null;
  +
  +        try
  +        {
  +            // test updating and retrieving some fields
  +            user = JetspeedUserManagement.getUser(new UserNamePrincipal("turbine"));
  +            String lastName = user.getLastName();
  +            user.setLastName(TEMP_LAST_NAME);
  +            user.setDisabled(true);
  +
  +            JetspeedUserManagement.saveUser(user);
  +            JetspeedUser user2 = JetspeedUserManagement.getUser(new UserNamePrincipal("turbine"));
  +            assertTrue(user2.getLastName().equals(TEMP_LAST_NAME));
  +            assertTrue(user2.getDisabled() == true);
  +
  +            user2.setLastName(lastName);
  +            user2.setDisabled(false);
  +            JetspeedUserManagement.saveUser(user2);
  +            JetspeedUser user3 = JetspeedUserManagement.getUser(new UserNamePrincipal("turbine"));
  +            assertTrue(user3.getLastName().equals(lastName));
  +            assertTrue(user3.getDisabled() == false);
  +
  +            // test set/get Perm
  +            user3.setPerm("unittest", "test");
  +            JetspeedUserManagement.saveUser(user3);
  +            JetspeedUser user4 = JetspeedUserManagement.getUser(new UserNamePrincipal("turbine"));
  +            String unitTestValue = (String)user4.getPerm("unittest");
  +            assertTrue(unitTestValue.equals("test"));
  +            user4.setPerm("unittest", null);
  +            JetspeedUserManagement.saveUser(user4);            
  +
  +            // try saving to an non-existing user
  +            try
  +            {
  +                JetspeedUser user5 = JetspeedUserFactory.getInstance();
  +                user5.setLastName("junk");
  +                JetspeedUserManagement.saveUser(user5);       
  +            }
  +            catch (Exception e)
  +            {
  +                assertTrue(e instanceof UnknownUserException);
  +            }
  +    
  +            // test dup on unique username key
  +            JetspeedUser user6 = JetspeedUserManagement.getUser(new UserNamePrincipal("turbine"));
  +            user6.setUserName("admin");
  +            try
  +            {
  +                JetspeedUserManagement.saveUser(user6);
  +            }
  +            catch (Exception e)
  +            {
  +                System.out.println("CAUGHT UNIQUE EXCEPTION: " + e.toString());
  +                assertTrue(e instanceof UserException);
  +            }
  +
  +        }
  +        catch (Exception e)
  +        {
  +            fail(StringUtils.stackTrace(e));
  +        }
  +
  +        System.out.println("Completed saveUser Test OK for Turbine");
  +
  +    }
  +
  +    /**
  +     * Tests addUser method
  +     * @throws Exception
  +     */
  +
  +    public void testAddUser() throws Exception 
  +    {
  +        setup();
  +
  +        UserManagement service = getService();
  +
  +        try
  +        {
  +            // test updating and retrieving some fields
  +            JetspeedUser user = JetspeedUserFactory.getInstance();
  +            user.setUserName("busby");
  +            user.setPassword("woof");
  +            user.setLastName("Taylor");
  +            user.setFirstName("Busby");
  +            user.setEmail("busby@bluesunrise.com");
  +            user.setDisabled(false);
  +            user.setConfirmed("NO");
  +            user.setPerm("dogfood", "alpo");
  +            JetspeedUserManagement.addUser(user);
  +
  +            JetspeedUser user2 = JetspeedUserManagement.getUser(new UserNamePrincipal("busby"));
  +            assertTrue(user2.getUserName().equals("busby"));
  +            assertTrue(user2.getLastName().equals("Taylor"));
  +            assertTrue(user2.getFirstName().equals("Busby"));
  +            assertTrue(user2.getEmail().equals("busby@bluesunrise.com"));
  +            assertTrue(user2.getConfirmed().equals("NO"));
  +            String dogfood = (String)user2.getPerm("dogfood");
  +            assertTrue(dogfood.equals("alpo"));
  +            assertTrue(user2.getDisabled() == false);
  +            assertTrue(user2.getUserId().equals(user.getUserId()));
  +
  +            // test adding an existing user
  +            JetspeedUser user3 = JetspeedUserFactory.getInstance();
  +            user3.setUserName("busby");
  +            try
  +            {
  +                JetspeedUserManagement.addUser(user3);
  +            }
  +            catch (Exception e)
  +            {
  +                System.out.println("CAUGHT UNIQUE EXCEPTION: " + e.toString());
  +                assertTrue(e instanceof NotUniqueUserException);
  +            }
  +
  +
  +        }
  +        catch (Exception e)
  +        {
  +            fail(StringUtils.stackTrace(e));
  +        }
  +
  +        System.out.println("Completed saveUser Test OK for Turbine");
  +
  +    }
  +
  +    /**
  +     * Tests removeUser method
  +     * @throws Exception
  +     */
  +
  +    public void testRemoveUser() throws Exception 
  +    {
  +        setup();
  +
  +        UserManagement service = getService();
  +
  +        try
  +        {
  +            // depending on testAddUser running first!
  +            JetspeedUserManagement.removeUser(new UserNamePrincipal("busby"));
  +
  +            try
  +            {
  +                JetspeedUserManagement.removeUser(new UserNamePrincipal("nobody"));
  +            }
  +            catch (Exception e)
  +            {
  +                System.out.println("CAUGHT REMOVE EXCEPTION: " + e.toString());
  +                assertTrue(e instanceof UnknownUserException);
  +            }
  +
  +            try
  +            {
  +                JetspeedUserManagement.getUser(new UserNamePrincipal("busby"));
  +            }
  +            catch (Exception e)
  +            {
  +                System.out.println("CAUGHT REMOVE EXCEPTION: " + e.toString());
  +                assertTrue(e instanceof UnknownUserException);
  +            }
  +
  +
  +        }
  +        catch (Exception e)
  +        {
  +            fail(StringUtils.stackTrace(e));
  +        }
  +
  +        System.out.println("Completed saveUser Test OK for Turbine");
  +
  +    }
  +
  +    private void subtestTemp(JetspeedUser user)
  +    {
  +        user.setTemp("test", new Integer(9));
  +        Integer test = (Integer)user.getTemp("test");
  +        assertTrue(test.intValue() == 9);
       }
   
     /*
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.5   +81 -13    jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine/Attic/TurbineAuthentication.java
  
  Index: TurbineAuthentication.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine/Attic/TurbineAuthentication.java,v
  retrieving revision 1.1.2.4
  retrieving revision 1.1.2.5
  diff -u -r1.1.2.4 -r1.1.2.5
  --- TurbineAuthentication.java	4 Jun 2002 04:52:29 -0000	1.1.2.4
  +++ TurbineAuthentication.java	5 Jun 2002 01:21:53 -0000	1.1.2.5
  @@ -76,6 +76,9 @@
   import org.apache.jetspeed.services.security.UnknownUserException;
   import org.apache.jetspeed.services.security.UserException;
   import org.apache.jetspeed.services.security.JetspeedSecurityException;
  +import org.apache.jetspeed.services.rundata.JetspeedRunDataService;
  +import org.apache.jetspeed.services.rundata.JetspeedRunData;
  +import org.apache.turbine.services.rundata.RunDataService;
   
   // Password encryption
   import javax.mail.internet.MimeUtility;
  @@ -93,7 +96,7 @@
    * This service does not use any of the Turbine security or user management classes.
    * 
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: TurbineAuthentication.java,v 1.1.2.4 2002/06/04 04:52:29 taylor Exp $
  + * @version $Id: TurbineAuthentication.java,v 1.1.2.5 2002/06/05 01:21:53 taylor Exp $
    */
                                                                
   public class TurbineAuthentication  extends TurbineBaseService
  @@ -115,9 +118,11 @@
       int strikeMax = 20;              // 20 total failures 
       long strikeInterval = 300;  // five minutes
   
  -    boolean securePasswords = false;
  -    String passwordsAlgorithm = "SHA";
  +    static boolean securePasswords = false;
  +    static String passwordsAlgorithm = "SHA";
   
  +    /** The JetspeedRunData Service. */
  +    private JetspeedRunDataService runDataService = null;
   
       /**
        * Given a public credential(username) and private credential(password), 
  @@ -143,8 +148,6 @@
           try
           {
               user = JetspeedUserManagement.getUser(new UserNamePrincipal(username));
  -            // TODO: put user in context
  -
           }                            
           catch (UnknownUserException e)
           {
  @@ -154,16 +157,28 @@
           {
               throw new LoginException(e.toString());
           }
  -        // validated ok, encrypt if necessary
  -        if (securePasswords)
  -        {
  -            password = encryptPassword(password, this.passwordsAlgorithm);
  -        }
  +
  +        password = encryptPassword(password);
  +
           if(!user.getPassword().equals(password))
           {
               throw new FailedLoginException("Credential authentication failure");
           }        
   
  +        // Mark the user as being logged in.
  +        user.setHasLoggedIn(new Boolean(true));
  +
  +        // Set the last_login date in the database.
  +        try
  +        {
  +            user.updateLastLogin();
  +            putUserIntoContext(user);
  +        }
  +        catch (Exception e)
  +        {
  +            throw new LoginException("Failed to update last login ", e);
  +        }
  +
           return user;
           
       }
  @@ -177,7 +192,17 @@
       public JetspeedUser getAnonymousUser()
           throws LoginException
       {
  -        return null;
  +        JetspeedUser user = null;
  +        try
  +        {
  +            user = JetspeedUserFactory.getInstance();
  +        }
  +        catch (UserException e)
  +        {
  +            throw new LoginException("Failed to get user from UserFactory " + e);
  +        }
  +        user.setUserName("");
  +        return user;
       }
   
       /**
  @@ -192,6 +217,14 @@
       public void logout()
           throws LoginException
       {
  +        try
  +        {
  +            putUserIntoContext(getAnonymousUser());
  +        }
  +        catch (Exception e)
  +        {
  +            throw new LoginException("Exception logging user out ", e );
  +        }
       }
   
       /**
  @@ -229,6 +262,11 @@
           passwordsAlgorithm = serviceConf.getString(CONFIG_SECURE_PASSWORDS_ALGORITHM,
                                                     passwordsAlgorithm);
   
  +        this.runDataService =
  +            (JetspeedRunDataService)TurbineServices.getInstance()
  +                .getService(RunDataService.SERVICE_NAME);
  +
  +
           setInit(true);
        }
   
  @@ -275,14 +313,17 @@
        * @param algorithm the encryption algorithm to use.
        * @return processed password
        */
  -    static String encryptPassword(String password, String algorithm)
  +    public static String encryptPassword(String password)
       {
  +        if (!securePasswords)
  +            return password;
  +
           if(password == null)
               return null;
   
           try
           {
  -            MessageDigest md = MessageDigest.getInstance(algorithm);
  +            MessageDigest md = MessageDigest.getInstance(passwordsAlgorithm);
               // We need to use unicode here, to be independent of platform's
               // default encoding. Thanks to SGawin for spotting this.
               byte[] digest = md.digest(password.getBytes("UTF-8"));
  @@ -300,4 +341,31 @@
           }
       }
   
  +    protected JetspeedUser getUserFromContext()
  +    {
  +        if (this.runDataService != null)
  +        {
  +            JetspeedRunData rundata = this.runDataService.getCurrentRunData();
  +            if (rundata != null)
  +            {
  +                JetspeedUser user = (JetspeedUser)rundata.getUser();
  +                System.out.println("@@@@@@@ got user" + user.getName());
  +
  +            }
  +        }
  +        return null;
  +    }
  +
  +    protected void putUserIntoContext(JetspeedUser user)
  +    {
  +        if (this.runDataService != null)
  +        {
  +            JetspeedRunData rundata = this.runDataService.getCurrentRunData();
  +            if (rundata != null)
  +            {
  +                System.out.println("@@@@@@@ putting user" + user.getName());
  +                rundata.setUser(user);
  +            }
  +        }
  +    }
   }
  
  
  
  1.1.2.3   +132 -9    jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine/Attic/TurbineUserManagement.java
  
  Index: TurbineUserManagement.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine/Attic/TurbineUserManagement.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- TurbineUserManagement.java	4 Jun 2002 02:43:36 -0000	1.1.2.2
  +++ TurbineUserManagement.java	5 Jun 2002 01:21:53 -0000	1.1.2.3
  @@ -61,7 +61,7 @@
   
   // Torque
   import org.apache.torque.util.Criteria;
  -
  +import org.apache.torque.om.NumberKey;
   
   // Turbine 
   import org.apache.turbine.util.Log;
  @@ -76,6 +76,7 @@
   
   // Jetspeed Security
   import org.apache.jetspeed.om.security.JetspeedUser;
  +import org.apache.jetspeed.om.security.BaseJetspeedUser;
   import org.apache.jetspeed.om.security.UserNamePrincipal;
   import org.apache.jetspeed.om.security.UserIdPrincipal;
   
  @@ -84,6 +85,7 @@
   
   import org.apache.jetspeed.services.security.UserException;
   import org.apache.jetspeed.services.security.UnknownUserException;
  +import org.apache.jetspeed.services.security.NotUniqueUserException;
   import org.apache.jetspeed.services.security.JetspeedSecurityException;
   
   
  @@ -92,7 +94,7 @@
    *
    * 
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: TurbineUserManagement.java,v 1.1.2.2 2002/06/04 02:43:36 taylor Exp $
  + * @version $Id: TurbineUserManagement.java,v 1.1.2.3 2002/06/05 01:21:53 taylor Exp $
    */
   
   public class TurbineUserManagement extends TurbineBaseService
  @@ -168,7 +170,17 @@
       public Iterator getUsers()
           throws JetspeedSecurityException
       {
  -        return null; // TODO
  +        Criteria criteria = new Criteria();
  +        Vector users;
  +        try
  +        {
  +            users = TurbineUserPeer.doSelectUsers(criteria);
  +        }
  +        catch(Exception e)
  +        {
  +            throw new UserException("Failed to retrieve users ", e);
  +        }        
  +        return users.iterator();
       }
   
       /**
  @@ -184,9 +196,20 @@
       public Iterator getUsers(String filter)
           throws JetspeedSecurityException
       {
  -        return null; // TODO
  -    }
  +        // TODO: implement this with a SQL string
   
  +        Criteria criteria = new Criteria();
  +        Vector users;
  +        try
  +        {
  +            users = TurbineUserPeer.doSelectUsers(criteria);
  +        }
  +        catch(Exception e)
  +        {
  +            throw new UserException("Failed to retrieve users ", e);
  +        }        
  +        return users.iterator();
  +    }
   
       /**
        * Saves a <code>JetspeedUser</code>'s attributes into permanent storage. 
  @@ -200,7 +223,21 @@
       public void saveUser(JetspeedUser user)
           throws JetspeedSecurityException
       {
  -        // TODO
  +        if(!accountExists(user, true))
  +        {
  +            throw new UnknownUserException("Cannot save user '" + user.getUserName() +
  +                                           "', User doesn't exist");
  +        }
  +        Criteria criteria = TurbineUserPeer.buildCriteria(user);
  +        try
  +        {
  +            TurbineUserPeer.doUpdate(criteria);
  +        }
  +        catch(Exception e)
  +        {
  +            throw new UserException("Failed to save user object ", e);
  +        }
  +
       }
   
   
  @@ -219,7 +256,29 @@
       public void addUser(JetspeedUser user)
           throws JetspeedSecurityException
       {
  -        // TODO
  +        if(accountExists(user, false))
  +        {
  +            throw new NotUniqueUserException("The account '" + 
  +                user.getUserName() + "' already exists");
  +        }
  +        String initialPassword = user.getPassword();
  +        String encrypted = TurbineAuthentication.encryptPassword(initialPassword);
  +        user.setPassword(encrypted);
  +        Criteria criteria = TurbineUserPeer.buildCriteria(user);
  +        try
  +        {
  +
  +            NumberKey key = (NumberKey)TurbineUserPeer.doInsert(criteria);     
  +
  +            ((BaseJetspeedUser)user).setUserId(key.toString());
  +
  +        }
  +        catch(Exception e)
  +        {
  +            throw new UserException("Failed to create account '" +
  +                user.getUserName() + "'", e);
  +        }
  +
       }
   
   
  @@ -237,7 +296,32 @@
       public void removeUser(Principal principal)
           throws JetspeedSecurityException
       {
  -        // TODO
  +        JetspeedUser user = getUser(principal);
  +
  +        Criteria criteria = new Criteria();
  +        if (principal instanceof UserNamePrincipal)
  +        {
  +            criteria.add(TurbineUserPeer.LOGIN_NAME, principal.getName());
  +        }
  +        else if (principal instanceof UserIdPrincipal)
  +        {
  +            criteria.add(TurbineUserPeer.USER_ID, principal.getName());
  +        }
  +        else
  +        {
  +            throw new UserException("Invalid Principal Type in removeUser: " + principal.getClass().getName());
  +        }
  +
  +        try
  +        {
  +            TurbineUserPeer.doDelete(criteria);
  +        }
  +        catch(Exception e)
  +        {
  +            throw new UserException("Failed to remove account '" +
  +                user.getUserName() + "'", e);
  +        }
  +
       }
   
   
  @@ -263,7 +347,46 @@
           setInit(true);
        }
   
  -
  +    /**
  +     * Check whether a specified user's account exists.
  +     *
  +     * The login name is used for looking up the account.
  +     *
  +     * @param user the user to be checked.
  +     * @param checkUniqueId make sure that we aren't overwriting another user with different id
  +     * @return true if the specified account exists
  +     * @throws UserException if there was a general db access error 
  +     *         
  +     */
  +    protected boolean accountExists( JetspeedUser user, boolean checkUniqueId )
  +        throws UserException
  +    {
  +        String id = user.getUserId();
  +        Criteria criteria = new Criteria();
  +        criteria.add(TurbineUserPeer.LOGIN_NAME, user.getUserName());
  +        Vector users;
  +        try
  +        {
  +            users = TurbineUserPeer.doSelect(criteria);
  +        }
  +        catch(Exception e)
  +        {
  +            throw new UserException(
  +                "Failed to check account's presence", e);
  +        }
  +        if (users.size() < 1)
  +        {
  +            return false;
  +        }
  +        TurbineUser retrieved = (TurbineUser)users.get(0);
  +        NumberKey key = retrieved.getUserId();
  +        String keyId = key.toString();
  +        if (checkUniqueId && !keyId.equals(id))
  +        {
  +            throw new UserException("User exists but under a different unique ID");
  +        }
  +        return true;
  +    }
   
   }
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>