/*
 * $Id: UserPasswordChangeAction.java,v 1.5 2006/10/04 03:14:28 marbobo Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: UserPasswordChangeAction.java,v $
 * Revision 1.5  2006/10/04 03:14:28  marbobo
 * + Vollständige Unterstützung für Templates implementiert
 * + Alles von Virtoweb auf ProCoBa umgestellt
 *
 * Revision 1.4  2005/02/14 14:01:49  bigmac
 * Applikationsweites CSS konfigurierbar gemacht + Refactorings
 *
 * Revision 1.3  2004/11/02 21:42:28  marbobo
 * + Einige Funktionen für Gast-Benutzer gesperrt
 * + WebShare.LOGIN_PAGE mit WebShare.getLoginPage() ersetzt
 *
 * Revision 1.2  2004/08/08 15:16:00  marbobo
 * + Refactorings und Behandlung von Fehlermeldungen
 *
 * Revision 1.1  2004/03/25 13:57:06  marbobo
 * ModifyUserPasswordAction und Form umbenannt und komplett überarbeitet
 *
 * Revision 1.5  2004/03/16 00:41:43  marbobo
 * UserProfileAction und UserProfileForm auf request-scope umgestellt
 *
 * Revision 1.4  2004/03/11 20:17:16  bigmac
 * Anpassungen an VKCUserSerializer
 *
 * Revision 1.3  2003/12/24 10:12:10  bigmac
 * Projektweite Import-Optimierung
 *
 * Revision 1.2  2003/09/04 10:12:53  marbobo
 * Code pflege
 *
 * Revision 1.1  2003/08/18 21:12:18  marbobo
 * Package verschoben
 *
 * Revision 1.1  2003/08/07 10:38:23  marbobo
 * Initial Version
 *
 */
package vkc.profile.action;

import java.security.MessageDigest;
import java.sql.Timestamp;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import vkc.db.entities.VKCUser;
import vkc.db.serializer.VKCUserSerializer;
import vkc.profile.form.UserPasswordChangeForm;
import vkc.util.VKCCoder;
import vkc.view.WebShare;

/**
 * Action-Klasse zum Ändern des Passworts eines 
 * Benutzer-Objektes
 *
 * @author $author$
 * @version $Revision: 1.5 $
 */
public final class UserPasswordChangeAction extends Action {
	private ActionForward DEFAULT_FORWARD = new ActionForward( "/templates/${template.name}/userProfile/userPasswordChange.jsp" );

    private ActionForward INFO_FORWARD = 
		new ActionForward( "/templates/${template.name}/common/InfoPage.jsp" );

	/**
	 * Hier werden die entsprechenden Aktionen eingeleitet
	 */
	public ActionForward execute( ActionMapping mapping, 
	        					  ActionForm f, 
	        					  HttpServletRequest request, 
	        					  HttpServletResponse response )
	throws Exception {
		UserPasswordChangeForm form = (UserPasswordChangeForm) f;

		if ( form.getUser().isGuestUser() ) {
			request.setAttribute( WebShare.INFO_KEY, "vkc.info.access_denied" );
			
			return INFO_FORWARD;
		}

		// Dispatches the Action
		if ( request.getParameter( "action.back" ) != null ) {
			return new ActionForward( "/userProfile.do?initialize=true" );
		} else if ( request.getParameter( "action.change.user.password" ) != null ) {
			return handleChangePasswordAction( form, request );
		} else {
			return DEFAULT_FORWARD;
		}  
	}

	/**
	 * Diese Methode ändert das Passwort eines Benutzers
	 */
	public ActionForward handleChangePasswordAction( UserPasswordChangeForm form, HttpServletRequest request ) throws Exception {
		VKCUser user = form.getUser();

		String username = user.getUser();
		String newpassword = form.getNewpassword().trim();
		byte[] md5Bytes = ( username + newpassword ).getBytes( "ISO-8859-1" );

		MessageDigest digest = MessageDigest.getInstance( "MD5" );
		digest.reset();
		digest.update( md5Bytes );
		byte[] fingerPrint = digest.digest();
		fingerPrint = VKCCoder.base64Encode( fingerPrint );
		String md5Password = new String( fingerPrint, "ISO-8859-1" );
		user.setPassword( md5Password );
		user.setPasswordChanged( true );
		user.setPasswordChangedTs( new Timestamp( System.currentTimeMillis() ) );
        VKCUserSerializer.saveUser( user );
		form.setPasswordChanged( true );
		request.getSession().setAttribute( WebShare.USER_KEY, user );

		return DEFAULT_FORWARD;
	}
}