94 lines
2.3 KiB
PHP
94 lines
2.3 KiB
PHP
<?php
|
|
namespace sammo;
|
|
|
|
require(__DIR__.'/../vendor/autoload.php');
|
|
|
|
WebUtil::requireAJAX();
|
|
|
|
$RootDB = RootDB::db();
|
|
$session = Session::getInstance();
|
|
if($session->isLoggedIn()){
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>true,
|
|
'reason'=>'이미 로그인 되어있습니다.'
|
|
]);
|
|
}
|
|
|
|
if(!$session->isLoggedIn(true)){
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>true,
|
|
'reason'=>'인증 코드를 입력할 수 있는 상태가 아닙니다.'
|
|
]);
|
|
}
|
|
|
|
$otp = Util::getPost('otp', 'int');
|
|
if(!$otp){
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>false,
|
|
'reason'=>'인증 코드가 입력되지 않았습니다.'
|
|
]);
|
|
}
|
|
|
|
$userNo = $session->getUserID();
|
|
|
|
$oauthInfo = Json::decode(RootDB::db()->queryFirstField('SELECT oauth_info FROM member WHERE no=%i', $userNo))??[];
|
|
if(!$oauthInfo){
|
|
$session->logout();
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>true,
|
|
'reason'=>'계정이 정상적으로 등록되어있지 않습니다.'
|
|
]);
|
|
}
|
|
|
|
|
|
$OTPValue = $oauthInfo['OTPValue']??null;
|
|
$OTPTrialUntil = $oauthInfo['OTPTrialUntil']??null;
|
|
$OTPTrialCount = $oauthInfo['OTPTrialCount']??0;
|
|
$now = TimeUtil::now();
|
|
|
|
if(!$OTPTrialUntil || $OTPTrialUntil <= $now){
|
|
$session->logout();
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>true,
|
|
'reason'=>'인증 기한이 만료되었습니다. 다시 로그인해주세요.'
|
|
]);
|
|
}
|
|
|
|
if($OTPTrialCount <= 0){
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>false,
|
|
'reason'=>"인증 실패 횟수를 초과했습니다. {$OTPTrialUntil}까지 기다려주세요."
|
|
]);
|
|
}
|
|
|
|
if($OTPValue != $otp){
|
|
$OTPTrialCount -= 1;
|
|
$oauthInfo['OTPTrialCount'] = $OTPTrialCount;
|
|
RootDB::db()->update('member', [
|
|
'oauth_info'=>Json::encode($oauthInfo)
|
|
], 'no=%i', $userNo);
|
|
Json::die([
|
|
'result'=>false,
|
|
'reset'=>false,
|
|
'reason'=>"인증 번호가 틀렸습니다. {$OTPTrialCount}회 더 시도할 수 있습니다."
|
|
]);
|
|
}
|
|
|
|
$tokenValidUntil = TimeUtil::nowAddDays(10);
|
|
$session->setReqOTP(false, $tokenValidUntil);
|
|
RootDB::db()->update('member', [
|
|
'oauth_info'=>Json::encode($oauthInfo),
|
|
'token_valid_until'=>$tokenValidUntil,
|
|
], 'no=%i', $userNo);
|
|
|
|
Json::die([
|
|
'result'=>true,
|
|
'reset'=>false,
|
|
'validUntil'=>$tokenValidUntil,
|
|
]); |