mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-12 09:04:53 -07:00
Merge pull request #1346 from woogerboy21/regonly_server_refactor
Reg only server cleanup
This commit is contained in:
commit
f4942d1ea7
7 changed files with 125 additions and 131 deletions
|
|
@ -143,7 +143,7 @@ bool Servatrice::initServer()
|
|||
serverName = settingsCache->value("server/name", "My Cockatrice server").toString();
|
||||
serverId = settingsCache->value("server/id", 0).toInt();
|
||||
clientIdRequired = settingsCache->value("server/requireclientid",0).toBool();
|
||||
bool regServerOnly = settingsCache->value("authentication/regonly", 0).toBool();
|
||||
regServerOnly = settingsCache->value("authentication/regonly", 0).toBool();
|
||||
|
||||
const QString authenticationMethodStr = settingsCache->value("authentication/method").toString();
|
||||
if (authenticationMethodStr == "sql") {
|
||||
|
|
@ -161,7 +161,7 @@ bool Servatrice::initServer()
|
|||
qDebug() << "Authenticating method: none";
|
||||
authenticationMethod = AuthenticationNone;
|
||||
}
|
||||
|
||||
|
||||
qDebug() << "Client ID Required: " << clientIdRequired;
|
||||
bool maxUserLimitEnabled = settingsCache->value("security/enable_max_user_limit", false).toBool();
|
||||
qDebug() << "Maximum user limit enabled: " << maxUserLimitEnabled;
|
||||
|
|
@ -174,7 +174,7 @@ bool Servatrice::initServer()
|
|||
bool registrationEnabled = settingsCache->value("registration/enabled", false).toBool();
|
||||
bool requireEmailForRegistration = settingsCache->value("registration/requireemail", true).toBool();
|
||||
|
||||
qDebug() << "Registration enabled: " << registrationEnabled;
|
||||
qDebug() << "Registration enabled: " << regServerOnly;
|
||||
if (registrationEnabled)
|
||||
qDebug() << "Require email address to register: " << requireEmailForRegistration;
|
||||
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ private:
|
|||
QString shutdownReason;
|
||||
int shutdownMinutes;
|
||||
QTimer *shutdownTimer;
|
||||
bool isFirstShutdownMessage, clientIdRequired;
|
||||
bool isFirstShutdownMessage, clientIdRequired, regServerOnly;
|
||||
|
||||
mutable QMutex serverListMutex;
|
||||
QList<ServerProperties> serverList;
|
||||
|
|
@ -138,6 +138,7 @@ public:
|
|||
QString getLoginMessage() const { QMutexLocker locker(&loginMessageMutex); return loginMessage; }
|
||||
bool getGameShouldPing() const { return true; }
|
||||
bool getClientIdRequired() const { return clientIdRequired; }
|
||||
bool getRegOnlyServer() const { return regServerOnly; }
|
||||
int getPingClockInterval() const { return pingClockInterval; }
|
||||
int getMaxGameInactivityTime() const { return maxGameInactivityTime; }
|
||||
int getMaxPlayerInactivityTime() const { return maxPlayerInactivityTime; }
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ bool Servatrice_DatabaseInterface::initDatabase(const QString &type, const QStri
|
|||
sqlDatabase.setDatabaseName(databaseName);
|
||||
sqlDatabase.setUserName(userName);
|
||||
sqlDatabase.setPassword(password);
|
||||
|
||||
|
||||
return openDatabase();
|
||||
}
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ bool Servatrice_DatabaseInterface::openDatabase()
|
|||
{
|
||||
if (sqlDatabase.isOpen())
|
||||
sqlDatabase.close();
|
||||
|
||||
|
||||
const QString poolStr = instanceId == -1 ? QString("main") : QString("pool %1").arg(instanceId);
|
||||
qDebug() << QString("[%1] Opening database...").arg(poolStr);
|
||||
if (!sqlDatabase.open()) {
|
||||
|
|
@ -92,7 +92,7 @@ bool Servatrice_DatabaseInterface::checkSql()
|
|||
{
|
||||
if (!sqlDatabase.isValid())
|
||||
return false;
|
||||
|
||||
|
||||
if (!sqlDatabase.exec("select 1").isActive())
|
||||
return openDatabase();
|
||||
return true;
|
||||
|
|
@ -152,12 +152,6 @@ bool Servatrice_DatabaseInterface::usernameIsValid(const QString &user, QString
|
|||
return re.exactMatch(user);
|
||||
}
|
||||
|
||||
// TODO move this to Server
|
||||
bool Servatrice_DatabaseInterface::getRequireRegistration()
|
||||
{
|
||||
return settingsCache->value("authentication/regonly", 0).toBool();
|
||||
}
|
||||
|
||||
bool Servatrice_DatabaseInterface::registerUser(const QString &userName, const QString &realName, ServerInfo_User_Gender const &gender, const QString &password, const QString &emailAddress, const QString &country, QString &token, bool active)
|
||||
{
|
||||
if (!checkSql())
|
||||
|
|
@ -252,23 +246,23 @@ AuthenticationResult Servatrice_DatabaseInterface::checkUserPassword(Server_Prot
|
|||
|
||||
if (!usernameIsValid(user, reasonStr))
|
||||
return UsernameInvalid;
|
||||
|
||||
|
||||
if (checkUserIsBanned(handler->getAddress(), user, reasonStr, banSecondsLeft))
|
||||
return UserIsBanned;
|
||||
|
||||
|
||||
QSqlQuery *passwordQuery = prepareQuery("select password_sha512, active from {prefix}_users where name = :name");
|
||||
passwordQuery->bindValue(":name", user);
|
||||
if (!execSqlQuery(passwordQuery)) {
|
||||
qDebug("Login denied: SQL error");
|
||||
return NotLoggedIn;
|
||||
}
|
||||
|
||||
|
||||
if (passwordQuery->next()) {
|
||||
const QString correctPassword = passwordQuery->value(0).toString();
|
||||
const bool userIsActive = passwordQuery->value(1).toBool();
|
||||
if(!userIsActive) {
|
||||
qDebug("Login denied: user not active");
|
||||
return UserIsInactive;
|
||||
return UserIsInactive;
|
||||
}
|
||||
if (correctPassword == PasswordHasher::computeHash(password, correctPassword.left(16))) {
|
||||
qDebug("Login accepted: password right");
|
||||
|
|
@ -363,7 +357,7 @@ bool Servatrice_DatabaseInterface::activeUserExists(const QString &user)
|
|||
{
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationSql) {
|
||||
checkSql();
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select 1 from {prefix}_users where name = :name and active = 1");
|
||||
query->bindValue(":name", user);
|
||||
if (!execSqlQuery(query))
|
||||
|
|
@ -377,7 +371,7 @@ bool Servatrice_DatabaseInterface::userExists(const QString &user)
|
|||
{
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationSql) {
|
||||
checkSql();
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select 1 from {prefix}_users where name = :name");
|
||||
query->bindValue(":name", user);
|
||||
if (!execSqlQuery(query))
|
||||
|
|
@ -405,13 +399,13 @@ bool Servatrice_DatabaseInterface::isInBuddyList(const QString &whoseList, const
|
|||
{
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationNone)
|
||||
return false;
|
||||
|
||||
|
||||
if (!checkSql())
|
||||
return false;
|
||||
|
||||
|
||||
int id1 = getUserIdInDB(whoseList);
|
||||
int id2 = getUserIdInDB(who);
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select 1 from {prefix}_buddylist where id_user1 = :id_user1 and id_user2 = :id_user2");
|
||||
query->bindValue(":id_user1", id1);
|
||||
query->bindValue(":id_user2", id2);
|
||||
|
|
@ -424,13 +418,13 @@ bool Servatrice_DatabaseInterface::isInIgnoreList(const QString &whoseList, cons
|
|||
{
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationNone)
|
||||
return false;
|
||||
|
||||
|
||||
if (!checkSql())
|
||||
return false;
|
||||
|
||||
|
||||
int id1 = getUserIdInDB(whoseList);
|
||||
int id2 = getUserIdInDB(who);
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select 1 from {prefix}_ignorelist where id_user1 = :id_user1 and id_user2 = :id_user2");
|
||||
query->bindValue(":id_user1", id1);
|
||||
query->bindValue(":id_user2", id2);
|
||||
|
|
@ -442,11 +436,11 @@ bool Servatrice_DatabaseInterface::isInIgnoreList(const QString &whoseList, cons
|
|||
ServerInfo_User Servatrice_DatabaseInterface::evalUserQueryResult(const QSqlQuery *query, bool complete, bool withId)
|
||||
{
|
||||
ServerInfo_User result;
|
||||
|
||||
|
||||
if (withId)
|
||||
result.set_id(query->value(0).toInt());
|
||||
result.set_name(query->value(1).toString().toStdString());
|
||||
|
||||
|
||||
const int is_admin = query->value(2).toInt();
|
||||
int userLevel = ServerInfo_User::IsUser | ServerInfo_User::IsRegistered;
|
||||
if (is_admin == 1)
|
||||
|
|
@ -492,16 +486,16 @@ ServerInfo_User Servatrice_DatabaseInterface::getUserData(const QString &name, b
|
|||
ServerInfo_User result;
|
||||
result.set_name(name.toStdString());
|
||||
result.set_user_level(ServerInfo_User::IsUser);
|
||||
|
||||
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationSql) {
|
||||
if (!checkSql())
|
||||
return result;
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select id, name, admin, country, gender, realname, avatar_bmp, registrationDate, email from {prefix}_users where name = :name and active = 1");
|
||||
query->bindValue(":name", name);
|
||||
if (!execSqlQuery(query))
|
||||
return result;
|
||||
|
||||
|
||||
if (query->next())
|
||||
return evalUserQueryResult(query, true, withId);
|
||||
else
|
||||
|
|
@ -534,7 +528,7 @@ void Servatrice_DatabaseInterface::unlockSessionTables()
|
|||
bool Servatrice_DatabaseInterface::userSessionExists(const QString &userName)
|
||||
{
|
||||
// Call only after lockSessionTables().
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select 1 from {prefix}_sessions where user_name = :user_name and id_server = :id_server and end_time is null");
|
||||
query->bindValue(":id_server", server->getServerId());
|
||||
query->bindValue(":user_name", userName);
|
||||
|
|
@ -546,10 +540,10 @@ qint64 Servatrice_DatabaseInterface::startSession(const QString &userName, const
|
|||
{
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationNone)
|
||||
return -1;
|
||||
|
||||
|
||||
if (!checkSql())
|
||||
return -1;
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("insert into {prefix}_sessions (user_name, id_server, ip_address, start_time) values(:user_name, :id_server, :ip_address, NOW())");
|
||||
query->bindValue(":user_name", userName);
|
||||
query->bindValue(":id_server", server->getServerId());
|
||||
|
|
@ -563,13 +557,13 @@ void Servatrice_DatabaseInterface::endSession(qint64 sessionId)
|
|||
{
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationNone)
|
||||
return;
|
||||
|
||||
|
||||
if (!checkSql())
|
||||
return;
|
||||
|
||||
QSqlQuery *query = prepareQuery("lock tables {prefix}_sessions write");
|
||||
execSqlQuery(query);
|
||||
|
||||
|
||||
query = prepareQuery("update {prefix}_sessions set end_time=NOW() where id = :id_session");
|
||||
query->bindValue(":id_session", sessionId);
|
||||
execSqlQuery(query);
|
||||
|
|
@ -581,7 +575,7 @@ void Servatrice_DatabaseInterface::endSession(qint64 sessionId)
|
|||
QMap<QString, ServerInfo_User> Servatrice_DatabaseInterface::getBuddyList(const QString &name)
|
||||
{
|
||||
QMap<QString, ServerInfo_User> result;
|
||||
|
||||
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationSql) {
|
||||
checkSql();
|
||||
|
||||
|
|
@ -589,7 +583,7 @@ QMap<QString, ServerInfo_User> Servatrice_DatabaseInterface::getBuddyList(const
|
|||
query->bindValue(":name", name);
|
||||
if (!execSqlQuery(query))
|
||||
return result;
|
||||
|
||||
|
||||
while (query->next()) {
|
||||
const ServerInfo_User &temp = evalUserQueryResult(query, false);
|
||||
result.insert(QString::fromStdString(temp.name()), temp);
|
||||
|
|
@ -601,7 +595,7 @@ QMap<QString, ServerInfo_User> Servatrice_DatabaseInterface::getBuddyList(const
|
|||
QMap<QString, ServerInfo_User> Servatrice_DatabaseInterface::getIgnoreList(const QString &name)
|
||||
{
|
||||
QMap<QString, ServerInfo_User> result;
|
||||
|
||||
|
||||
if (server->getAuthenticationMethod() == Servatrice::AuthenticationSql) {
|
||||
checkSql();
|
||||
|
||||
|
|
@ -609,7 +603,7 @@ QMap<QString, ServerInfo_User> Servatrice_DatabaseInterface::getIgnoreList(const
|
|||
query->bindValue(":name", name);
|
||||
if (!execSqlQuery(query))
|
||||
return result;
|
||||
|
||||
|
||||
while (query->next()) {
|
||||
ServerInfo_User temp = evalUserQueryResult(query, false);
|
||||
result.insert(QString::fromStdString(temp.name()), temp);
|
||||
|
|
@ -622,13 +616,13 @@ int Servatrice_DatabaseInterface::getNextGameId()
|
|||
{
|
||||
if (!sqlDatabase.isValid())
|
||||
return server->getNextLocalGameId();
|
||||
|
||||
|
||||
if (!checkSql())
|
||||
return -1;
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("insert into {prefix}_games (time_started) values (now())");
|
||||
execSqlQuery(query);
|
||||
|
||||
|
||||
return query->lastInsertId().toInt();
|
||||
}
|
||||
|
||||
|
|
@ -636,10 +630,10 @@ int Servatrice_DatabaseInterface::getNextReplayId()
|
|||
{
|
||||
if (!checkSql())
|
||||
return -1;
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("insert into {prefix}_replays () values ()");
|
||||
execSqlQuery(query);
|
||||
|
||||
|
||||
return query->lastInsertId().toInt();
|
||||
}
|
||||
|
||||
|
|
@ -647,7 +641,7 @@ void Servatrice_DatabaseInterface::storeGameInformation(const QString &roomName,
|
|||
{
|
||||
if (!checkSql())
|
||||
return;
|
||||
|
||||
|
||||
QVariantList gameIds1, playerNames, gameIds2, userIds, replayNames;
|
||||
QSetIterator<QString> playerIterator(allPlayersEver);
|
||||
while (playerIterator.hasNext()) {
|
||||
|
|
@ -665,20 +659,20 @@ void Servatrice_DatabaseInterface::storeGameInformation(const QString &roomName,
|
|||
userIds.append(id);
|
||||
replayNames.append(QString::fromStdString(gameInfo.description()));
|
||||
}
|
||||
|
||||
|
||||
QVariantList replayIds, replayGameIds, replayDurations, replayBlobs;
|
||||
for (int i = 0; i < replayList.size(); ++i) {
|
||||
QByteArray blob;
|
||||
const unsigned int size = replayList[i]->ByteSize();
|
||||
blob.resize(size);
|
||||
replayList[i]->SerializeToArray(blob.data(), size);
|
||||
|
||||
|
||||
replayIds.append(QVariant((qulonglong) replayList[i]->replay_id()));
|
||||
replayGameIds.append(gameInfo.game_id());
|
||||
replayDurations.append(replayList[i]->duration_seconds());
|
||||
replayBlobs.append(blob);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
QSqlQuery *query = prepareQuery("update {prefix}_games set room_name=:room_name, descr=:descr, creator_name=:creator_name, password=:password, game_types=:game_types, player_count=:player_count, time_finished=now() where id=:id_game");
|
||||
query->bindValue(":room_name", roomName);
|
||||
|
|
@ -717,17 +711,17 @@ void Servatrice_DatabaseInterface::storeGameInformation(const QString &roomName,
|
|||
DeckList *Servatrice_DatabaseInterface::getDeckFromDatabase(int deckId, int userId)
|
||||
{
|
||||
checkSql();
|
||||
|
||||
|
||||
QSqlQuery *query = prepareQuery("select content from {prefix}_decklist_files where id = :id and id_user = :id_user");
|
||||
query->bindValue(":id", deckId);
|
||||
query->bindValue(":id_user", userId);
|
||||
execSqlQuery(query);
|
||||
if (!query->next())
|
||||
throw Response::RespNameNotFound;
|
||||
|
||||
|
||||
DeckList *deck = new DeckList;
|
||||
deck->loadFromString_Native(query->value(0).toString());
|
||||
|
||||
|
||||
return deck;
|
||||
}
|
||||
|
||||
|
|
@ -789,7 +783,7 @@ bool Servatrice_DatabaseInterface::changeUserPassword(const QString &user, const
|
|||
qDebug("Change password denied: SQL error");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (!passwordQuery->next())
|
||||
return true;
|
||||
|
||||
|
|
@ -831,7 +825,7 @@ int Servatrice_DatabaseInterface::getActiveUserCount()
|
|||
|
||||
void Servatrice_DatabaseInterface::updateUsersClientID(const QString &userName, const QString &userClientID)
|
||||
{
|
||||
|
||||
|
||||
if (!checkSql())
|
||||
return;
|
||||
|
||||
|
|
@ -839,5 +833,5 @@ void Servatrice_DatabaseInterface::updateUsersClientID(const QString &userName,
|
|||
query->bindValue(":clientid", userClientID);
|
||||
query->bindValue(":username", userName);
|
||||
execSqlQuery(query);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ private:
|
|||
bool checkUserIsNameBanned(QString const &userName, QString &banReason, int &banSecondsRemaining);
|
||||
|
||||
protected:
|
||||
AuthenticationResult checkUserPassword(Server_ProtocolHandler *handler, const QString &user,
|
||||
AuthenticationResult checkUserPassword(Server_ProtocolHandler *handler, const QString &user,
|
||||
const QString &password, QString &reasonStr, int &secondsLeft);
|
||||
|
||||
public slots:
|
||||
|
|
@ -36,7 +36,7 @@ public slots:
|
|||
public:
|
||||
Servatrice_DatabaseInterface(int _instanceId, Servatrice *_server);
|
||||
~Servatrice_DatabaseInterface();
|
||||
bool initDatabase(const QString &type, const QString &hostName, const QString &databaseName,
|
||||
bool initDatabase(const QString &type, const QString &hostName, const QString &databaseName,
|
||||
const QString &userName, const QString &password);
|
||||
bool openDatabase();
|
||||
bool checkSql();
|
||||
|
|
@ -52,7 +52,7 @@ public:
|
|||
bool isInBuddyList(const QString &whoseList, const QString &who);
|
||||
bool isInIgnoreList(const QString &whoseList, const QString &who);
|
||||
ServerInfo_User getUserData(const QString &name, bool withId = false);
|
||||
void storeGameInformation(const QString &roomName, const QStringList &roomGameTypes, const ServerInfo_Game &gameInfo,
|
||||
void storeGameInformation(const QString &roomName, const QStringList &roomGameTypes, const ServerInfo_Game &gameInfo,
|
||||
const QSet<QString> &allPlayersEver, const QSet<QString>&allSpectatorsEver, const QList<GameReplay *> &replayList);
|
||||
DeckList *getDeckFromDatabase(int deckId, int userId);
|
||||
|
||||
|
|
@ -68,12 +68,11 @@ public:
|
|||
bool usernameIsValid(const QString &user, QString & error);
|
||||
bool checkUserIsBanned(const QString &ipAddress, const QString &userName, QString &banReason, int &banSecondsRemaining);
|
||||
|
||||
bool getRequireRegistration();
|
||||
bool registerUser(const QString &userName, const QString &realName, ServerInfo_User_Gender const &gender,
|
||||
bool registerUser(const QString &userName, const QString &realName, ServerInfo_User_Gender const &gender,
|
||||
const QString &password, const QString &emailAddress, const QString &country, QString &token, bool active = false);
|
||||
bool activateUser(const QString &userName, const QString &token);
|
||||
void updateUsersClientID(const QString &userName, const QString &userClientID);
|
||||
void logMessage(const int senderId, const QString &senderName, const QString &senderIp, const QString &logMessage,
|
||||
void logMessage(const int senderId, const QString &senderName, const QString &senderIp, const QString &logMessage,
|
||||
LogMessage_TargetType targetType, const int targetId, const QString &targetName);
|
||||
bool changeUserPassword(const QString &user, const QString &oldPassword, const QString &newPassword);
|
||||
QChar getGenderChar(ServerInfo_User_Gender const &gender);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue