mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add on_authplayer callback and 'last_login' to on_joinplayer (#9574)
Replace on_auth_fail callback with more versatile on_authplayer Better clarify account login process in Lua API documentation Change initial timestamp for newly registered accounts to -1
This commit is contained in:
parent
037422fdba
commit
15ba75e4cf
10 changed files with 81 additions and 46 deletions
|
@ -147,7 +147,7 @@ bool ScriptApiPlayer::can_bypass_userlimit(const std::string &name, const std::s
|
|||
return lua_toboolean(L, -1);
|
||||
}
|
||||
|
||||
void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player)
|
||||
void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player, s64 last_login)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
|
@ -156,7 +156,11 @@ void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player)
|
|||
lua_getfield(L, -1, "registered_on_joinplayers");
|
||||
// Call callbacks
|
||||
objectrefGetOrCreate(L, player);
|
||||
runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
|
||||
if (last_login != -1)
|
||||
lua_pushinteger(L, last_login);
|
||||
else
|
||||
lua_pushnil(L);
|
||||
runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
|
||||
}
|
||||
|
||||
void ScriptApiPlayer::on_leaveplayer(ServerActiveObject *player,
|
||||
|
@ -216,16 +220,19 @@ void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player,
|
|||
runCallbacks(3, RUN_CALLBACKS_MODE_OR_SC);
|
||||
}
|
||||
|
||||
void ScriptApiPlayer::on_auth_failure(const std::string &name, const std::string &ip)
|
||||
void ScriptApiPlayer::on_authplayer(const std::string &name, const std::string &ip, bool is_success)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
// Get core.registered_on_auth_failure
|
||||
// Get core.registered_on_authplayers
|
||||
lua_getglobal(L, "core");
|
||||
lua_getfield(L, -1, "registered_on_auth_fail");
|
||||
lua_getfield(L, -1, "registered_on_authplayers");
|
||||
|
||||
// Call callbacks
|
||||
lua_pushstring(L, name.c_str());
|
||||
lua_pushstring(L, ip.c_str());
|
||||
runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
|
||||
lua_pushboolean(L, is_success);
|
||||
runCallbacks(3, RUN_CALLBACKS_MODE_FIRST);
|
||||
}
|
||||
|
||||
void ScriptApiPlayer::pushMoveArguments(
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
bool on_prejoinplayer(const std::string &name, const std::string &ip,
|
||||
std::string *reason);
|
||||
bool can_bypass_userlimit(const std::string &name, const std::string &ip);
|
||||
void on_joinplayer(ServerActiveObject *player);
|
||||
void on_joinplayer(ServerActiveObject *player, s64 last_login);
|
||||
void on_leaveplayer(ServerActiveObject *player, bool timeout);
|
||||
void on_cheat(ServerActiveObject *player, const std::string &cheat_type);
|
||||
bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter,
|
||||
|
@ -51,7 +51,7 @@ public:
|
|||
const PlayerHPChangeReason &reason);
|
||||
void on_playerReceiveFields(ServerActiveObject *player,
|
||||
const std::string &formname, const StringMap &fields);
|
||||
void on_auth_failure(const std::string &name, const std::string &ip);
|
||||
void on_authplayer(const std::string &name, const std::string &ip, bool is_success);
|
||||
|
||||
// Player inventory callbacks
|
||||
// Return number of accepted items to be moved
|
||||
|
|
|
@ -23,7 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
bool ScriptApiServer::getAuth(const std::string &playername,
|
||||
std::string *dst_password,
|
||||
std::set<std::string> *dst_privs)
|
||||
std::set<std::string> *dst_privs,
|
||||
s64 *dst_last_login)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
|
@ -43,8 +44,7 @@ bool ScriptApiServer::getAuth(const std::string &playername,
|
|||
luaL_checktype(L, -1, LUA_TTABLE);
|
||||
|
||||
std::string password;
|
||||
bool found = getstringfield(L, -1, "password", password);
|
||||
if (!found)
|
||||
if (!getstringfield(L, -1, "password", password))
|
||||
throw LuaError("Authentication handler didn't return password");
|
||||
if (dst_password)
|
||||
*dst_password = password;
|
||||
|
@ -54,7 +54,13 @@ bool ScriptApiServer::getAuth(const std::string &playername,
|
|||
throw LuaError("Authentication handler didn't return privilege table");
|
||||
if (dst_privs)
|
||||
readPrivileges(-1, *dst_privs);
|
||||
lua_pop(L, 1);
|
||||
lua_pop(L, 1); // Remove key from privs table
|
||||
|
||||
s64 last_login;
|
||||
if(!getintfield(L, -1, "last_login", last_login))
|
||||
throw LuaError("Authentication handler didn't return last_login");
|
||||
if (dst_last_login)
|
||||
*dst_last_login = (s64)last_login;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,8 @@ public:
|
|||
/* auth */
|
||||
bool getAuth(const std::string &playername,
|
||||
std::string *dst_password,
|
||||
std::set<std::string> *dst_privs);
|
||||
std::set<std::string> *dst_privs,
|
||||
s64 *dst_last_login = nullptr);
|
||||
void createAuth(const std::string &playername,
|
||||
const std::string &password);
|
||||
bool setPassword(const std::string &playername,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue