/* 
    IntraPMS Project
    그룹웨어 로그인 서블릿

    
*/

import java.io.*;
import java.lang.*;

import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.etri.groupware.*;
import com.etri.groupware.organization.*;
import com.etri.groupware.authentication.* ;

/**
 * 그룹웨어로 로그인 하는 서블릿....
 */
public class LogInServlet extends HttpServlet
{
	GroupwareControllerInterface gc = null ;
	AuthenticationControllerInterface  aci = null ;
	Properties myPro = null ;
	
		
	public void init ( ServletConfig config ) throws ServletException {
		super.init ( config ) ;
		System.out.println ( "Groupware LogInServlet init () Call..........." ) ;
				
		// 그룹웨어 컨트롤러를 생성한다.
		// 먼저 프라퍼티를 생성한다.
		myPro = new Properties ( ) ;
	
		// DB매니저 구현 클래스 이름 설정
		myPro.put ( "OrganizationDBManagerClassName" , "PandaSoftOrganizationDBManager" ) ;
		myPro.put ( "AuthenticationDBManagerClassName" , "PandaSoftAuthenticationDBManager" ) ;
		myPro.put ( "BBSDBManagerClassName" , "PandaSoftBBSDBManager" ) ;
		myPro.put ( "EDADBManagerClassName" , "PandaSoftEDADBManager" ) ;
		myPro.put ( "MailDBManagerClassName" , "PandaSoftMailDBManager" ) ;
		////////////////////////////////////////
		System.out.println ( "사용자 인증 서블릿의 프라퍼티 설정도 무사히 마쳤습니다." ) ;
		
		try {
			gc = GroupwareController.init ( myPro ) ;
			/////////////////////////////////////////////////
			System.out.println ( "사용자 인증 서블릿의 그룹웨어 컨트롤러 생성도 무사히 마쳤습니다." ) ;
			
			// 사용자 인증 컨트롤러를 가져온다.
			aci = gc.createAuthenticationController ( ) ;
			///////////////////////////////////////////////////////////
			System.out.println ( "사용자 인증 컨트롤러 생성도 무사히 마쳤습니다." ) ;
		} catch ( Exception e ) { }
	}
	
	public void destroy ( ) {
		System.out.println ( "Groupware LogInServlet destroy () Call..........." ) ;
		super.destroy();
		DBConnectionManager.instance.release();
		
	}
	
	/*----------------------------------------------------------------- */
	/**
	 [메소드이름]: doPost<br>
	 [기능]: 아이디와 패스워드가 유효한지 확인한다.<br>
	 [파라미터]: HttpServletRequest req , HttpServletResponse res<br>
	 [호출자] : 사용자<br>
	 */
	/*--------------------------------------------------------------- */		
	public void doPost (HttpServletRequest	req , HttpServletResponse res) throws ServletException, IOException {
		try {  	     
			String id = req.getParameter("id");
			String password = req.getParameter("password");
			
			ServletOutputStream out;
			res.setContentType("text/html;,charset=euc-kr");
			out = res.getOutputStream();
			out.println("<html><head><title>Login Servlet </title></head><body>");	 
			
			id = new String ( id.getBytes ( "ISO-8859-1" ) , "EUC-KR" ) ;
			password = new String ( password.getBytes("ISO-8859-1") , "EUC-KR" ) ;
			
			LoginResultStatus loginResultStatus = aci.loginUser ( id , password ) ;
			
			int status = loginResultStatus.getResultStatus();
			String userKind = loginResultStatus.userKind;
			String name = loginResultStatus.userName;
			String department = loginResultStatus.department;
			String team = loginResultStatus.team;
			
			
			if ( status == 0 ) {
			// 사용자 인증이 성공하였습니다...
			////////////////////	
			 ResourceBundle env = ResourceBundle.getBundle("MailEnvironments");		
			
		         HttpSession session = req.getSession(true);
		         HttpSessionContext context = session.getSessionContext();         
		          
		         session.putValue("Authentication",new String("true"));
		         session.putValue("Kind", userKind);
		         session.putValue("Id", id);
		         session.putValue("Name", name);
		         session.putValue("Password", password );
		         session.putValue("Department",department);
		         session.putValue("Team",team);
		         session.putValue("Mail",env.getString("mailserver.domain"));
		          
		         res.sendRedirect("MainServlet");
	       } else {
	       	// 사용자 인증에 실패하였습니다.
	       	if ( name.equals ( "id" ) ) {
	       		// 비밀번호가 틀린 경우 입니다.
	       		res.sendRedirect("../login-pass-err.html");
	       	} else if ( name.equals ( "null" ) ) {
	       		// 아이디가 존재하지 않습니다...
	       		res.sendRedirect("../login-id-err.html");
	       	}	       	
	       }
		} catch(Exception e) {
			res.sendRedirect("../Login.html");
		}
	}

	/*----------------------------------------------------------------- */
	/**
	 [메소드이름]: doGet<br>
	 [기능]: 인증되지 않은 사용자의 세션을 지우고 로그인 화면으로 돌려 보낸다.<br>
	 [파라미터]: HttpServletRequest req , HttpServletResponse res<br>
	 [호출자] : 사용자<br>
	 */
	/*--------------------------------------------------------------- */		
	public void doGet (HttpServletRequest	req , HttpServletResponse res) throws ServletException, IOException {
		
	    try{	
		HttpSession session = req.getSession(false);
		
		session.invalidate();
		res.sendRedirect("../Login.html");
            }catch(Exception e){
            	res.sendRedirect("../Login.html");
            }
	}
}
	