/*
 * PasswordReminder.java
 *
 * Created on 10 de agosto de 2004, 18:54
 */

package com.fenalco.servlets;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fenalco.entities.DataAccess;
import com.fenalco.entities.PasswordHandler;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;
import com.fenalco.utilities.crypto.MD5;
import com.fenalco.utilities.database.Transaction;
import com.fenalco.utilities.mail.MailHandler;



/**
 *
 * @author  andres
 * @version
 *
 * Este servlet se encarga de recordarle la contraseña al usuario
 */
public class PasswordReminder extends HttpServlet {
    
    /** Initializes the servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    /** Destroys the servlet.
     */
    public void destroy() {
        
    }
    
    /**
     * recibe en el request el nombre de usuario y la cédula,
     * con esto crea un objeto de la clase user pasandole al constructor el
     * nombre de usuario para obtener el correo electrónico del usuario.
     *
     * Parametros que viene en el request
     * - login: nombre de usuario
     * - idNumber: cédula
     *
     * Una vez que se tiene el objeto user, se obtiene la cédula con la que
     * viene por request, y si son iguales hace lo siguiente:
     *
     * - Genera una cadena de texto aleatoria de 8 caracteres que será la nueva
     * contraseña (no se puede recordarle al usuario la misma contraseña que
     * tenia, ya que esta se guarda encriptada en la base de datos)
     *
     * - asigna la nueva contraseña al objeto usuario y le indica que se actualice
     * en la base de datos usando el método <CODE>update</CODE>
     * (al asignarle la nueva contraseña al usuario, hay que encriptarla
     * primero creando un objeto de la clase <CODE>com.fenalco.utilities.crypto.MD5</CODE>
     * y llamando al método <CODE>calcMD5</CODE> al cual se le envia la cadena que debe
     * encriptar, en este caso es el password).
     *
     * - obtiene el correo del usuario y arma un mensaje enviandole la nueva contraseña
     *
     * - envia el mensaje de correo con el método estático <CODE>sendMail</CODE> de la clase <CODE>MailBuilder</CODE>
     * y redirecciona a <CODE>/index.jsp</CODE> enviandole un mensaje
     * que indique que la nueva contraseña se le ha enviado por correo
     *
     * En caso de que la cédula recibida en el request no coincida con la que se
     * encuentra en el objeto <CODE>User</CODE>, se redirecciona a <CODE>olvidocontrasena.jsp</CODE>
     * y se le envia un mensaje indicandole que los datos son incorrectos
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        
        String url ="/index.jsp";
        String message = "";
        String login = request.getParameter("login");
        String id = request.getParameter("idNumber");
        
        User user = new User(login);
        String email = user.getEmail();
        Transaction transaction = new Transaction();
        String passwd = "";
        String content = "";
        
        if(id.equals(user.getIdentificationNumber())){
            String template = "Su nueva contraseña es : ";
            passwd = PasswordHandler.buildRandPasswd();
            MD5 md5 = new MD5();
            user.setPassword(md5.calcMD5(passwd));
            user.update(transaction);
            transaction.execute();
            content = template + " "+passwd;
            MailHandler mh = MailHandler.getInstance();
            mh.sendMail(DataAccess.getPvlEmail(), email, "recordatorio contraseña PVL", content);
            
        }
        else{
            url = "/olividocontrasena.jsp";
            message = MessageBuilder.buildMessage(2);
        }
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
        request.setAttribute("message",message);
        dispatcher.forward(request,response);
    }
    
    
    
    
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        processRequest(request, response);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
}
