mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-24 05:51:05 +00:00
Auth cookie refresh on PC_EXIT
This commit is contained in:
parent
55cf3f7102
commit
ed9fe61faf
@ -396,6 +396,14 @@ static void heartbeatPlayer(CNSocket* sock, CNPacketData* data) {
|
|||||||
|
|
||||||
static void exitGame(CNSocket* sock, CNPacketData* data) {
|
static void exitGame(CNSocket* sock, CNPacketData* data) {
|
||||||
auto exitData = (sP_CL2FE_REQ_PC_EXIT*)data->buf;
|
auto exitData = (sP_CL2FE_REQ_PC_EXIT*)data->buf;
|
||||||
|
|
||||||
|
// Refresh any auth cookie, in case "change character" was used
|
||||||
|
Player* plr = getPlayer(sock);
|
||||||
|
if (plr != nullptr) {
|
||||||
|
// 5 seconds should be enough to log in again
|
||||||
|
Database::refreshCookie(plr->accountId, 5);
|
||||||
|
}
|
||||||
|
|
||||||
INITSTRUCT(sP_FE2CL_REP_PC_EXIT_SUCC, response);
|
INITSTRUCT(sP_FE2CL_REP_PC_EXIT_SUCC, response);
|
||||||
|
|
||||||
response.iID = exitData->iID;
|
response.iID = exitData->iID;
|
||||||
|
@ -56,6 +56,7 @@ namespace Database {
|
|||||||
// return true if cookie is valid for the account.
|
// return true if cookie is valid for the account.
|
||||||
// invalidates the stored cookie afterwards
|
// invalidates the stored cookie afterwards
|
||||||
bool checkCookie(int accountId, const char *cookie);
|
bool checkCookie(int accountId, const char *cookie);
|
||||||
|
void refreshCookie(int accountId, int durationSec);
|
||||||
|
|
||||||
// interface for the /ban command
|
// interface for the /ban command
|
||||||
bool banPlayer(int playerId, std::string& reason);
|
bool banPlayer(int playerId, std::string& reason);
|
||||||
|
@ -151,6 +151,27 @@ bool Database::checkCookie(int accountId, const char *tryCookie) {
|
|||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Database::refreshCookie(int accountId, int durationSec) {
|
||||||
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
|
||||||
|
const char* sql = R"(
|
||||||
|
UPDATE Auth
|
||||||
|
SET Expires = ?
|
||||||
|
WHERE AccountID = ?;
|
||||||
|
)";
|
||||||
|
|
||||||
|
int expires = getTimestamp() + durationSec;
|
||||||
|
|
||||||
|
sqlite3_stmt* stmt;
|
||||||
|
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
|
||||||
|
sqlite3_bind_int(stmt, 1, expires);
|
||||||
|
sqlite3_bind_int(stmt, 2, accountId);
|
||||||
|
int rc = sqlite3_step(stmt);
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
|
if (rc != SQLITE_DONE)
|
||||||
|
std::cout << "[WARN] Database fail on refreshCookie(): " << sqlite3_errmsg(db) << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
void Database::updateSelected(int accountId, int slot) {
|
void Database::updateSelected(int accountId, int slot) {
|
||||||
std::lock_guard<std::mutex> lock(dbCrit);
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user