
package org.apache.jetspeed.modules.actions;

// jetspeed stuff
import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.om.security.JetspeedUser;

// Turbine stuff
import org.apache.turbine.util.RunData;
import org.apache.turbine.util.ParameterParser;
import org.apache.turbine.om.security.User;
import org.apache.turbine.util.Log;
import org.apache.turbine.util.RunData;

import java.util.Iterator;

/**
 * Secure passwords action.
 * Depending on the "type" parameter the passwords will either be encrypted
 * or decrypted (how naive).
 * 
 * @author <a href="mark_orciuch@ngsltd.com">Mark Orciuch</a>
 * @version $Id: SecurePasswords.java,v 1.2 2002/07/22 21:43:11 morciuch Exp $
 */
public class SecurePasswords extends org.apache.turbine.modules.Action
{

    public static final String TYPE = "type";
    public static final String TYPE_ENCRYPT = "encrypt";

    /**
     * Perform the action
     */
    public void doPerform(RunData data) throws Exception
    {
        try
        {
            ParameterParser parser = data.getParameters();
            String type = parser.getString(TYPE);
            type = type == null ? this.TYPE_ENCRYPT : type;
            if (type != null)
            {
                Iterator users = JetspeedSecurity.getUsers();
                while (users.hasNext())
                {
                    JetspeedUser user = (JetspeedUser) users.next();
                    Log.debug(this.getClass().getName()+": "+type+"ing password for user ["+user.getUserName()+"]");
                    String newpassword = null;
                    // Change encrypt/decrypt password
                    if (type.equalsIgnoreCase(TYPE_ENCRYPT))
                    {
                        newpassword = JetspeedSecurity.encryptPassword(user.getPassword());
                    }
                    else
                    {
                        throw new Exception("Invalid type parameter: ["+type+"]");
                    }
                    user.setPassword(newpassword);
                    // Save to database
                    JetspeedSecurity.saveUser(user);
                    Log.info(this.getClass().getName()+": "+type+"ed password for user ["+user.getUserName()+"]");
                }
            }
            else
            {
                throw new Exception("Missing type parameter");
            }
            Log.info("All passwords have been successfully "+type+"ed");
        }
        catch (Exception e)
        {
            Log.error(e.getMessage());
        }
    }

}
