<?
require_once('include/global.php');
require_once('include/mail_lib.php');
require_once('login_2fa_conf.inc.php');

set_time_limit(1200);

// check
	$_member_2fa_info = member_2fa_info();

	// [2025-11-18] 필수 선택이면서 otp 값이 없고, 필수 선택이 아니면서 다음에 저장이 없으면 오류
	if ((!$_POST['m_otp'] && $_member_2fa_info['m_2fa_required'] === 'Y') &&
		(! $_POST['save_for_later'] && $_member_2fa_info['m_2fa_required'] !== 'Y'))
		msg('올바른 URL로 접근하여 주십시오');

	// [2025-11-18] 다음에 등록 추가로 분기
	if (! $_POST['save_for_later'] && $_member_2fa_info['m_2fa_isuse'] === 'Y') {
		// 키 기존 SESSION에서 가져오기
		if ( ! isset($_POST['secret'])) {
			$_POST['secret'] = $_member_2fa_info['m_2fa_code'];
		}

		// otp 검사
		$check = tfa_OTP_check($_POST['secret'], $_POST['m_otp']);
	} elseif ($_member_2fa_info['m_2fa_required'] != 'Y' && $_POST['save_for_later']) {
		$check = true;
	} else {
		$check = false;
	}

// 2단계 인증 성공 여부
	$_SESSION['is_2fa_successful'] = $check;

	if (! $check) {
		sleep(1);
		errorlog("[LOGIN_2FA_FAIL]" . $AUTH['auth_m_email'], "MEMBER");
		msg('OTP 인증 코드가 일치하지 않거나, 유효 시간이 지났습니다.\\n\\nOTP 앱을 다시 확인 후 입력해주세요.');
	}

	// 다음에 저장이 아닐 경우에만 저장 및 등록 필요
	if (! $_POST['save_for_later'] && $_member_2fa_info['m_2fa_isuse'] === 'Y') {
		// 시크릿키, 등록한 IP, 등록한 시간 저장
		if (($_member_2fa_info['m_2fa_code'] === null || $_member_2fa_info['m_2fa_code'] === '')) {
			tfa_OTP_save($_POST['secret']);
		}

		// 신뢰할 수 있는 기기 등록
		if (isset($_POST['is_device'])) {
			trustedDeviceAdd($AUTH['auth_m_no']);
		}
	}
page_loading_view("로그인중입니다.");


// 아웃룩에서 메일을 가져간후 삭제했을 경우 웹메일 디비에서도 자동삭제함.
	sync_mailfile_db();

// end
	#page_loading_view_hidden();

	// [2024-09-11] http, https 등 URL scheme 가 없을 경우만 이동 지원 (다른 도메인으로 이동 예방)
	$url = parse_url($_POST['back_url']);
	if ($_POST['back_url'] && ! isset($url['scheme']))
	{
		movepage(stripslashes($_POST['back_url']));
	} else
	{
		movepage($G_SYS['URL_ROOT'] . '/index.php');
	}	// if()

require_once('include/global_end.php');
?>