feat: APIHelper에서 recovery 반환 타입 경로 추가

This commit is contained in:
2023-03-17 01:18:20 +09:00
parent 1d4707fb20
commit 6b9cfe46a0
+57 -18
View File
@@ -2,13 +2,45 @@
namespace sammo;
use sammo\Enums\APIRecoveryType;
class APIHelper
{
private function __construct()
{
//static only
}
public static function getSession(int $sessionMode): Session | APIRecoveryType
{
if ($sessionMode === BaseAPI::NO_SESSION) {
return DummySession::getInstance();
}
$session = Session::getInstance();
if($sessionMode & BaseAPI::REQ_LOGIN || $sessionMode & BaseAPI::REQ_GAME_LOGIN){
if(!$session->isLoggedIn()){
return APIRecoveryType::Login;
}
}
if($sessionMode & BaseAPI::REQ_GAME_LOGIN){
if(!$session->isGameLoggedIn()){
$tmpResult = false;
$session->loginGame($tmpResult);
if(!$tmpResult){
return APIRecoveryType::Gateway;
}
}
}
if ($sessionMode & BaseAPI::REQ_READ_ONLY) {
$session->setReadOnly();
}
return $session;
}
public static function launch(string $rootPath, string $actionPath, array $eParams = [], bool $loadRawInput = true)
{
if ($loadRawInput) {
@@ -19,8 +51,7 @@ class APIHelper
Json::dieWithReason($e->getMessage());
$input = null;
}
}
else{
} else {
$input = null;
}
@@ -37,8 +68,7 @@ class APIHelper
if (class_exists('\\sammo\\UniqueConst')) {
$serverID = UniqueConst::$serverID;
$logPath = "{$rootPath}/logs/{$serverID}/api_log.db";
}
else{
} else {
$realYearMonth = date('Y_m');
$logPath = "{$rootPath}/d_log/{$realYearMonth}_api_log.db";
}
@@ -75,21 +105,13 @@ class APIHelper
$filteredArgs = $obj->getFilteredArgs();
$sessionMode = $obj->getRequiredSessionMode();
if ($sessionMode === BaseAPI::NO_SESSION) {
$session = DummySession::getInstance();
} else {
if ($sessionMode & BaseAPI::REQ_GAME_LOGIN) {
$session = Session::requireGameLogin(null);
} else if ($sessionMode & BaseAPI::REQ_LOGIN) {
$session = Session::requireLogin(null);
} else {
$session = Session::getInstance();
}
$sessionOrFail = static::getSession($sessionMode);
if ($sessionMode & BaseAPI::REQ_READ_ONLY) {
$session->setReadOnly();
}
if(!($sessionOrFail instanceof Session)){
$recoveryType = $sessionOrFail;
Json::dieWithReason($recoveryType->info(), $recoveryType);
}
$session = $sessionOrFail;
$modifiedSince = WebUtil::parseLastModified();
$reqEtags = WebUtil::parseETag();
@@ -105,11 +127,28 @@ class APIHelper
'aux' => JSON::encode([
'result' => false,
'state' => 'launch',
'reason'=>$validateResult
'reason' => $result
]),
]);
Json::dieWithReason($result);
}
else if($result instanceof APIRecoveryType){
$recoveryType = $result;
$logDB->insert('api_log', [
'user_id' => $session->userID ?? 0,
'ip' => $ip,
'date' => $date,
'path' => $actionPath,
'arg' => JSON::encode($filteredArgs),
'aux' => JSON::encode([
'result' => false,
'state' => 'launch',
'reason' => $recoveryType->info(),
'recovery' => $recoveryType->value,
]),
]);
Json::dieWithReason($recoveryType->info(), $recoveryType);
}
$cache = $obj->tryCache();
$setCache = false;