[Server] Serve account moderation through the database interface (#7849)

The moderator account commands still reached Servatrice_DatabaseInterface through
its concrete class: cmdResetUserPassword ran the privilege lookup inline and
called the concrete-only changeUserPasswordWithLegacyBackup, while the avatar,
banner and blacklisted-banner commands called concrete-only helpers. Promote
those four methods to Server_DatabaseInterface, move RemoveUserBannerResult into
the interface, and add getUserAdminFlags for the reset privilege lookup. The
escalation guard, audit records, had_banner response field and every response
code stay in the handler.
This commit is contained in:
BruebachL 2026-11-10 12:16:29 +01:00 • committed by GitHub
parent f7c6e81347
commit 2608228bdd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 67 additions and 29 deletions

View file

@ -2289,6 +2289,22 @@ bool Servatrice_DatabaseInterface::setUserAvatar(int userId, const QByteArray &i
return execSqlQuery(query);
}
bool Servatrice_DatabaseInterface::getUserAdminFlags(const QString &userName, int &adminFlags)
{
if (!checkSql()) {
return false;
}
QSqlQuery *query = prepareQuery("SELECT admin FROM {prefix}_users WHERE name = :name");
query->bindValue(":name", userName);
if (!execSqlQuery(query) || !query->next()) {
return false;
}
adminFlags = query->value(0).toInt();
return true;
}
bool Servatrice_DatabaseInterface::changeUserPassword(const QString &user,
const QString &oldPassword,
bool oldPasswordNeedsHash,