lila/conf/base.conf

738 lines
15 KiB
Plaintext
Raw Normal View History

2015-10-28 05:53:22 -06:00
mongodb {
uri = "mongodb://127.0.0.1:27017/lichess"
mongo-async-driver = {}
}
net {
domain = "lichess.org"
protocol = "http://"
base_url = ${net.protocol}${net.domain}
ip = "5.196.91.160"
asset {
domain = ${net.domain}
2016-07-12 18:13:13 -06:00
version = 982
2015-10-28 05:53:22 -06:00
}
}
forcedev = false
2015-10-28 05:53:22 -06:00
play {
server {
netty {
# The maximum length of the initial line. This effectively restricts the maximum length of a URL that the server will
# accept, the initial line consists of the method (3-7 characters), the URL, and the HTTP version (8 characters),
# including typical whitespace, the maximum URL length will be this number - 18.
maxInitialLineLength = 2048 # 4096
# The maximum length of the HTTP headers. The most common effect of this is a restriction in cookie length, including
# number of cookies and size of cookie values.
maxHeaderSize = 4096 # 8192
}
}
i18n {
langs=[en,fr,ru,de,tr,sr,lv,bs,da,es,ro,it,fi,uk,pt,pl,nl,vi,sv,cs,sk,hu,ca,sl,az,nn,eo,tp,el,fp,lt,nb,et,hy,af,hi,ar,zh,gl,hr,mk,id,ja,bg,th,fa,he,mr,mn,cy,gd,ga,sq,be,ka,sw,ps,is,kk,io,gu,fo,eu,bn,id,la,jv,ky,pi,as,le,ta,sa,ml,kn,ko,mg,kb,zu,ur,yo,tl,fy,jb,tg]
2015-10-28 05:53:22 -06:00
}
http {
session {
cookieName = "lila2"
maxAge = 365 days
}
}
ws {
useragent = ${net.base_url}
compressionEnabled = true
timeout {
connection = 5 seconds
idle = 5 minutes
request = 5 minutes
}
}
crypto {
secret="CiebwjgIM9cHQ;I?Xk:sfqDJ;BhIe:jsL?r=?IPF[saf>s^r0]?0grUq4>q?5mP^"
}
2016-03-07 22:43:03 -07:00
akka.actor-system = "lila"
2015-10-28 05:53:22 -06:00
}
app {
scheduler {
2016-03-11 10:09:59 -07:00
disabled = false
2015-10-28 05:53:22 -06:00
debug = false
}
renderer.name = "renderer"
web_path = "public"
casual_only = false
}
api {
token = secret
}
cli {
username = "thibault"
}
chessground {
animation {
duration = 250 ms
}
}
editor {
animation.duration = ${chessground.animation.duration}
}
accessibility {
blind {
cookie {
name = "mBzamRgfXgRBSnXB"
salt = "WWcTbz5xxaHU4d96"
max_age = 31536000 # one year
}
}
}
prismic {
api_url = "https://lichess.cdn.prismic.io/api"
}
blog {
prismic {
api_url = ${prismic.api_url}
collection = blog
}
2016-03-23 23:14:25 -06:00
last_post_cache.ttl = 5 minutes
2015-10-28 05:53:22 -06:00
rss {
email = "lichess.contact@gmail.com"
}
}
qa {
collection {
question = qa_question
answer = qa_answer
}
}
donation {
collection.donation = donation
2016-05-07 02:11:12 -06:00
weekly_goal = 30400
2015-10-28 05:53:22 -06:00
}
chat {
2016-06-10 09:15:00 -06:00
collection {
chat = chat
timeout = chat_timeout
}
2015-10-28 05:53:22 -06:00
max_lines = 50
net.domain = ${net.domain}
actor.name = chat
2016-06-10 12:20:56 -06:00
timeout {
duration = 20 seconds
check_every = 5 seconds
}
2015-10-28 05:53:22 -06:00
}
puzzle {
mongodb {
uri = "mongodb://127.0.0.1:27017/lichess"
mongo-async-driver = {}
}
2015-10-28 05:53:22 -06:00
collection {
puzzle = puzzle
attempt = puzzle_attempt
}
api.token = ${api.token}
selector {
anon_min_rating = 30
max_attempts = 10000
}
animation.duration = ${chessground.animation.duration}
png.exec_path = "submodules/boardcreator"
}
coordinate {
collection {
score = coordinate_score
}
}
opening {
collection {
opening = opening
attempt = opening_attempt
name = opening_name
}
selector {
tolerance = {
step = 160
max = 1000
}
modulo = 20000
}
animation.duration = ${chessground.animation.duration}
api.token = ${api.token}
}
video {
collection {
video = video
view = video_view
}
sheet {
url = "https://spreadsheets.google.com/feeds/list/1qYU1XhvC8TlBggXEkjI481ieNGyYGmMTy97A9iboyrM/2/public/values?alt=json"
delay = 3 hour
}
youtube {
url = "https://www.googleapis.com/youtube/v3/videos"
api_key = ""
max = 50
delay = 20 minutes
}
}
search {
enabled = false
writeable = true
endpoint = "http://localhost:9673"
}
team {
collection{
team = team
member = team_member
request = team_request
}
paginator.max_per_page = 15
paginator.max_user_per_page = 24
}
teamSearch {
index = team
paginator.max_per_page = ${team.paginator.max_per_page}
actor.name = team-search
}
relation {
collection {
relation = relation
}
actor {
name = relation
2015-10-28 05:53:22 -06:00
notify_freq = 2 seconds
}
limit {
follow = 300
block = 500
}
}
pref {
collection.pref = pref
cache.ttl = 30 minutes
}
bookmark {
collection.bookmark = bookmark
paginator.max_per_page = ${game.paginator.max_per_page}
actor.name = bookmark
}
analyse {
collection.analysis = analysis2
net.domain = ${net.domain}
cached.nb.ttl = ${game.cached.nb.ttl}
paginator.max_per_page = ${game.paginator.max_per_page}
actor.name = analyser
}
geoip {
file = ""
cache_ttl = 1 hour
}
security {
collection.security = security
flood.duration = 60 seconds
firewall {
enabled=true
cached.ips.ttl = 10 minutes
cookie {
enabled = false
name=fEKHA4zI74ZrZrom
}
collection.firewall = firewall
}
geoip = ${geoip}
password_reset {
mailgun = ${mailgun}
secret = "???"
}
email_confirm {
enabled = false
2015-10-28 05:53:22 -06:00
mailgun = ${mailgun}
secret = "???"
}
tor {
provider_url = "https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip="${net.ip}"&port=80"
2016-01-05 18:27:32 -07:00
refresh_delay = 1 hour
2015-10-28 05:53:22 -06:00
}
disposable_email {
provider_url = "https://raw.githubusercontent.com/ornicar/disposable-email-domains/master/index.json"
refresh_delay = 10 minutes
2015-10-28 05:53:22 -06:00
}
recaptcha = ${recaptcha}
whois {
key = "matewithknightandbishop"
}
}
recaptcha {
endpoint = "https://www.google.com/recaptcha/api/siteverify"
public_key = "6LeMhwsTAAAAAElD4KwTo_IUmqIXqx7hkSLLaNSP"
private_key = ""
enabled = false
2015-10-28 05:53:22 -06:00
}
shutup {
collection.shutup = shutup
actor.name = shutup
}
playban {
collection.playban = playban
}
worldMap {
geoip = ${geoip}
}
2015-12-23 20:41:28 -07:00
perfStat {
collection.perf_stat = "perf_stat"
}
2015-12-07 05:04:22 -07:00
push {
collection.device = push_device
google {
url = "https://android.googleapis.com/gcm/send"
key = ""
2015-12-08 05:03:11 -07:00
}
apple {
2016-03-17 22:41:26 -06:00
enabled = false
2016-03-17 06:15:54 -06:00
cert = zpns.p12
password = ""
}
2015-10-28 05:53:22 -06:00
}
mod {
collection {
modlog = modlog
player_assessment = player_assessment
boosting = boosting
2016-01-11 02:37:09 -07:00
gaming_history = mod_gaming_history
2015-10-28 05:53:22 -06:00
}
boosting.nb_games_to_mark = 5
boosting.ratio_games_to_mark = 0.01
actor.name = mod
}
report {
collection.report = report
actor.name = report
}
i18n {
web_path.relative = ${app.web_path}/trans
2016-03-29 05:12:27 -06:00
file_path.relative = "modules/i18n/messages"
2016-06-06 15:21:51 -06:00
upstream.url_pattern = "https://en.lichess.org/translation/fetch/%d"
2015-10-28 05:53:22 -06:00
hide_calls.cookie {
name="hide_i18n_calls"
max_age=604800 # one week
}
collection.translation = translation
request_handler.protocol = ${net.protocol}
context.git {
url = "git://github.com/ornicar/lila.wiki.git"
file = "translation_context.md"
}
cdn_domain = ${net.asset.domain}
call.threshold = 4500
}
detectlanguage.api {
url = "http://ws.detectlanguage.com/0.2/detect"
key = "???"
}
mailgun {
api {
url = "???"
key = "???"
}
sender = "lichess.org <noreply@mail.lichess.org>"
base_url = ${net.base_url}
}
lobby {
message.ttl = 30 seconds
orphan_hook.ttl = 5 seconds
socket {
name = lobby-socket
uid.ttl = ${site.socket.uid.ttl}
}
actor.name = lobby-actor
net.domain = ${net.domain}
2016-03-21 01:18:04 -06:00
broom_period = 2 seconds
2016-03-03 20:30:02 -07:00
resync_ids_period = 25 seconds
2015-10-28 05:53:22 -06:00
collection.seek = seek
collection.seek_archive = seek_archive
seek {
max_per_page = 14
max_per_user = 5
}
}
timeline {
collection {
unsub = timeline_unsub
entry = timeline_entry
}
user {
display_max = 12
actor.name = user-timeline
}
}
game {
cached.nb.ttl = 1 hour
paginator.max_per_page = 9
collection {
game = game5
2016-07-12 17:27:32 -06:00
crosstable = crosstable2
2015-10-28 05:53:22 -06:00
}
js_path {
raw = public/javascripts/big.js
compiled = public/compiled/big.js
}
captcher {
name = captcher
duration = 7 seconds
}
net.base_url = ${net.base_url}
uci_memo.ttl = 2 minutes
pdf.exec_path = "submodules/pdfexporter"
png.exec_path = "submodules/boardcreator"
}
tv {
featured {
select = 3 seconds
}
streaming {
2015-12-09 10:02:34 -07:00
search = 20 seconds
google.api_key = ""
keyword = "lichess.org"
2016-04-18 04:41:49 -06:00
hitbox.url = "http://api.hitbox.tv/media/live/"
2015-10-28 05:53:22 -06:00
}
}
2016-02-08 08:42:33 -07:00
explorer {
endpoint = "https://expl.lichess.org"
internal_endpoint = "http://expl.lichess.org"
index_flow = false
2016-04-25 14:31:34 -06:00
tablebase = {
endpoint = "https://expl.lichess.org/tablebase"
2016-04-25 14:31:34 -06:00
}
2016-02-08 08:42:33 -07:00
}
2015-10-28 05:53:22 -06:00
gameSearch {
index = game
paginator.max_per_page = ${game.paginator.max_per_page}
actor.name = game-search
}
round {
active.ttl = 30 seconds
uid.timeout = 10 seconds
animation.duration = ${chessground.animation.duration}
moretime = 15 seconds
casual_only = ${app.casual_only}
player {
disconnect.timeout = 90 seconds
ragequit.timeout = 10 seconds
}
socket {
name = round-socket
timeout = 30 seconds
}
actor.map.name = round-map
2016-03-08 05:28:34 -07:00
channel.move_time.name = round-move-time
2015-10-28 05:53:22 -06:00
collection {
note = game_note
history = round_history
forecast = forecast
}
net.domain = ${net.domain}
}
tournament {
collection {
tournament = tournament2
player = tournament_player
pairing = tournament_pairing
leaderboard = tournament_leaderboard
2015-10-28 05:53:22 -06:00
}
history.message.ttl = 30 seconds
uid.timeout = 7 seconds # small to avoid missed events
socket {
name = tournament-socket
timeout = 2 minutes
}
api_actor.name = tournament-api
2015-10-28 05:53:22 -06:00
sequencer {
timeout = 10 minutes
}
pairing.delay = 3.1 seconds
created.cache.ttl = 2 seconds
leaderboard.cache.ttl = 1 hour
ranking.cache.ttl = 1 hour
net.domain = ${net.domain}
}
simul {
collection {
simul = simul
}
sequencer {
timeout = 10 minutes
}
socket {
name = simul-socket
timeout = 5 minutes
}
created.cache.ttl = 2 seconds
history.message.ttl = 30 seconds
uid.timeout = 7 seconds # small to avoid missed events
actor.name = simul
}
forum {
topic.max_per_page = 10
post.max_per_page = 10
recent {
ttl = 1 hour
nb = 20
}
collection {
categ = f_categ
topic = f_topic
post = f_post
}
public_categ_ids = [
general-chess-discussion
game-analysis
lichess-feedback
off-topic-discussion
]
actor.name = forum
}
forumSearch {
index = forum
paginator.max_per_page = 10
actor.name = forum-search
}
message {
thread.max_per_page = 30
collection.thread = m_thread
}
memo {
collection {
cache = cache
}
}
setup {
friend.memo.ttl = 1 day
casual_only = ${app.casual_only}
collection {
user_config = config
anon_config = config_anon
}
2016-01-26 20:49:02 -07:00
}
challenge {
2015-11-11 19:11:54 -07:00
collection.challenge = challenge
2016-01-26 20:49:02 -07:00
max_per_user = 20
2016-02-01 19:28:05 -07:00
socket {
name = challenge-socket
timeout = 1 minute
}
history.message.ttl = 40 seconds
uid.timeout = 7 seconds
2015-10-28 05:53:22 -06:00
}
2016-02-26 05:08:11 -07:00
study {
collection.study = study
collection.chapter = study_chapter
2016-02-26 05:08:11 -07:00
socket {
name = study-socket
timeout = 1 minute
}
2016-02-27 04:30:38 -07:00
sequencer {
timeout = 10 minutes
}
2016-02-26 05:08:11 -07:00
history.message.ttl = 40 seconds
uid.timeout = 10 seconds
2016-04-25 03:09:26 -06:00
net.domain = ${net.domain}
net.base_url = ${net.base_url}
2016-02-26 05:08:11 -07:00
}
2015-10-28 05:53:22 -06:00
site {
socket {
name = site-socket
uid.ttl = 10 seconds
}
}
user {
paginator.max_per_page = 40
cached.nb.ttl = 10 minutes
online.ttl = 7 seconds
collection {
user = user4
note = note
trophy = trophy
2016-02-20 22:03:26 -07:00
ranking = ranking
2015-10-28 05:53:22 -06:00
}
}
history {
collection.history = history3
cached.rating_chart.ttl = 1 hour
}
2016-03-11 08:23:06 -07:00
fishnet {
collection {
analysis = fishnet_analysis
client = fishnet_client
}
offline_mode = true # any client can provide moves and analysis
actor.name = fishnet
analysis_nodes = 3500000
2015-10-28 05:53:22 -06:00
}
application {
global="lila.app.Global"
}
importer {
delay = 50 milliseconds
}
2015-11-26 21:05:59 -07:00
insight {
mongodb {
2016-01-09 08:29:35 -07:00
uri = "mongodb://127.0.0.1:27017/lichess-insight"
mongo-async-driver = {}
}
2015-10-28 05:53:22 -06:00
collection {
2015-11-26 21:05:59 -07:00
entry = insight
user_cache = insight_user_cache
2015-10-28 05:53:22 -06:00
}
}
notify {
collection.notify = notify
actor.name = notify
}
2016-06-22 15:07:38 -06:00
learn {
collection.progress = learn_progress
}
2015-10-28 05:53:22 -06:00
simulation {
enabled = false
players = 300
watchers = 200
}
2016-01-04 19:59:41 -07:00
slack {
incoming {
url = ""
default_channel = tavern
2016-01-04 19:59:41 -07:00
}
2016-05-31 04:04:28 -06:00
domain = ${net.domain}
2016-01-04 19:59:41 -07:00
}
2016-07-12 11:19:30 -06:00
plan {
stripe {
endpoint="https://api.stripe.com/v1"
keys {
public="pk_test_31E5TIuGtMs4ojhzMIMu8oIc"
secret="sk_test_erAQMvv5cF90WXUFlkv7Tke0"
}
2016-06-06 03:36:21 -06:00
}
2016-07-12 10:33:22 -06:00
collection {
2016-07-12 11:19:30 -06:00
patron = plan_patron
charge = plan_charge
2016-07-12 10:33:22 -06:00
}
2016-06-06 03:36:21 -06:00
}
2015-10-28 05:53:22 -06:00
hub {
actor {
game {
search = ${gameSearch.actor.name}
}
renderer = ${app.renderer.name}
captcher = ${game.captcher.name}
forum {
actor = ${forum.actor.name}
search = ${forumSearch.actor.name}
}
team {
search = ${teamSearch.actor.name}
}
fishnet = ${fishnet.actor.name}
tournament.api = ${tournament.api_actor.name}
2015-10-28 05:53:22 -06:00
timeline {
user = ${timeline.user.actor.name}
}
bookmark = ${bookmark.actor.name}
round {
map = ${round.actor.map.name}
}
lobby = ${lobby.actor.name}
relation = ${relation.actor.name}
report = ${report.actor.name}
shutup = ${shutup.actor.name}
mod = ${mod.actor.name}
chat = ${chat.actor.name}
analyser = ${analyse.actor.name}
move_broadcast = ${socket.move_broadcast.name}
user_register = ${socket.user_register.name}
simul = ${simul.actor.name}
notify = ${notify.actor.name}
2015-10-28 05:53:22 -06:00
}
socket {
lobby = ${lobby.socket.name}
site = ${site.socket.name}
round = ${round.socket.name}
tournament = ${tournament.socket.name}
simul = ${simul.socket.name}
2016-02-01 19:28:05 -07:00
challenge = ${challenge.socket.name}
2015-10-28 05:53:22 -06:00
hub = ${socket.hub.name}
}
channel {
2016-03-09 05:27:40 -07:00
round.move_time = ${round.channel.move_time.name}
2015-10-28 05:53:22 -06:00
}
}
socket {
hub.name = socket.hub
move_broadcast.name = socket.move-broadcast
user_register.name = socket.user-register
population.name = socket.population
}
dbplugin = disabled
ehcacheplugin = disabled
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = INFO
stdout-loglevel = INFO
log-config-on-start = off
log-dead-letters-during-shutdown = off
}
2016-03-08 05:28:34 -07:00
kamon {
2016-03-10 05:59:03 -07:00
metric {
tick-interval = 2 second
track-unmatched-entities = no
filters {
trace {
includes = [ ]
excludes = [ ]
}
2016-03-08 05:28:34 -07:00
}
2016-03-10 05:59:03 -07:00
}
statsd {
hostname = "127.0.0.1"
2016-03-10 05:59:03 -07:00
port = 8125
# value must be equal or greater than the kamon.metrics.tick-interval setting
flush-interval = 2 second
# Max packet size for UDP metrics data sent to StatsD
max-packet-size = 2048 bytes
subscriptions {
histogram = [ "**" ]
min-max-counter = [ "**" ]
gauge = [ "**" ]
counter = [ "**" ]
trace = [ "**" ]
trace-segment = [ "**" ]
system-metric = [ "**" ]
http-server = [ "**" ]
2016-03-08 05:28:34 -07:00
}
2016-03-10 05:59:03 -07:00
metric-key-generator = lila.api.KeepDotsMetricKeyGenerator
2016-03-10 05:59:03 -07:00
simple-metric-key-generator {
# Application prefix for all metrics pushed to StatsD. The default namespacing scheme for metrics follows
# this pattern: application.host.entity.entity-name.metric-name
application = "local"
# application.entity.entity-name.metric-name
include-hostname = false
metric-name-normalization-strategy = keep-dots
2016-03-08 05:28:34 -07:00
}
2016-03-10 05:59:03 -07:00
}
modules {
2016-03-08 05:28:34 -07:00
kamon-statsd {
auto-start = no
2016-03-08 05:28:34 -07:00
requires-aspectj = no
extension-id = "kamon.statsd.StatsD"
}
}
}