Cockatrice 2025-11-30-Development-2.11.0-beta.38
A cross-platform 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_warning.pb.h>
10#include <server.h>
12
13#define DATABASE_SCHEMA_VERSION 34
14
15class Servatrice;
16
18{
19 Q_OBJECT
20private:
22 QSqlDatabase sqlDatabase;
23 QHash<QString, QSqlQuery *> preparedStatements;
25 ServerInfo_User evalUserQueryResult(const QSqlQuery *query, bool complete, bool withId = false);
27 bool checkUserIsIdBanned(const QString &clientId, QString &banReason, int &banSecondsRemaining);
29 bool checkUserIsIpBanned(const QString &ipAddress, QString &banReason, int &banSecondsRemaining);
31 bool checkUserIsNameBanned(QString const &userName, QString &banReason, int &banSecondsRemaining);
32
33protected:
35 const QString &user,
36 const QString &password,
37 const QString &clientId,
38 QString &reasonStr,
39 int &banSecondsLeft,
40 bool passwordNeedsHash) override;
41
42public slots:
43 void initDatabase(const QSqlDatabase &_sqlDatabase);
44
45public:
46 explicit Servatrice_DatabaseInterface(int _instanceId, Servatrice *_server);
48 bool initDatabase(const QString &type,
49 const QString &hostName,
50 const QString &databaseName,
51 const QString &userName,
52 const QString &password);
53 bool openDatabase();
54 bool checkSql();
55 QSqlQuery *prepareQuery(const QString &queryText);
56 bool execSqlQuery(QSqlQuery *query);
57 const QSqlDatabase &getDatabase()
58 {
59 return sqlDatabase;
60 }
61
62 bool activeUserExists(const QString &user) override;
63 bool userExists(const QString &user) override;
64 QString getUserSalt(const QString &user) override;
65 int getUserIdInDB(const QString &name);
66 QMap<QString, ServerInfo_User> getBuddyList(const QString &name) override;
67 QMap<QString, ServerInfo_User> getIgnoreList(const QString &name) override;
68 bool isInBuddyList(const QString &whoseList, const QString &who) override;
69 bool isInIgnoreList(const QString &whoseList, const QString &who) override;
70 ServerInfo_User getUserData(const QString &name, bool withId = false) override;
71 void storeGameInformation(const QString &roomName,
72 const QStringList &roomGameTypes,
73 const ServerInfo_Game &gameInfo,
74 const QSet<QString> &allPlayersEver,
75 const QSet<QString> &allSpectatorsEver,
76 const QList<GameReplay *> &replayList) override;
77 DeckList *getDeckFromDatabase(int deckId, int userId) override;
78
79 int getNextGameId() override;
80 int getNextReplayId() override;
81 int getActiveUserCount(QString connectionType = QString()) override;
82
83 qint64 startSession(const QString &userName,
84 const QString &address,
85 const QString &clientId,
86 const QString &connectionType) override;
87 void endSession(qint64 sessionId) override;
88 void clearSessionTables() override;
89 void lockSessionTables() override;
90 void unlockSessionTables() override;
91 bool userSessionExists(const QString &userName) override;
92 bool usernameIsValid(const QString &user, QString &error) override;
93 bool checkUserIsBanned(const QString &ipAddress,
94 const QString &userName,
95 const QString &clientId,
96 QString &banReason,
97 int &banSecondsRemaining) override;
98 int checkNumberOfUserAccounts(const QString &email) override;
99 bool registerUser(const QString &userName,
100 const QString &realName,
101 const QString &password,
102 bool passwordNeedsHash,
103 const QString &emailAddress,
104 const QString &country,
105 bool active = false) override;
106 bool activateUser(const QString &userName, const QString &token) override;
107 void updateUsersClientID(const QString &userName, const QString &userClientID) override;
108 void updateUsersLastLoginData(const QString &userName, const QString &clientVersion) override;
109 void logMessage(const int senderId,
110 const QString &senderName,
111 const QString &senderIp,
112 const QString &logMessage,
113 LogMessage_TargetType targetType,
114 const int targetId,
115 const QString &targetName) override;
116 bool changeUserPassword(const QString &user, const QString &password, bool passwordNeedsHash) override;
117 bool changeUserPassword(const QString &user,
118 const QString &oldPassword,
119 bool oldPasswordNeedsHash,
120 const QString &newPassword,
121 bool newPasswordNeedsHash) override;
122 QList<ServerInfo_Ban> getUserBanHistory(const QString userName);
123 bool
124 addWarning(const QString userName, const QString adminName, const QString warningReason, const QString clientID);
125 QList<ServerInfo_Warning> getUserWarnHistory(const QString userName);
126 QList<ServerInfo_ChatMessage> getMessageLogHistory(const QString &user,
127 const QString &ipaddress,
128 const QString &gamename,
129 const QString &gameid,
130 const QString &message,
131 bool &chat,
132 bool &game,
133 bool &room,
134 int &range,
135 int &maxresults);
136 bool addForgotPassword(const QString &user);
137 bool removeForgotPassword(const QString &user) override;
138 bool doesForgotPasswordExist(const QString &user);
139 bool updateUserToken(const QString &token, const QString &user);
140 bool validateTableColumnStringData(const QString &table,
141 const QString &column,
142 const QString &_user,
143 const QString &_datatocheck);
144 void addAuditRecord(const QString &user,
145 const QString &ipaddress,
146 const QString &clientid,
147 const QString &action,
148 const QString &details,
149 const bool &results);
150};
151
152#endif
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:127
bool activateUser(const QString &userName, const QString &token) override
Definition servatrice_database_interface.cpp:266
bool addWarning(const QString userName, const QString adminName, const QString warningReason, const QString clientID)
Definition servatrice_database_interface.cpp:1157
bool changeUserPassword(const QString &user, const QString &password, bool passwordNeedsHash) override
Definition servatrice_database_interface.cpp:985
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:301
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:1211
bool openDatabase()
Definition servatrice_database_interface.cpp:53
QMap< QString, ServerInfo_User > getIgnoreList(const QString &name) override
Definition servatrice_database_interface.cpp:778
bool usernameIsValid(const QString &user, QString &error) override
Definition servatrice_database_interface.cpp:154
qint64 startSession(const QString &userName, const QString &address, const QString &clientId, const QString &connectionType) override
Definition servatrice_database_interface.cpp:718
void lockSessionTables() override
Definition servatrice_database_interface.cpp:692
bool removeForgotPassword(const QString &user) override
Definition servatrice_database_interface.cpp:1357
bool isInIgnoreList(const QString &whoseList, const QString &who) override
Definition servatrice_database_interface.cpp:572
bool checkUserIsIdBanned(const QString &clientId, QString &banReason, int &banSecondsRemaining)
Definition servatrice_database_interface.cpp:385
QMap< QString, ServerInfo_User > getBuddyList(const QString &name) override
Definition servatrice_database_interface.cpp:755
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:832
QList< ServerInfo_Ban > getUserBanHistory(const QString userName)
Definition servatrice_database_interface.cpp:1126
DeckList * getDeckFromDatabase(int deckId, int userId) override
Definition servatrice_database_interface.cpp:920
bool doesForgotPasswordExist(const QString &user)
Definition servatrice_database_interface.cpp:1370
bool userSessionExists(const QString &userName) override
Definition servatrice_database_interface.cpp:704
Servatrice_DatabaseInterface(int _instanceId, Servatrice *_server)
Definition servatrice_database_interface.cpp:16
QSqlDatabase sqlDatabase
Definition servatrice_database_interface.h:22
void endSession(qint64 sessionId) override
Definition servatrice_database_interface.cpp:742
QString getUserSalt(const QString &user) override
Definition servatrice_database_interface.cpp:516
int getNextGameId() override
Definition servatrice_database_interface.cpp:801
QSqlQuery * prepareQuery(const QString &queryText)
Definition servatrice_database_interface.cpp:128
bool checkUserIsBanned(const QString &ipAddress, const QString &userName, const QString &clientId, QString &banReason, int &banSecondsRemaining) override
Definition servatrice_database_interface.cpp:366
ServerInfo_User evalUserQueryResult(const QSqlQuery *query, bool complete, bool withId=false)
Definition servatrice_database_interface.cpp:592
int checkNumberOfUserAccounts(const QString &email) override
Definition servatrice_database_interface.cpp:1322
bool execSqlQuery(QSqlQuery *query)
Definition servatrice_database_interface.cpp:143
const QSqlDatabase & getDatabase()
Definition servatrice_database_interface.h:57
bool isInBuddyList(const QString &whoseList, const QString &who) override
Definition servatrice_database_interface.cpp:552
bool updateUserToken(const QString &token, const QString &user)
Definition servatrice_database_interface.cpp:1390
void unlockSessionTables() override
Definition servatrice_database_interface.cpp:698
int getActiveUserCount(QString connectionType=QString()) override
Definition servatrice_database_interface.cpp:1043
bool activeUserExists(const QString &user) override
Definition servatrice_database_interface.cpp:488
int getNextReplayId() override
Definition servatrice_database_interface.cpp:818
QHash< QString, QSqlQuery * > preparedStatements
Definition servatrice_database_interface.h:23
int instanceId
Definition servatrice_database_interface.h:21
bool validateTableColumnStringData(const QString &table, const QString &column, const QString &_user, const QString &_datatocheck)
Definition servatrice_database_interface.cpp:1408
bool checkUserIsIpBanned(const QString &ipAddress, QString &banReason, int &banSecondsRemaining)
Definition servatrice_database_interface.cpp:452
Servatrice * server
Definition servatrice_database_interface.h:24
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:938
bool userExists(const QString &user) override
Definition servatrice_database_interface.cpp:502
bool addForgotPassword(const QString &user)
Definition servatrice_database_interface.cpp:1341
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:224
~Servatrice_DatabaseInterface() override
Definition servatrice_database_interface.cpp:21
ServerInfo_User getUserData(const QString &name, bool withId=false) override
Definition servatrice_database_interface.cpp:656
void updateUsersClientID(const QString &userName, const QString &userClientID) override
Definition servatrice_database_interface.cpp:1068
void updateUsersLastLoginData(const QString &userName, const QString &clientVersion) override
Definition servatrice_database_interface.cpp:1080
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:1433
int getUserIdInDB(const QString &name)
Definition servatrice_database_interface.cpp:538
bool checkUserIsNameBanned(QString const &userName, QString &banReason, int &banSecondsRemaining)
Definition servatrice_database_interface.cpp:424
void clearSessionTables() override
Definition servatrice_database_interface.cpp:682
void initDatabase(const QSqlDatabase &_sqlDatabase)
Definition servatrice_database_interface.cpp:30
bool checkSql()
Definition servatrice_database_interface.cpp:104
QList< ServerInfo_Warning > getUserWarnHistory(const QString userName)
Definition servatrice_database_interface.cpp:1182
Definition servatrice.h:131
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