<?
include_once("./_common.php");
include_once($g4[path]."/zm.ssl/class/ssRsa.php");			//-- 스마일 서브의 RSA 키
include_once($g4[path]."/zm.ssl/class/ssRsaForm.php");
/*
	로그인 기록 저장. zm_write_login(아이디, 로그인 페이지, 인증타입, 결과);
*/

$mb_id       = $_POST[mb_id];
$mb_password = $_POST[mb_password];

$errmsg		= "";							//-- 로그인 실패 안내. ziumsoft
$errsw		= 1;							//-- 에러 스위치. 1:성공, 2이상:실패

if(!trim($mb_id) || !trim($mb_password)) {
	$errmsg		= "아이디 또는 패스워드에 공백을 포함 할 수 없습니다.";
	$errsw		= 2;
}

$mb			= get_member($mb_id);

if(!$mb[mb_id] || (sql_password($mb_password) !== $mb[mb_password]) && ($errsw == 1)) {
	if($mb[mb_id])	$errsw		= 3;		//-- 유효한 아이디 일 때만 로그 기록
	else			$errsw		= 4;
}

//-- 없는 아이디로 로그인을 연속 실패 했을 때도 횟수를 제한 시킴.
//-- 왜냐하면 없는 아이디라고 연속 실패 처리를 하지 않으면 유효한 아이디인지 아닌지를 찾아내는데 악용 될 수 있음
//-- 오류 안내 멘트는 실제와 똑같이
if($mb_id == $_COOKIE[cook_id]){
	if($_COOKIE[cook_failtimes] >= 5)
		alert("연속 로그인 실패로 " . $zm_config[loginbanterm] . "시간 후에 다시 로그인 할 수 있습니다.");
}

//-- 로그인 연속 실패 시 재시도 시간 적용
$ip			= $_SERVER[REMOTE_ADDR];
$today		= date("Y-m-d 00:00:00", $g4[server_time]);		//-- 오늘 날짜 00시
if($zm_config[loginbanterm] > 0) {
	$icd		= zm_table_decode($icd);

	//-- 연속 실패 횟수 ziumsoft.
	$res		= sql_fetch("select count(db_id) as loginfail from $zmb[table_login_log] where db_id='$mb_id' and db_flag='0' and (db_date > '$today')");
	$failtimes	= number_format($res[loginfail]);

	//-- 마지막 로그인 시도 했던 시간
	$loginfo	= sql_fetch("select db_id, db_date from $zmb[table_login_log] where db_id='$mb_id' and db_result='실패' order by db_date desc limit 0, 1");

	if($failtimes >= $zm_config[loginfailcount]) {
		if($loginfo[db_date] >= date("Y-m-d H:i:s", $g4[server_time]-($zm_config[loginbanterm] * 60 * 60))) {
			//-- 더 기다렷!!
			alert("연속 로그인 실패로 " . $zm_config[loginbanterm] . "시간 후에 다시 로그인 할 수 있습니다.");
		}else{
			//-- 시간 지났으면 오늘 로그인 실패한거 다시 초기화
			sql_query("update $zmb[table_login_log] set db_flag='1' where db_id='$mb_id' and db_flag='0' and (db_date > '$today') and db_ip='$ip'");
		}
	}
}

$icd		= zm_table_encode($mb_id);		//-- 아이디를 인코딩
$_POST[url]	= $url = urldecode($_POST[url]);

//-- 차단된 아이디
if($mb[mb_intercept_date] && $mb[mb_intercept_date] <= date("Ymd", $g4[server_time]) && ($errsw == 1)) {
    $date		= preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb[mb_intercept_date]);
    $errmsg		= "접근 금지 된 아이디입니다.\\n\\n처리일 : $date";
	$errsw		= 2;
}

//-- 탈퇴한 아이디
if($mb[mb_leave_date] && $mb[mb_leave_date] <= date("Ymd", $g4[server_time]) && ($errsw == 1)) {
    $date		= preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb[mb_leave_date]);
    $errmsg		= "탈퇴한 아이디 입니다.\\n\\n탈퇴일 : $date";
	$errsw		= 2;
}

if($config[cf_use_email_certify] && !preg_match("/[1-9]/", $mb[mb_email_certify]) && ($errsw == 1)) {
    goto_url($g4[path] . "/bbs/zm.register_send_certify.php?icd=".$icd);
}

//-- 로그인 실패 시 로그인 페이지로 이동
if($errsw > 1)	{
	if($errsw >= 3)	{
		if($errsw == 3)	zm_write_login($mb_id, "$url", "로그인", "실패");
		goto_url($g4[path] . "/bbs/login.php?icd=$icd");
	}else{
		alert($errmsg);
	}
}else{
	//-- 로그인 성공 시 오늘 로그인 실패한거 다시 초기화
	sql_query("update $zmb[table_login_log] set db_flag='1' where db_id='$mb_id' and db_flag='0' and (db_date > '$today') and db_ip='$ip'");
}

$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
@include_once("$member_skin_path/login_check.skin.php");

//-- 회원아이디 세션 생성
//-- FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 - 110106
set_session('ss_mb_id', $mb[mb_id]);
set_session('ss_mb_key', md5($mb[mb_datetime] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']));

zm_write_login($mb_id, "$url", "로그인", "성공");

// 3.26
// 아이디 쿠키에 한달간 저장
if ($auto_login) {
    // 3.27
    // 자동로그인, 쿠키 한달간 저장 -------------
    $key	= md5($_SERVER[SERVER_ADDR] . $_SERVER[REMOTE_ADDR] . $_SERVER[HTTP_USER_AGENT] . $mb[mb_password]);
    set_cookie('ck_mb_id', $mb[mb_id], 86400 * 31);
    set_cookie('ck_auto', $key, 86400 * 31);
} else {
    set_cookie('ck_mb_id', '', 0);
    set_cookie('ck_auto', '', 0);
}

if ($url)
{
    $link = urldecode($url);
    // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
    if (preg_match("/\?/", $link))  $split= "&";
    else							$split= "?";

    // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
    foreach($_POST as $key=>$value) {
        if ($key != "mb_id" && $key != "mb_password" && $key != "x" && $key != "y" && $key != "url") {
            $link	.= "$split$key=$value";
            $split	= "&";
        }
    }
} else
    $link = $g4[url];

zm_gourl($link);
?>
