Cockatrice 2026-09-01-Development-3.1.0-beta.10
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
servatrice_database_interface.h
Go to the documentation of this file.
1#ifndef SERVATRICE_DATABASE_INTERFACE_H
2#define SERVATRICE_DATABASE_INTERFACE_H
3
4#include <QChar>
5#include <QHash>
6#include <QObject>
7#include <QSqlDatabase>
8#include <libcockatrice/protocol/pb/serverinfo_chat_message.pb.h>
9#include <libcockatrice/protocol/pb/serverinfo_moderator_login.pb.h>
10#include <libcockatrice/protocol/pb/serverinfo_user_alt.pb.h>
11#include <libcockatrice/protocol/pb/serverinfo_user_session.pb.h>
12#include <libcockatrice/protocol/pb/serverinfo_warning.pb.h>
13#include <server.h>
15
16#define DATABASE_SCHEMA_VERSION 36
17
18class Servatrice;
19
21{
22 Q_OBJECT
23private:
25 QSqlDatabase sqlDatabase;
26 QHash<QString, QSqlQuery *> preparedStatements;
28 ServerInfo_User evalUserQueryResult(const QSqlQuery *query, bool complete, bool withId = false);
30 bool checkUserIsIdBanned(const QString &clientId, QString &banReason, int &banSecondsRemaining);
32 bool checkUserIsIpBanned(const QString &ipAddress, QString &banReason, int &banSecondsRemaining);
34 bool checkUserIsNameBanned(QString const &userName, QString &banReason, int &banSecondsRemaining);
35
36protected:
38 const QString &user,
39 const QString &password,
40 const QString &clientId,
41 QString &reasonStr,
42 int &banSecondsLeft,
43 bool passwordNeedsHash) override;
44
45public slots:
46 void initDatabase(const QSqlDatabase &_sqlDatabase);
47
48public:
49 explicit Servatrice_DatabaseInterface(int _instanceId, Servatrice *_server);
51 bool initDatabase(const QString &type,
52 const QString &hostName,
53 const QString &databaseName,
54 const QString &userName,
55 const QString &password);
56 bool openDatabase();
57 bool checkSql();
58 QSqlQuery *prepareQuery(const QString &queryText);
59 bool execSqlQuery(QSqlQuery *query);
60 const QSqlDatabase &getDatabase()
61 {
62 return sqlDatabase;
63 }
64
65 bool activeUserExists(const QString &user) override;
66 bool userExists(const QString &user) override;
67 QString getUserSalt(const QString &user) override;
68 int getUserIdInDB(const QString &name);
69 QMap<QString, ServerInfo_User> getBuddyList(const QString &name) override;
70 QMap<QString, ServerInfo_User> getIgnoreList(const QString &name) override;
71 bool isInBuddyList(const QString &whoseList, const QString &who) override;
72 bool isInIgnoreList(const QString &whoseList, const QString &who) override;
73 ServerInfo_User getUserData(const QString &name, bool withId = false) override;
74 void storeGameInformation(const QString &roomName,
75 const QStringList &roomGameTypes,
76 const ServerInfo_Game &gameInfo,
77 const QSet<QString> &allPlayersEver,
78 const QSet<QString> &allSpectatorsEver,
79 const QList<GameReplay *> &replayList) override;
80 DeckList *getDeckFromDatabase(int deckId, int userId) override;
81
82 int getNextGameId() override;
83 int getNextReplayId() override;
84 int getActiveUserCount(QString connectionType = QString()) override;
85
86 qint64 startSession(const QString &userName,
87 const QString &address,
88 const QString &clientId,
89 const QString &connectionType) override;
90 void endSession(qint64 sessionId) override;
91 void clearSessionTables() override;
92 void lockSessionTables() override;
93 void unlockSessionTables() override;
94 bool userSessionExists(const QString &userName) override;
95 bool usernameIsValid(const QString &user, QString &error) override;
96 bool checkUserIsBanned(const QString &ipAddress,
97 const QString &userName,
98 const QString &clientId,
99 QString &banReason,
100 int &banSecondsRemaining) override;
101 int checkNumberOfUserAccounts(const QString &email) override;
102 bool registerUser(const QString &userName,
103 const QString &realName,
104 const QString &password,
105 bool passwordNeedsHash,
106 const QString &emailAddress,
107 const QString &country,
108 bool active = false) override;
109 bool activateUser(const QString &userName, const QString &token) override;
110 void updateUsersClientID(const QString &userName, const QString &userClientID) override;
111 void updateUsersLastLoginData(const QString &userName, const QString &clientVersion) override;
112 void logMessage(const int senderId,
113 const QString &senderName,
114 const QString &senderIp,
115 const QString &logMessage,
116 LogMessage_TargetType targetType,
117 const int targetId,
118 const QString &targetName) override;
119 bool changeUserPassword(const QString &user, const QString &password, bool passwordNeedsHash) override;
120 bool changeUserPassword(const QString &user,
121 const QString &oldPassword,
122 bool oldPasswordNeedsHash,
123 const QString &newPassword,
124 bool newPasswordNeedsHash) override;
125 void setForcePasswordChange(const QString &user, bool force) override;
126 QList<ServerInfo_Ban> getUserBanHistory(const QString userName);
127 bool
128 addWarning(const QString userName, const QString adminName, const QString warningReason, const QString clientID);
129 QList<ServerInfo_Warning> getUserWarnHistory(const QString userName);
130 QList<ServerInfo_ChatMessage> getMessageLogHistory(const QString &user,
131 const QString &ipaddress,
132 const QString &gamename,
133 const QString &gameid,
134 const QString &message,
135 bool &chat,
136 bool &game,
137 bool &room,
138 int &range,
139 int &maxresults);
140 QList<ServerInfo_UserSession> getUserSessions(const QString &userName, int limit);
141 QList<ServerInfo_UserAlt> getUserAlts(const QString &userName);
142 QList<ServerInfo_ModeratorLogin> getModeratorLastLogins();
143 bool removeUserAvatar(const QString &userName);
144 bool addForgotPassword(const QString &user);
145 bool removeForgotPassword(const QString &user) override;
146 bool doesForgotPasswordExist(const QString &user);
147 bool updateUserToken(const QString &token, const QString &user);
148 bool validateTableColumnStringData(const QString &table,
149 const QString &column,
150 const QString &_user,
151 const QString &_datatocheck);
152 void addAuditRecord(const QString &user,
153 const QString &ipaddress,
154 const QString &clientid,
155 const QString &action,
156 const QString &details,
157 const bool &results);
158};
159
160#endif
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:63
bool activateUser(const QString &userName, const QString &token) override
Definition servatrice_database_interface.cpp:274
bool addWarning(const QString userName, const QString adminName, const QString warningReason, const QString clientID)
Definition servatrice_database_interface.cpp:1278
bool changeUserPassword(const QString &user, const QString &password, bool passwordNeedsHash) override
Definition servatrice_database_interface.cpp:1080
AuthenticationResult checkUserPassword(Server_ProtocolHandler *handler, const QString &user, const QString &password, const QString &clientId, QString &reasonStr, int &banSecondsLeft, bool passwordNeedsHash) override
Definition servatrice_database_interface.cpp:311
QList< ServerInfo_ChatMessage > getMessageLogHistory(const QString &user, const QString &ipaddress, const QString &gamename, const QString &gameid, const QString &message, bool &chat, bool &game, bool &room, int &range, int &maxresults)
Definition servatrice_database_interface.cpp:1497
bool openDatabase()
Definition servatrice_database_interface.cpp:59
QMap< QString, ServerInfo_User > getIgnoreList(const QString &name) override
Definition servatrice_database_interface.cpp:855
bool usernameIsValid(const QString &user, QString &error) override
Definition servatrice_database_interface.cpp:156
qint64 startSession(const QString &userName, const QString &address, const QString &clientId, const QString &connectionType) override
Definition servatrice_database_interface.cpp:789
void lockSessionTables() override
Definition servatrice_database_interface.cpp:763
bool removeForgotPassword(const QString &user) override
Definition servatrice_database_interface.cpp:1660
bool isInIgnoreList(const QString &whoseList, const QString &who) override
Definition servatrice_database_interface.cpp:600
bool checkUserIsIdBanned(const QString &clientId, QString &banReason, int &banSecondsRemaining)
Definition servatrice_database_interface.cpp:405
QMap< QString, ServerInfo_User > getBuddyList(const QString &name) override
Definition servatrice_database_interface.cpp:831
void storeGameInformation(const QString &roomName, const QStringList &roomGameTypes, const ServerInfo_Game &gameInfo, const QSet< QString > &allPlayersEver, const QSet< QString > &allSpectatorsEver, const QList< GameReplay * > &replayList) override
Definition servatrice_database_interface.cpp:913
QList< ServerInfo_Ban > getUserBanHistory(const QString userName)
Definition servatrice_database_interface.cpp:1246
DeckList * getDeckFromDatabase(int deckId, int userId) override
Definition servatrice_database_interface.cpp:1010
bool doesForgotPasswordExist(const QString &user)
Definition servatrice_database_interface.cpp:1675
bool userSessionExists(const QString &userName) override
Definition servatrice_database_interface.cpp:775
Servatrice_DatabaseInterface(int _instanceId, Servatrice *_server)
Definition servatrice_database_interface.cpp:22
QSqlDatabase sqlDatabase
Definition servatrice_database_interface.h:25
void endSession(qint64 sessionId) override
Definition servatrice_database_interface.cpp:816
QString getUserSalt(const QString &user) override
Definition servatrice_database_interface.cpp:539
int getNextGameId() override
Definition servatrice_database_interface.cpp:879
QSqlQuery * prepareQuery(const QString &queryText)
Definition servatrice_database_interface.cpp:129
bool checkUserIsBanned(const QString &ipAddress, const QString &userName, const QString &clientId, QString &banReason, int &banSecondsRemaining) override
Definition servatrice_database_interface.cpp:385
QList< ServerInfo_ModeratorLogin > getModeratorLastLogins()
Definition servatrice_database_interface.cpp:1440
void setForcePasswordChange(const QString &user, bool force) override
Definition servatrice_database_interface.cpp:1099
ServerInfo_User evalUserQueryResult(const QSqlQuery *query, bool complete, bool withId=false)
Definition servatrice_database_interface.cpp:623
int checkNumberOfUserAccounts(const QString &email) override
Definition servatrice_database_interface.cpp:1619
bool execSqlQuery(QSqlQuery *query)
Definition servatrice_database_interface.cpp:144
const QSqlDatabase & getDatabase()
Definition servatrice_database_interface.h:60
bool isInBuddyList(const QString &whoseList, const QString &who) override
Definition servatrice_database_interface.cpp:577
bool updateUserToken(const QString &token, const QString &user)
Definition servatrice_database_interface.cpp:1699
void unlockSessionTables() override
Definition servatrice_database_interface.cpp:769
int getActiveUserCount(QString connectionType=QString()) override
Definition servatrice_database_interface.cpp:1155
bool activeUserExists(const QString &user) override
Definition servatrice_database_interface.cpp:509
int getNextReplayId() override
Definition servatrice_database_interface.cpp:898
QHash< QString, QSqlQuery * > preparedStatements
Definition servatrice_database_interface.h:26
int instanceId
Definition servatrice_database_interface.h:24
bool validateTableColumnStringData(const QString &table, const QString &column, const QString &_user, const QString &_datatocheck)
Definition servatrice_database_interface.cpp:1720
bool checkUserIsIpBanned(const QString &ipAddress, QString &banReason, int &banSecondsRemaining)
Definition servatrice_database_interface.cpp:473
Servatrice * server
Definition servatrice_database_interface.h:27
void logMessage(const int senderId, const QString &senderName, const QString &senderIp, const QString &logMessage, LogMessage_TargetType targetType, const int targetId, const QString &targetName) override
Definition servatrice_database_interface.cpp:1029
bool userExists(const QString &user) override
Definition servatrice_database_interface.cpp:524
bool addForgotPassword(const QString &user)
Definition servatrice_database_interface.cpp:1641
bool registerUser(const QString &userName, const QString &realName, const QString &password, bool passwordNeedsHash, const QString &emailAddress, const QString &country, bool active=false) override
Definition servatrice_database_interface.cpp:230
QList< ServerInfo_UserAlt > getUserAlts(const QString &userName)
Definition servatrice_database_interface.cpp:1370
~Servatrice_DatabaseInterface() override
Definition servatrice_database_interface.cpp:27
ServerInfo_User getUserData(const QString &name, bool withId=false) override
Definition servatrice_database_interface.cpp:723
void updateUsersClientID(const QString &userName, const QString &userClientID) override
Definition servatrice_database_interface.cpp:1185
void updateUsersLastLoginData(const QString &userName, const QString &clientVersion) override
Definition servatrice_database_interface.cpp:1198
void addAuditRecord(const QString &user, const QString &ipaddress, const QString &clientid, const QString &action, const QString &details, const bool &results)
Definition servatrice_database_interface.cpp:1750
QList< ServerInfo_UserSession > getUserSessions(const QString &userName, int limit)
Definition servatrice_database_interface.cpp:1334
int getUserIdInDB(const QString &name)
Definition servatrice_database_interface.cpp:561
bool checkUserIsNameBanned(QString const &userName, QString &banReason, int &banSecondsRemaining)
Definition servatrice_database_interface.cpp:445
void clearSessionTables() override
Definition servatrice_database_interface.cpp:753
bool removeUserAvatar(const QString &userName)
Definition servatrice_database_interface.cpp:1483
void initDatabase(const QSqlDatabase &_sqlDatabase)
Definition servatrice_database_interface.cpp:36
bool checkSql()
Definition servatrice_database_interface.cpp:107
QList< ServerInfo_Warning > getUserWarnHistory(const QString userName)
Definition servatrice_database_interface.cpp:1304
Definition servatrice.h:134
LogMessage_TargetType
Definition server_database_interface.h:137
Server_DatabaseInterface(QObject *parent=nullptr)
Definition server_database_interface.h:12
Definition server_protocolhandler.h:46
AuthenticationResult
Definition server.h:32
Definition serverinfo_game.proto:5
Definition serverinfo_user.proto:2