; 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.
;
; Can be passed to servatrice with --config /path/to/servatrice.ini

[server]

; This is the name that servatrice exposes to the users; the default value is pretty boring
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

; The IP address servatrice will listen on for clients; defaults to "any" to listen on all the interfaces,
; a specific IPv4/v6 addresses can be used, eg for localhost-only 127.0.0.1 for IPv4 or ::1 for IPv6.

host=any

; 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.
; Set to 0 to disable the tcp server.
number_pools=1

; Servatrice can listen for clients on websockets, too. Unfortunately it can't support more than one thread.
; Set to 0 to disable the websocket server.
websocket_number_pools=1

; The IP address servatrice will listen on for websockets clients; defaults to "any"

websocket_host=any

; The TCP port number servatrice will listen on for websockets clients; default is 4748
websocket_port=4748

; 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

; 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)
; Note: When running servatrice under windows you will need to use double backslashes between folder locations
; [ex: C:\\Temp\\server.log ]
logfile=server.log

; You may want to log only certain messages in the logfile. The default log level is extremely verbose.
; This setting should contain a comma-separated list of strings that will be selectively logged.
; All other lines will be excluded from the log. Default is empty; example: "Registration,_Login,foobar"
logfilters=""

; Set the time interval in seconds that servatrice will use to communicate with each connected client
; to verify the client has not timed out. Defaults is 1 seconds
clientkeepalive=1

; Maximum time in seconds a player can stay inactive with there client not even responding to pings, before is
; considered disconnected; default is 15
max_player_inactivity_time=15

; More modern clients generate client IDs based on specific client side information.  Enable this option to
; require that clients report the client ID in order to log into the server.  Default is false
requireclientid=false

; You can limit the types of clients that connect to the server by requiring different features be available
; on the client.  This setting can contain a comma-seperated list of features.  if any of the features
; listed in this line are not available on the client the client will be denied access to the server upon
; attempting to log in.  Example: "client_id,client_ver"
requiredfeatures=""

; You can define custom warnings that users are sent when the moderation staff uses the right client warn user
; menu option.  This list is comma seperated that each item will appear in the drop down list for staff members
; to choose from.  Example: "Flaming,Foul Language"
officialwarnings="Flamming,Spamming,Causing Drama,Abusive Language"

; Maximum time in seconds a player can stay connected but idle.  Default is 3600 (0 = disabled)
; Clients will be notified at the 90% time period of pending disconnection if they do not take action.
idleclienttimeout=3600

[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

; 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 false (accept unregistered users)
regonly=false

[users]

; The minimum length a username can be
minnamelength=6

; The maximum length a username can be
maxnamelength=12

; If a username should be allowed to contain lowercase chars [a-z]
allowlowercase=true

; If a username should be allowed to conatain uppercase chars [A-Z]
allowuppercase=true

; If a username should be allowed to contain numbers [0-9]
allownumerics=true

; Define punctuation allowed in usernames
allowedpunctuation=_.-

; If a username can begin with punctuation defined in allowedpunctuation
allowpunctuationprefix=false

; Disallow usernames containing these words. This list is comma seperated, e.g.
; "admin,user,name"
disallowedwords="admin"

; Disallow usernames matching these regular expressions. This list is comma
; separated, e.g. "\\w+\\d+,\\d{2}user", hence you cannot use commas in your
; expressions. Backslashes must be escaped, so `\w+\d+` becomes `\\w+\\d+`.
; WARNING: Complex expressions can be harmful to performance. Please make sure
;          your expressions are considered well formed. See this page for info:
;          http://www.regular-expressions.info/catastrophic.html
disallowedregexp=""

[registration]

; Servatrice can process registration requests to add new users on the fly.
; Enable this feature? Default false.
;enabled=false

; Require users to provide an email address in order to register. Default true.
;requireemail=true

; Require email activation. Newly registered users will receive an activation token by email,
; and will be required to input back this token on cockatrice at the first login to get their
; account activated. Default true.
;requireemailactivation=true

; Set this number to the maximum number of accounts any one user can use to create new accounts
; using the same email address. 0 = Unlimited number of accounts (default).
;maxaccountsperemail=0

; You can prevent users from using certain mail domains for registration.  This setting contains a
; comma-seperated list of email provider domains that you would like to prevent users from using
; during registration. Comparison's are implicit, so placing an entry such as mail.com will also
; prevent users from registering accounts with providers such as gmail.com and hotmail.com
; Example: "10minutemail.com,gmail.com"
;emailproviderblacklist=""

[forgotpassword]

; Servatrice can process forgot password requests allowing users to reset their account
; passwords in the event they forget it.  Should this feature be enabled? Default: false.
; enable=false

; Forgot password request should not be allowed to stay valid forever.  This settings
; informs servatrice how long a players forgot password reset token is valid for (in minutes).
; Default: 60
; tokenlife=60

; Servatrice can challenge users that are making forgot password requests to answer
; questions in regards to their account to help validate they are the true owner of the account.
; Should this feature be enabled? Default: false
; enablechallenge=false

; Email subject for the forgot password emails
; subject="Cockatrice forgot password token"

; Forgot password email body. You can use these tags here: %username %token
; They will be substituted with the actual values in the email
;
; body="Hi %username, sorry to hear you forgot your password on our Cockatrice server\r\nHere's the token to use to reset your account password:\r\n\r\n%token\r\n\r\nHappy gaming!"


[smtp]

; Enable the internal smtp client to send registration emails.  If you would like to
; use some other method to send email activation tokens set this value to false. Otherwise
; setting it to true (default) the server will send canned generated emails containing
; activation tokens for you during update intervals. Setting this to false will require
; you to either manually activate user accounts or manually send users the activation token
; by whatever means.
enableinternalsmtpclient=true

; Connectin type: currently supported method are "tcp" and "ssl"; tls is autodetected if available
connection=tcp

; Accept all certificates: in ssl mode, enable this if your server is using an invalid/self signed certificate
acceptallcerts=false;

; Hostname or IP addres of the smtp server
host=localhost

; Smtp port number of the smtp server. Usual values are 25 or 587 for tcp, 465 for ssl
port=25

; Username: this typically matches the "from" email address
username=root@localhost

; Password for the username
password=foobar

; Sender email address: the "from" email address
email=root@localhost

; Sender email name
name="Cockatrice server"

; Email subject
subject="Cockatrice server account activation token"

; Email body. You can use these tags here: %username %token
; They will be substituted with the actual values in the email
;
body="Hi %username, thank our for registering on our Cockatrice server\r\nHere's the activation token you need to supply for activating your account:\r\n\r\n%token\r\n\r\nHappy gaming!"

[database]

; Database type. Valid values are:
; * none: no database;
; * mysql: mysql or compatible database;
type=none

; Prefix used in he database for table names; default is cockatrice
prefix=cockatrice

; Database connection parameter: server hostname or IP
hostname=localhost

; Database connection parameter: database name
database=servatrice

; Database connection parameter: database user
user=servatrice

; Database connection parameter: database user's password
password=foobar

[rooms]

; A servatrice 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

; Example configuration for a server with rooms configured in the configuration file. Number of rooms defined
roomlist\size=1

; Room name for the room number 1
roomlist\1\name="General room"

; Room description for the room number 1
roomlist\1\description="Play anything here."

; Rooms can restrict the level of user that can join. Current supported options are none, registered, moderator, administrator.
; Default is none.
roomlist\1\permissionlevel=none

; Rooms can restrict the permission level of users that can join, Currnetly supported options are none, privileged, vip, and donator.
; Default is none.
roomlist\1\privilegelevel=none

; Wether to make users autojoin this room when connected to the server
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."

; The number of chat history messages to save that gets presented to a user joining the room
roomlist\1\chathistorysize=100

; Number of game types allowed (defined) in the room number 1
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\2\name="GameType2"
roomlist\1\game_types\3\name="GameType3"


[game]

; 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

; All actions during a game are recorded and stored in the database as a replay that all participants of
; the game can go back to and review after the game is closed.  This can require a fairly large amount of
; storage to save all the information.  Disable this option to prevent the storing of replay data in
; the database.  Default value is true.
store_replays=true

[security]
; You may want to restrict the number of users that can connect to your server at any given time.
enable_max_user_limit=false

; Maximum number of users that can connect to the server, default is 500.
max_users_total=500

; Maximum number of users that can connect to the server using a tcp connection, default is 500.
max_users_tcp=500

; Maximum number of users that can connect to the server using a websocket connection, default is 500.
max_users_websocket=500

; Maximum number of users that can connect from the same IP address; useful to avoid bots, default is 4
max_users_per_address=4

; You may want to allow an unlimited number of users from a trusted source. This setting can contain a
; comma-separed list of IP addresses which will allow an unlimited number of connections from each of the
; IP addresses listed (ignoring the max_users_per_address). Default is "127.0.0.1,::1"; example: "192.73.233.244,81.4.100.74"
trusted_sources="127.0.0.1,::1"

; Servatrice can avoid users from flooding rooms with large number of messages in an interval of time.
; This setting defines the length in seconds of the considered interval; default is 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

; Maximum number of messages in an interval before new messages gets dropped; default is 10
max_message_count_per_interval=10

; Maximum number of games a single user can create; default is 5
max_games_per_user=5

; Servatrice can avoid users from flooding games with large number of game commands in an interval of time.
; This setting defines the length in seconds of the considered interval; default is 10
command_counting_interval=10

; Maximum number of game commands in an interval before new commands gets dropped; default is 20
max_command_count_per_interval=20

[logging]
; Admin/Moderators can query the stored logs for information when looking up reports by various players. This
; option can allow or disallow them from doing so.
; !!NOTE!! Enabling this feature puts a very high CPU and DISK load on the server, enable with caution.
enablelogquery=false

; Servatrice can log user messages to the database table cockatrice_log.
; These messages can come from different sources; each source can be enabled separately.

; Log user messages inside chat rooms
log_user_msg_room=false

; Log user messages inside games
log_user_msg_game=false

; Log user messages in private chats
log_user_msg_chat=false

; Log user messages coming from other servers in the network
log_user_msg_isl=false

[audit]

; Servatrice can record certain actions being performed in the database for server operators to better understand
; if some one may be abusing application functionality.  Enabling auditing will allow servatrice to record any
; of the below enabled audit functionality to be recorded.
; Default: true
enable_audit=true

; Servatrice can record when users attempt a new account registration.  Should we enable auditing for this action?
; Default: true
enable_registration_audit=true

; Servatrice can record when a users attempts to reset the account password.  Should we enable auditing for this action?
; Default: true
enable_forgotpassword_audit=true


; 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
