generalize to list of socket domains

pull/5869/head
Niklas Fiekas 2020-01-03 21:47:38 +01:00
parent 51f001bb55
commit c4aa7cc50f
5 changed files with 15 additions and 24 deletions

View File

@ -15,7 +15,7 @@ trait AssetHelper { self: I18nHelper with SecurityHelper =>
def netDomain: lila.common.config.NetDomain
lazy val assetDomain = env.net.assetDomain
lazy val socketDomain = env.net.socketDomain
lazy val socketDomains = env.net.socketDomains
lazy val vapidPublicKey = env.push.vapidPublicKey
lazy val sameAssetDomain = netDomain.value == assetDomain.value
@ -105,20 +105,13 @@ trait AssetHelper { self: I18nHelper with SecurityHelper =>
def basicCsp(implicit req: RequestHeader): ContentSecurityPolicy = {
val assets = if (req.secure) s"https://$assetDomain" else assetDomain.value
val socket = {
val sockets = socketDomains map { socketDomain =>
val protocol = if (req.secure) "wss://" else "ws://"
val port = if (socketDomain.contains(":")) "" else ":*"
s"$protocol$socketDomain$port"
s"$protocol$socketDomain"
}
ContentSecurityPolicy(
defaultSrc = List("'self'", assets),
connectSrc = List(
"'self'",
assets,
socket,
env.explorerEndpoint,
env.tablebaseEndpoint
),
connectSrc = "'self'" :: assets :: sockets ::: env.explorerEndpoint :: env.tablebaseEndpoint :: Nil,
styleSrc = List("'self'", "'unsafe-inline'", assets),
fontSrc = List("'self'", assetDomain.value, "https://fonts.gstatic.com"),
frameSrc = List("'self'", assets, "https://www.youtube.com", "https://player.twitch.tv"),

View File

@ -124,13 +124,13 @@ object layout {
private val spaceRegex = """\s{2,}+""".r
private def spaceless(html: String) = raw(spaceRegex.replaceAllIn(html.replace("\\n", ""), ""))
private val dataVapid = attr("data-vapid")
private val dataUser = attr("data-user")
private val dataSoundSet = attr("data-sound-set")
private val dataSocketDomain = attr("data-socket-domain")
private val dataPreload = attr("data-preload")
private val dataNonce = attr("data-nonce")
private val dataAnnounce = attr("data-announce")
private val dataVapid = attr("data-vapid")
private val dataUser = attr("data-user")
private val dataSoundSet = attr("data-sound-set")
private val dataSocketDomains = attr("data-socket-domains")
private val dataPreload = attr("data-preload")
private val dataNonce = attr("data-nonce")
private val dataAnnounce = attr("data-announce")
def apply(
title: String,
@ -204,7 +204,7 @@ object layout {
dataVapid := vapidPublicKey,
dataUser := ctx.userId,
dataSoundSet := ctx.currentSoundSet.toString,
dataSocketDomain := socketDomain,
dataSocketDomains := socketDomains.mkString(","),
dataAssetUrl := assetBaseUrl,
dataAssetVersion := assetVersion.value,
dataNonce := ctx.nonce.ifTrue(sameAssetDomain).map(_.value),

View File

@ -4,7 +4,7 @@ mongodb {
}
net {
domain = "localhost:9663"
socket.domain = "localhost:9664"
socket.domains = [ "localhost:9664" ]
asset.domain = ${net.domain}
protocol = "http://"
base_url = ${net.protocol}${net.domain}

View File

@ -35,7 +35,7 @@ object config {
protocol: String,
@ConfigName("base_url") baseUrl: BaseUrl,
@ConfigName("asset.domain") assetDomain: AssetDomain,
@ConfigName("socket.domain") socketDomain: String,
@ConfigName("socket.domains") socketDomains: List[String],
crawlable: Boolean,
@ConfigName("ratelimit") rateLimit: Boolean,
email: EmailAddress,

View File

@ -233,9 +233,7 @@ lichess.StrongSocket = function(url, version, settings) {
}
};
const baseUrls = (
d => [d].concat((d.includes('lichess.org') ? [5, 6, 7, 8, 9] : []).map(port => d + ':' + (9020 + port)))
)(document.body.getAttribute('data-socket-domain'));
const baseUrls = document.body.getAttribute('data-socket-domains').split(',');
const baseUrl = function() {
let url = storage.get();