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")