Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
faa66e4d
Commit
faa66e4d
authored
Oct 06, 2014
by
Gavin Bisesi
Browse files
Merge pull request #355 from ctrlaltca/servatrice_passwordauth
Servatrice password authentication
parents
006451f4
0d35488c
Changes
8
Hide whitespace changes
Inline
Side-by-side
servatrice/servatrice.ini.example
View file @
faa66e4d
; Servatrice configuration file
;
; This is the main configuration file for Servatrice; while using a configuration is not mandatory,
; you may want to customize some aspects of your servatrice instance, like its name, port or the way
; users can authenticate to the server.
[server]
[server]
port=4747
statusupdate=15000
; This is the name that servatrice exposes to the users; the default value is pretty boring
logfile=server.log
name="My Cockatrice server"
name="My Cockatrice server"
; Multiple servatrice servers can run on the same host using the same database; each server instance
; must have a different id; the default id is 1
id=1
id=1
; The TCP port number servatrice will listen on for clients; default is 4747
port=4747
; Servatrice can scale up to serve big number of users using more than one parallel thread of execution;
; If your server is hosting a lot of players and they frequently report of being unable to login or
; long delays (lag), you may want to try increasing this value; default is 1.
number_pools=1
number_pools=1
; When database is enabled, servatrice writes the server status in the "update" database table; this
; setting defines every how many milliseconds servatrice will update its status; default is 15000 (15 secs)
statusupdate=15000
; Do you want servatrice to write important events and errors to a logfile? Default is 1 (yes).
writelog=1
writelog=1
; Choose a name for the log file, if enabled; you can specify an absolute path or a path relative to
; the servatrice executable; the default file name is server.log (in the same path as servatrice)
logfile=server.log
; You may want to silence some commonly recurring messages in the logfile. This setting can contain a
; comma-separed list of words; if any message that is about to be logged contains at least one of these words,
; it won't be logged. Default is empty; example: "kittens,ponies,faires"
logfilters=""
logfilters=""
[servernetwork]
active=0
port=14747
ssl_cert=ssl_cert.pem
ssl_key=ssl_key.pem
[authentication]
[authentication]
; Servatrice can authenticate users connecting. It currently supports 3 different authentication methods:
; * none: no authentication, accept every user;
; * password: require users to specify a common password to log in;
; * sql: authenticate users against the "users" table of the database;
; Please note that only the "sql" method permits to have registered users and store their data on the server.
method=none
method=none
; if the chosen authentication method is password, here you can define the password your users will use to log in
password=123456
; Accept only registered users? default is 0 (accept unregistered users)
regonly=0
regonly=0
[database]
[database]
; Database type. Valid values are:
; * none: no database;
; * mysql: mysql or compatible database;
type=none
type=none
; Prefix used in he database for table names; default is cockatrice
prefix=cockatrice
prefix=cockatrice
; Database connection parameter: server hostname or IP
hostname=localhost
hostname=localhost
; Database connection parameter: database name
database=servatrice
database=servatrice
; Database connection parameter: database user
user=servatrice
user=servatrice
; Database connection parameter: database user's password
password=foobar
password=foobar
[rooms]
[rooms]
; A servtrice server can expose to the users different "rooms" to chat and create games. Rooms can be defined
; with two different methods:
; config: rooms are defined in this configuration (see the following example)
; sql: rooms are defined in the "rooms" table of the database
method=config
method=config
; Example configuration for a server with rooms configured in the configuration file. Number of rooms defined
roomlist\size=1
roomlist\size=1
; Room name for the room number 1
roomlist\1\name="General room"
roomlist\1\name="General room"
; Room description for the room number 1
roomlist\1\description="Play anything here."
roomlist\1\description="Play anything here."
; Wether to make users autojoin this room when connected to the server
roomlist\1\autojoin=true
roomlist\1\autojoin=true
; Message displayed to each user when he joins room number 1
roomlist\1\joinmessage="This message is only here to show that rooms can have a join message."
roomlist\1\joinmessage="This message is only here to show that rooms can have a join message."
; Number of game types allowed (defined) in the room number 1
roomlist\1\game_types\size=3
roomlist\1\game_types\size=3
; Name of the three game types for the room number 1
roomlist\1\game_types\1\name="GameType1"
roomlist\1\game_types\1\name="GameType1"
roomlist\1\game_types\2\name="GameType2"
roomlist\1\game_types\2\name="GameType2"
roomlist\1\game_types\3\name="GameType3"
roomlist\1\game_types\3\name="GameType3"
[game]
[game]
max_game_inactivity_time=120
; Maximum time in seconds a player can stay inactive, with his client hot even responding to pings, before is
; considered disconnected; default is 15
max_player_inactivity_time=15
max_player_inactivity_time=15
; Maximum time in seconds all players in a game can stay inactive before the game is automatically closed;
; default is 120
max_game_inactivity_time=120
[security]
[security]
; Maximum number of users that can connect from the same IP address; useful to avoid bots, default is 4
max_users_per_address=4
max_users_per_address=4
; Servatrice can avoid users from flooding rooms with large number messages in an interval of time.
; This setting defines the length in seconds of the considered interval; default is 10
message_counting_interval=10
message_counting_interval=10
; Maximum size in characters of all messages in an interval before new messages gets dropped; default is 1000
max_message_size_per_interval=1000
max_message_size_per_interval=1000
; Maximum number of messages in an interval before new messages gets dropped; default is 10
max_message_count_per_interval=10
max_message_count_per_interval=10
; Maximum number of games a single user can create; default is 5
max_games_per_user=5
max_games_per_user=5
; EXPERIMENTAL - NOT WORKING YET
; The following settings are relative to the server network functionality, that is not yet complete.
; Avoid enabling it unless you are willing to test it and help its development.
[servernetwork]
; Servatrice servers can connect themselves and build a network. This settins enable the ability of servatrice
; of waiting for other server's connections and connect to other servers. Other servers can be defined in the
; "servers" table of the database. Default is 0 (disabled)
active=0
; The TCP port number servatrice will listen on for other servers; default is 14747
port=14747
; Server-to-server communication needs a valid certificate in PEM format. Enter its filename in this setting
ssl_cert=ssl_cert.pem
; Filename of the private key for the server-to-server certificate
ssl_key=ssl_key.pem
servatrice/servatrice.sql
View file @
faa66e4d
...
@@ -208,3 +208,12 @@ CREATE TABLE `cockatrice_replays_access` (
...
@@ -208,3 +208,12 @@ CREATE TABLE `cockatrice_replays_access` (
KEY
`id_game`
(
`id_game`
)
KEY
`id_game`
(
`id_game`
)
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
CREATE
TABLE
IF
NOT
EXISTS
`cockatrice_rooms`
(
`id`
int
(
7
)
unsigned
NOT
NULL
auto_increment
,
`name`
varchar
(
50
)
NOT
NULL
,
`descr`
varchar
(
255
)
NOT
NULL
,
`autojoin`
tinyint
(
1
)
default
0
,
`join_message`
varchar
(
255
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
servatrice/src/main.cpp
View file @
faa66e4d
...
@@ -166,7 +166,7 @@ int main(int argc, char *argv[])
...
@@ -166,7 +166,7 @@ int main(int argc, char *argv[])
configPath
=
SettingsCache
::
guessConfigurationPath
(
configPath
);
configPath
=
SettingsCache
::
guessConfigurationPath
(
configPath
);
qWarning
()
<<
"Using configuration file: "
<<
configPath
;
qWarning
()
<<
"Using configuration file: "
<<
configPath
;
settingsCache
=
new
SettingsCache
();
settingsCache
=
new
SettingsCache
(
configPath
);
loggerThread
=
new
QThread
;
loggerThread
=
new
QThread
;
loggerThread
->
setObjectName
(
"logger"
);
loggerThread
->
setObjectName
(
"logger"
);
...
...
servatrice/src/servatrice.cpp
View file @
faa66e4d
...
@@ -141,9 +141,11 @@ bool Servatrice::initServer()
...
@@ -141,9 +141,11 @@ bool Servatrice::initServer()
const
QString
authenticationMethodStr
=
settingsCache
->
value
(
"authentication/method"
).
toString
();
const
QString
authenticationMethodStr
=
settingsCache
->
value
(
"authentication/method"
).
toString
();
if
(
authenticationMethodStr
==
"sql"
)
{
if
(
authenticationMethodStr
==
"sql"
)
{
authenticationMethod
=
AuthenticationSql
;
authenticationMethod
=
AuthenticationSql
;
}
else
if
(
authenticationMethodStr
==
"password"
)
{
authenticationMethod
=
AuthenticationPassword
;
}
else
{
}
else
{
if
(
regServerOnly
)
{
if
(
regServerOnly
)
{
qDebug
()
<<
"Registration only server enabled but no
DB Connection
: Error."
;
qDebug
()
<<
"Registration only server enabled but no
authentication method defined
: Error."
;
return
false
;
return
false
;
}
}
authenticationMethod
=
AuthenticationNone
;
authenticationMethod
=
AuthenticationNone
;
...
...
servatrice/src/servatrice.h
View file @
faa66e4d
...
@@ -88,7 +88,7 @@ class Servatrice : public Server
...
@@ -88,7 +88,7 @@ class Servatrice : public Server
{
{
Q_OBJECT
Q_OBJECT
public:
public:
enum
AuthenticationMethod
{
AuthenticationNone
,
AuthenticationSql
};
enum
AuthenticationMethod
{
AuthenticationNone
,
AuthenticationSql
,
AuthenticationPassword
};
private
slots
:
private
slots
:
void
statusUpdate
();
void
statusUpdate
();
void
shutdownTimeout
();
void
shutdownTimeout
();
...
...
servatrice/src/servatrice_database_interface.cpp
View file @
faa66e4d
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
#include
"servatrice_database_interface.h"
#include
"servatrice_database_interface.h"
#include
"passwordhasher.h"
#include
"passwordhasher.h"
#include
"serversocketinterface.h"
#include
"serversocketinterface.h"
#include
"settingscache.h"
#include
"decklist.h"
#include
"decklist.h"
#include
"pb/game_replay.pb.h"
#include
"pb/game_replay.pb.h"
#include
<QDebug>
#include
<QDebug>
...
@@ -92,6 +93,13 @@ AuthenticationResult Servatrice_DatabaseInterface::checkUserPassword(Server_Prot
...
@@ -92,6 +93,13 @@ AuthenticationResult Servatrice_DatabaseInterface::checkUserPassword(Server_Prot
{
{
switch
(
server
->
getAuthenticationMethod
())
{
switch
(
server
->
getAuthenticationMethod
())
{
case
Servatrice
::
AuthenticationNone
:
return
UnknownUser
;
case
Servatrice
::
AuthenticationNone
:
return
UnknownUser
;
case
Servatrice
::
AuthenticationPassword
:
{
QString
configPassword
=
settingsCache
->
value
(
"authentication/password"
).
toString
();
if
(
configPassword
==
password
)
return
PasswordRight
;
return
NotLoggedIn
;
}
case
Servatrice
::
AuthenticationSql
:
{
case
Servatrice
::
AuthenticationSql
:
{
if
(
!
checkSql
())
if
(
!
checkSql
())
return
UnknownUser
;
return
UnknownUser
;
...
...
servatrice/src/settingscache.cpp
View file @
faa66e4d
...
@@ -7,6 +7,12 @@
...
@@ -7,6 +7,12 @@
#include
<QDesktopServices>
#include
<QDesktopServices>
#endif
#endif
SettingsCache
::
SettingsCache
(
const
QString
&
fileName
,
QSettings
::
Format
format
,
QObject
*
parent
)
:
QSettings
(
fileName
,
format
,
parent
)
{
}
QString
SettingsCache
::
guessConfigurationPath
(
QString
&
specificPath
)
QString
SettingsCache
::
guessConfigurationPath
(
QString
&
specificPath
)
{
{
const
QString
fileName
=
"servatrice.ini"
;
const
QString
fileName
=
"servatrice.ini"
;
...
...
servatrice/src/settingscache.h
View file @
faa66e4d
...
@@ -9,7 +9,7 @@ class SettingsCache : public QSettings {
...
@@ -9,7 +9,7 @@ class SettingsCache : public QSettings {
private:
private:
QSettings
*
settings
;
QSettings
*
settings
;
public:
public:
SettingsCache
(
const
QString
&
fileName
=
"servatrice.ini"
,
QSettings
::
Format
format
=
QSettings
::
IniFormat
,
QObject
*
parent
=
0
)
{
}
;
SettingsCache
(
const
QString
&
fileName
=
"servatrice.ini"
,
QSettings
::
Format
format
=
QSettings
::
IniFormat
,
QObject
*
parent
=
0
);
static
QString
guessConfigurationPath
(
QString
&
specificPath
);
static
QString
guessConfigurationPath
(
QString
&
specificPath
);
};
};
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment