<?php
include_once('./_common.php');
include_once(G5_LIB_PATH.'/login_guard.lib.php');

$g5['title'] = "로그인 검사";

$login_guard_state = login_guard_get_state();
$login_guard_captcha_required = login_guard_is_captcha_required($login_guard_state);
if ($login_guard_captcha_required) {
    $captcha_key = isset($_POST['captcha_key']) ? trim($_POST['captcha_key']) : '';
    if (!login_guard_verify_captcha_input($captcha_key)) {
        alert('로그인 실패가 누적되어 자동등록방지 숫자 입력이 필요합니다.\n\n자동등록방지 숫자를 정확히 입력해 주세요.\n(30분 후 자동 해제)');
    }
}

// 아미나빌더 소셜로그인
$is_apms_social_check = false;
if(isset($_POST['apms_social']) && $_POST['apms_social']) {

	// 기존 소셜계정정보
	$mb_sn = get_session('mb_sn');

	if (!$mb_sn)
		alert('정상적인 접근이 아닙니다.');

	$mb = sql_fetch(" select * from {$g5['member_table']} where mb_sn = '{$mb_sn}' ", false);

	if (!$mb['mb_id'])
		alert('가입된 소셜계정 정보가 없습니다.');

	$mb_id = $mb['mb_id'];
	$is_apms_social_check = true;

} else {

	$mb_id_input = trim($_POST['mb_id']);
	$mb_password = trim($_POST['mb_password']);

	if (!$mb_id_input || !$mb_password)
		alert('회원아이디나 비밀번호가 공백이면 안됩니다.');

	// 1. 아이디로 회원정보 조회
	$mb = get_member($mb_id_input);

	// 2. 아이디로 조회가 안되면 이메일로 회원정보 조회
	if (!$mb['mb_id']) {
		$mb = sql_fetch(" select * from {$g5['member_table']} where mb_email = '{$mb_id_input}' ");
	}

	// 조회된 회원이 있다면 mb_id 변수를 실제 회원의 아이디로 설정
	if ($mb['mb_id']) {
		$mb_id = $mb['mb_id'];
	} else {
		// 조회가 안된 경우, 입력값을 mb_id로 유지 (에러 메시지 처리 등을 위해)
		$mb_id = $mb_id_input;
	}
}

//소셜 로그인추가 체크
$is_social_login = false;
$is_social_password_check = false;

// 소셜 로그인이 맞는지 체크하고 해당 값이 맞는지 체크합니다.
if(function_exists('social_is_login_check')){
    $is_social_login = social_is_login_check();

    //패스워드를 체크할건지 결정합니다.
    //소셜로그인일때는 체크하지 않고, 계정을 연결할때는 체크합니다.
    $is_social_password_check = social_is_login_password_check($mb_id);
}

$is_social_password_check = ($is_apms_social_check) ? true : $is_social_password_check;

// 소셜 로그인이 맞다면 패스워드를 체크하지 않습니다.
// 가입된 회원이 아니다. 비밀번호가 틀리다. 라는 메시지를 따로 보여주지 않는 이유는
// 회원아이디를 입력해 보고 맞으면 또 비밀번호를 입력해보는 경우를 방지하기 위해서입니다.
// 불법사용자의 경우 회원아이디가 틀린지, 비밀번호가 틀린지를 알기까지는 많은 시간이 소요되기 때문입니다.
if (!$is_social_password_check && (!$mb['mb_id'] || !login_password_check($mb, $mb_password, $mb['mb_password'])) ) {
    $login_guard_state = login_guard_record_failure($login_guard_state);
    if (login_guard_is_captcha_required($login_guard_state)) {
        alert('로그인 실패가 5회 누적되었습니다.\n자동등록방지 숫자 입력 후 다시 시도해 주세요.\n(30분 후 자동 해제)');
    }
    alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}

// 차단된 아이디인가?
if ($mb['mb_intercept_date'] && $mb['mb_intercept_date'] <= date("Ymd", G5_SERVER_TIME)) {
    $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_intercept_date']);
    alert('회원님의 아이디는 접근이 금지되어 있습니다.\n처리일 : '.$date);
}

// 탈퇴한 아이디인가?
if ($mb['mb_leave_date'] && $mb['mb_leave_date'] <= date("Ymd", G5_SERVER_TIME)) {
    $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_leave_date']);
    alert('탈퇴한 아이디이므로 접근하실 수 없습니다.\n탈퇴일 : '.$date);
}

// 아미나 소셜계정 이메일 정보 업데이트
if($is_apms_social_check) {
	include_once(G5_LIB_PATH.'/register.lib.php');

	$mb_email = get_email_address(trim($_POST['mb_email']));

	if ($msg = empty_mb_email($mb_email)) alert($msg, "", true, true);
	if ($msg = valid_mb_email($mb_email)) alert($msg, "", true, true);
	if ($msg = prohibit_mb_email($mb_email)) alert($msg, "", true, true);

	if ($mb_email != $mb['mb_email']) {
		if ($msg = exist_mb_email($mb_email, $mb_id)) alert($msg, "", true, true);

		//회원정보에 이메일 업데이트
		$mb_sql = "mb_email = '{$mb_email}'";
		if(is_use_email_certify()) {
			$mb_sql .= ", mb_email_certify = ''";

			//값 재설정
			$mb['mb_email_certify'] = '';
			$mb['mb_email'] = $mb_email;
		}
		sql_fetch(" update {$g5['member_table']} set $mb_sql where mb_id = '{$mb_id}' ", false);

	}
}

// 메일인증 설정이 되어 있다면
if ( is_use_email_certify() && !preg_match("/[1-9]/", $mb['mb_email_certify'])) {
    $ckey = md5($mb['mb_ip'].$mb['mb_datetime']);
    confirm("{$mb['mb_email']} 메일로 메일인증을 받으셔야 로그인 가능합니다. 다른 메일주소로 변경하여 인증하시려면 취소를 클릭하시기 바랍니다.", G5_URL, G5_BBS_URL.'/register_email.php?mb_id='.$mb_id.'&ckey='.$ckey);
}

@include_once($member_skin_path.'/login_check.skin.php');

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

// 회원의 토큰키를 세션에 저장한다. /common.php 에서 해당 회원의 토큰값을 검사한다.
if(function_exists('update_auth_session_token')) update_auth_session_token($mb['mb_datetime']);

// 포인트 체크
if($config['cf_use_point']) {
    $sum_point = get_point_sum($mb['mb_id']);

    $sql= " update {$g5['member_table']} set mb_point = '$sum_point' where mb_id = '{$mb['mb_id']}' ";
    sql_query($sql);
}

// 3.26
// 아이디 쿠키에 한달간 저장
if (isset($auto_login) && $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);
    // 자동로그인 end ---------------------------
} else {
    set_cookie('ck_mb_id', '', 0);
    set_cookie('ck_auto', '', 0);
}

if ($url) {
    // url 체크
    check_url_host($url, '', G5_URL, true);

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

    // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
    $post_check_keys = array('mb_id', 'mb_password', 'x', 'y', 'url', 'slr_url');

    //소셜 로그인 추가
    if($is_social_login){
        $post_check_keys[] = 'provider';
    }

    foreach($_POST as $key=>$value) {
        if ($key && !in_array($key, $post_check_keys)) {
            $link .= "$split$key=$value";
            $split = "&amp;";
        }
    }

	// 도메인 붙이기
	$p = @parse_url($link);
	if(!isset($p['host']) || !$p['host']) {
		if(G5_URL) {
			$pu = @parse_url(G5_URL);
			$host_url = (isset($pu['path']) && $pu['path']) ? str_replace($pu['path'], '', G5_URL) : G5_URL;
			$link = $host_url.$link;
		}
	}

    // 레이어 팝업 대상 페이지는 로그인 후에도 레이어 컨텍스트를 유지
    $layer_popup_files = array(
        'point.php',
        'memo.php',
        'memo_view.php',
        'memo_form.php',
        'profile.php',
        'scrap.php',
        'email.php',
        'poll_result.php',
        'coupon.php',
        'password_lost.php'
    );

    $link_path = parse_url($link, PHP_URL_PATH);
    $link_file = $link_path ? basename($link_path) : '';
    if ($link_file && in_array($link_file, $layer_popup_files)) {
        $link_query = parse_url($link, PHP_URL_QUERY);
        parse_str((string)$link_query, $link_params);
        if (!isset($link_params['g5_layer'])) {
            $link_params['g5_layer'] = '1';
            $base = preg_replace('/\?.*$/', '', $link);
            $link = $base.'?'.http_build_query($link_params, '', '&amp;');
        }
    }

} else  {
    $link = G5_URL;
}

// 내글반응 체크
if(isset($mb['as_response'])) {
	$row = sql_fetch(" select count(*) as cnt from {$g5['apms_response']} where mb_id = '{$mb['mb_id']}' and confirm <> '1' ", false);
	if($mb['as_response'] != $row['cnt']) {
		sql_query(" update {$g5['member_table']} set as_response = '{$row['cnt']}' where mb_id = '{$mb['mb_id']}' ", false);
	}
}

// 쪽지체크
if(isset($mb['as_memo'])) {
	$row = sql_fetch(" select count(*) as cnt from {$g5['memo_table']} where me_recv_mb_id = '{$mb['mb_id']}' and me_read_datetime = '0000-00-00 00:00:00' ");
	if($mb['as_memo'] != $row['cnt']) {
		sql_query(" update {$g5['member_table']} set as_memo = '{$row['cnt']}' where mb_id = '{$mb['mb_id']}' ", false);
	}
}

//소셜 로그인 추가
if(function_exists('social_login_success_after')){
    // 로그인 성공시 소셜 데이터를 기존의 데이터와 비교하여 바뀐 부분이 있으면 업데이트 합니다.
    $link = social_login_success_after($mb, $link);
    social_login_session_clear(1);
}

//영카트 회원 장바구니 처리
if(defined('G5_USE_SHOP') && G5_USE_SHOP && function_exists('set_cart_id')){
    $member = $mb;

    // 보관기간이 지난 상품 삭제
    cart_item_clean();
    set_cart_id('');
    $s_cart_id = get_session('ss_cart_id');
    // 선택필드 초기화
    $sql = " update {$g5['g5_shop_cart_table']} set ct_select = '0' where od_id = '$s_cart_id' ";
    sql_query($sql);
}

// 관리자로 로그인시 DATA 폴더의 쓰기 권한이 있는지 체크합니다. 쓰기 권한이 없으면 로그인을 못합니다.
if( is_admin($mb['mb_id']) && is_dir(G5_DATA_PATH.'/tmp/') ){
    $tmp_data_file = G5_DATA_PATH.'/tmp/tmp-write-test-'.time();
    $tmp_data_check = @fopen($tmp_data_file, 'w');
    if($tmp_data_check){
        if(! @fwrite($tmp_data_check, G5_URL)){
            $tmp_data_check = false;
        }
    }
    if (is_resource($tmp_data_check)) @fclose($tmp_data_check);
    @unlink($tmp_data_file);

    if(! $tmp_data_check){
        alert("data 폴더에 쓰기권한이 없거나 또는 웹하드 용량이 없는 경우\\n로그인을 못할수도 있으니, 용량 체크 및 쓰기 권한을 확인해 주세요.", $link);
    }
}

goto_url($link);
