diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 7890d63a..ee1f3c59 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -1,4 +1,4 @@ -/*************************************************************************** +/*************************************************************************** * Copyright (C) 2008 by Max-Wilhelm Bruker * * brukie@gmx.net * * * @@ -225,7 +225,7 @@ void MainWindow::actAbout() + tr("French:") + " Yannick Hammer, Arnaud Faes
" + tr("Japanese:") + " Nagase Task
" + tr("Russian:") + " Alexander Davidov
" -// + tr("Czech:") + " Ondřej Trhoň
" +// + tr("Czech:") + " Ondrej Trhon
" // + tr("Slovak:") + " Ganjalf Rendy
" + tr("Italian:") + " Luigi Sciolla
" + tr("Swedish:") + " Jessica Dahl
" @@ -261,6 +261,9 @@ void MainWindow::loginError(Response::ResponseCode r, QString reasonStr, quint32 case Response::RespUsernameInvalid: QMessageBox::critical(this, tr("Error"), tr("Invalid username.")); break; + case Response::RespRegistrationRequired: + QMessageBox::critical(this, tr("Error"), tr("This server requires user registration.")); + break; default: QMessageBox::critical(this, tr("Error"), tr("Unknown login error: %1").arg(static_cast(r))); } diff --git a/common/pb/response.proto b/common/pb/response.proto index 4fa3c447..0f13c415 100644 --- a/common/pb/response.proto +++ b/common/pb/response.proto @@ -23,6 +23,7 @@ message Response { RespUserIsBanned = 19; RespAccessDenied = 20; RespUsernameInvalid = 21; + RespRegistrationRequired = 22; } enum ResponseType { JOIN_ROOM = 1000; diff --git a/common/server.cpp b/common/server.cpp index f0530497..7603b0b8 100644 --- a/common/server.cpp +++ b/common/server.cpp @@ -34,6 +34,7 @@ #include #include #include +#include Server::Server(bool _threaded, QObject *parent) : QObject(parent), threaded(_threaded), nextLocalGameId(0) @@ -131,6 +132,14 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString } else if (authState == UnknownUser) { // Change user name so that no two users have the same names, // don't interfere with registered user names though. + QSettings *settings = new QSettings("servatrice.ini", QSettings::IniFormat); + bool requireReg = settings->value("server/regonly").toBool(); + if (requireReg) { + qDebug("Login denied: registration required"); + databaseInterface->unlockSessionTables(); + return RegistrationRequired; + } + QString tempName = name; int i = 0; while (users.contains(tempName) || databaseInterface->userExists(tempName) || databaseInterface->userSessionExists(tempName)) diff --git a/common/server.h b/common/server.h index 631d2d2e..2cf4cc57 100644 --- a/common/server.h +++ b/common/server.h @@ -27,7 +27,7 @@ class GameEventContainer; class CommandContainer; class Command_JoinGame; -enum AuthenticationResult { NotLoggedIn = 0, PasswordRight = 1, UnknownUser = 2, WouldOverwriteOldSession = 3, UserIsBanned = 4, UsernameInvalid = 5 }; +enum AuthenticationResult { NotLoggedIn = 0, PasswordRight = 1, UnknownUser = 2, WouldOverwriteOldSession = 3, UserIsBanned = 4, UsernameInvalid = 5, RegistrationRequired = 6 }; class Server : public QObject { diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index eb8322d0..8792cbb7 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -345,6 +345,7 @@ Response::ResponseCode Server_ProtocolHandler::cmdLogin(const Command_Login &cmd case NotLoggedIn: return Response::RespWrongPassword; case WouldOverwriteOldSession: return Response::RespWouldOverwriteOldSession; case UsernameInvalid: return Response::RespUsernameInvalid; + case RegistrationRequired: return Response::RespRegistrationRequired; default: authState = res; } diff --git a/servatrice/servatrice.ini.example b/servatrice/servatrice.ini.example index c50ff9f1..bb83b53c 100644 --- a/servatrice/servatrice.ini.example +++ b/servatrice/servatrice.ini.example @@ -7,6 +7,7 @@ id=1 number_pools=1 writelog=1 logfilters="" +regonly=0 [servernetwork] active=0 diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp index ee513339..0b087ccb 100644 --- a/servatrice/src/servatrice.cpp +++ b/servatrice/src/servatrice.cpp @@ -132,12 +132,18 @@ bool Servatrice::initServer() { serverName = settings->value("server/name").toString(); serverId = settings->value("server/id", 0).toInt(); - + bool regServerOnly = settings->value("server/regonly", 0).toBool(); + const QString authenticationMethodStr = settings->value("authentication/method").toString(); - if (authenticationMethodStr == "sql") + if (authenticationMethodStr == "sql") { authenticationMethod = AuthenticationSql; - else + } else { + if (regServerOnly) { + qDebug() << "Registration only server enabled but no DB Connection : Error."; + return false; + } authenticationMethod = AuthenticationNone; + } QString dbTypeStr = settings->value("database/type").toString(); if (dbTypeStr == "mysql")