mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-12 07:40:30 -08:00
Support Mod/Admin Notes Section (#5361)
This commit is contained in:
5
servatrice/migrations/servatrice_0029_to_0030.sql
Normal file
5
servatrice/migrations/servatrice_0029_to_0030.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- Servatrice db migration from version 29 to version 30
|
||||
|
||||
ALTER TABLE cockatrice_users ADD COLUMN adminnotes mediumtext NOT NULL;
|
||||
|
||||
UPDATE cockatrice_schema_version SET version=30 WHERE version=29;
|
||||
@@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_schema_version` (
|
||||
PRIMARY KEY (`version`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
INSERT INTO cockatrice_schema_version VALUES(29);
|
||||
INSERT INTO cockatrice_schema_version VALUES(30);
|
||||
|
||||
-- users and user data tables
|
||||
CREATE TABLE IF NOT EXISTS `cockatrice_users` (
|
||||
@@ -36,6 +36,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_users` (
|
||||
`active` tinyint(1) NOT NULL,
|
||||
`token` binary(16),
|
||||
`clientid` varchar(15) NOT NULL,
|
||||
`adminnotes` mediumtext NOT NULL,
|
||||
`privlevel` enum("NONE","VIP","DONATOR") NOT NULL,
|
||||
`privlevelStartDate` datetime NOT NULL,
|
||||
`privlevelEndDate` datetime NOT NULL,
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include <QObject>
|
||||
#include <QSqlDatabase>
|
||||
|
||||
#define DATABASE_SCHEMA_VERSION 29
|
||||
#define DATABASE_SCHEMA_VERSION 30
|
||||
|
||||
class Servatrice;
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "pb/response_deck_list.pb.h"
|
||||
#include "pb/response_deck_upload.pb.h"
|
||||
#include "pb/response_forgotpasswordrequest.pb.h"
|
||||
#include "pb/response_get_admin_notes.pb.h"
|
||||
#include "pb/response_password_salt.pb.h"
|
||||
#include "pb/response_register.pb.h"
|
||||
#include "pb/response_replay_download.pb.h"
|
||||
@@ -228,6 +229,10 @@ Response::ResponseCode AbstractServerSocketInterface::processExtendedModeratorCo
|
||||
return cmdGrantReplayAccess(cmd.GetExtension(Command_GrantReplayAccess::ext), rc);
|
||||
case ModeratorCommand::FORCE_ACTIVATE_USER:
|
||||
return cmdForceActivateUser(cmd.GetExtension(Command_ForceActivateUser::ext), rc);
|
||||
case ModeratorCommand::GET_ADMIN_NOTES:
|
||||
return cmdGetAdminNotes(cmd.GetExtension(Command_GetAdminNotes::ext), rc);
|
||||
case ModeratorCommand::UPDATE_ADMIN_NOTES:
|
||||
return cmdUpdateAdminNotes(cmd.GetExtension(Command_UpdateAdminNotes::ext), rc);
|
||||
default:
|
||||
return Response::RespFunctionNotAllowed;
|
||||
}
|
||||
@@ -1736,6 +1741,48 @@ Response::ResponseCode AbstractServerSocketInterface::cmdForceActivateUser(const
|
||||
return cmdActivateAccount(cmdActivate, rc);
|
||||
}
|
||||
|
||||
Response::ResponseCode AbstractServerSocketInterface::cmdGetAdminNotes(const Command_GetAdminNotes &cmd,
|
||||
ResponseContainer &rc)
|
||||
{
|
||||
auto *getAdminNotesQuery = sqlInterface->prepareQuery("select adminnotes from {prefix}_users WHERE name = :name");
|
||||
getAdminNotesQuery->bindValue(":name", QString::fromStdString(cmd.user_name()));
|
||||
if (!sqlInterface->execSqlQuery(getAdminNotesQuery)) {
|
||||
// Internal server error
|
||||
return Response::RespInternalError;
|
||||
}
|
||||
if (!getAdminNotesQuery->next()) {
|
||||
// User doesn't exist
|
||||
return Response::RespNameNotFound;
|
||||
}
|
||||
const auto &adminNotes = getAdminNotesQuery->value(0).toString();
|
||||
|
||||
Response_GetAdminNotes *re = new Response_GetAdminNotes;
|
||||
re->set_user_name(cmd.user_name());
|
||||
re->set_notes(adminNotes.toStdString());
|
||||
rc.setResponseExtension(re);
|
||||
|
||||
return Response::RespOk;
|
||||
}
|
||||
|
||||
Response::ResponseCode AbstractServerSocketInterface::cmdUpdateAdminNotes(const Command_UpdateAdminNotes &cmd,
|
||||
ResponseContainer & /*rc*/)
|
||||
{
|
||||
auto *updateAdminNotesQuery =
|
||||
sqlInterface->prepareQuery("update {prefix}_users set adminnotes = :adminnotes where name = :name");
|
||||
updateAdminNotesQuery->bindValue(":adminnotes", QString::fromStdString(cmd.notes()));
|
||||
updateAdminNotesQuery->bindValue(":name", QString::fromStdString(cmd.user_name()));
|
||||
|
||||
if (!sqlInterface->execSqlQuery(updateAdminNotesQuery)) {
|
||||
return Response::RespInternalError;
|
||||
}
|
||||
|
||||
if (updateAdminNotesQuery->numRowsAffected() == 0) {
|
||||
return Response::RespNameNotFound;
|
||||
}
|
||||
|
||||
return Response::RespOk;
|
||||
}
|
||||
|
||||
TcpServerSocketInterface::TcpServerSocketInterface(Servatrice *_server,
|
||||
Servatrice_DatabaseInterface *_databaseInterface,
|
||||
QObject *parent)
|
||||
|
||||
@@ -129,6 +129,9 @@ private:
|
||||
Response::ResponseCode cmdGrantReplayAccess(const Command_GrantReplayAccess &cmd, ResponseContainer &rc);
|
||||
Response::ResponseCode cmdForceActivateUser(const Command_ForceActivateUser &cmd, ResponseContainer &rc);
|
||||
|
||||
Response::ResponseCode cmdGetAdminNotes(const Command_GetAdminNotes &cmd, ResponseContainer &rc);
|
||||
Response::ResponseCode cmdUpdateAdminNotes(const Command_UpdateAdminNotes &cmd, ResponseContainer &rc);
|
||||
|
||||
bool addAdminFlagToUser(const QString &user, int flag);
|
||||
bool removeAdminFlagFromUser(const QString &user, int flag);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user