This commit is contained in:
BruebachL 2026-08-20 10:22:11 -03:00 • committed by GitHub
commit 13fbe977d4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 238 additions and 3 deletions

View file

@ -179,6 +179,15 @@ public:
{
return false;
}
/** @brief Record a failed login attempt from the given address; returns true if the address is now locked out. */
virtual bool recordFailedLogin(const QString & /*ipAddress*/)
{
return false;
}
/** @brief Clear any failed-login lockout for the given address, e.g. after a successful login. */
virtual void clearFailedLogins(const QString & /*ipAddress*/)
{
}
Server_DatabaseInterface *getDatabaseInterface() const;
int getNextLocalGameId()

View file

@ -549,10 +549,14 @@ Response::ResponseCode Server_ProtocolHandler::cmdLogin(const Command_Login &cmd
return Response::RespUserIsBanned;
}
case NotLoggedIn:
if (server->recordFailedLogin(getAddress())) {
return Response::RespTooManyRequests;
}
return Response::RespWrongPassword;
case WouldOverwriteOldSession:
return Response::RespWouldOverwriteOldSession;
case UsernameInvalid: {
server->recordFailedLogin(getAddress());
auto *re = new Response_Login;
re->set_denied_reason_str(reasonStr.toStdString());
rc.setResponseExtension(re);
@ -563,8 +567,10 @@ Response::ResponseCode Server_ProtocolHandler::cmdLogin(const Command_Login &cmd
case ClientIdRequired:
return Response::RespClientIdRequired;
case UserIsInactive:
server->recordFailedLogin(getAddress());
return Response::RespAccountNotActivated;
default:
server->clearFailedLogins(getAddress());
authState = res;
usingRealPassword = needsHash;
}