/**
 * 이 소스는 Spring 프레임워크 워크북에서 사용한 예제 소스입니다. 
 * 이 소스는 모든 개발자들이 자유롭게 수정 및 배포할 수 있습니다. 
 * 단, 이 소스를 기반으로 새로운 애플리케이션을 개발할 경우 출처를 명시해 주시면 됩니다. 
 */
package net.javajigi.user.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.javajigi.user.PasswordMismatchException;
import net.javajigi.user.UserNotFoundException;
import net.javajigi.user.model.Authenticate;
import net.javajigi.user.model.User;
import net.javajigi.user.service.UserService;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;

public class LoginAction extends DispatchAction {
	private UserService userService = null;

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public ActionForward login(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		DynaActionForm userForm = (DynaActionForm) form;
		Authenticate auth = (Authenticate) userForm.get("authenticate");
		try {
			userService.login(auth.getUserId(), auth.getPassword());

			User user = userService.findUser(auth.getUserId());
			user.setPassword(null);
			HttpSession session = request.getSession();
			session.setAttribute("loginUser", user);

			return mapping.findForward("index");
		} catch (UserNotFoundException e) {
			request.setAttribute("errorMessage", e.getMessage());

			return mapping.getInputForward();
		} catch (PasswordMismatchException e) {
			request.setAttribute("errorMessage", e.getMessage());
			
			return mapping.getInputForward();
		}
	}

	public ActionForward logout(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		HttpSession session = request.getSession();
		session.removeAttribute("loginUser");

		return mapping.findForward("index");
	}
}
