2020-05-24 09:28:10 -06:00
|
|
|
package lila.app
|
|
|
|
package http
|
|
|
|
|
|
|
|
import play.api.mvc._
|
|
|
|
import scala.concurrent.duration._
|
|
|
|
|
2020-10-03 04:40:31 -06:00
|
|
|
import lila.common.HTTPRequest
|
2020-05-25 07:31:32 -06:00
|
|
|
import lila.api.Context
|
2020-05-24 09:28:10 -06:00
|
|
|
|
2020-07-07 03:24:08 -06:00
|
|
|
final class PageCache(cacheApi: lila.memo.CacheApi) {
|
2020-05-24 09:28:10 -06:00
|
|
|
|
2020-05-25 07:31:32 -06:00
|
|
|
private val cache = cacheApi.notLoading[String, Result](16, "pageCache") {
|
2020-05-24 09:28:10 -06:00
|
|
|
_.expireAfterWrite(1.seconds).buildAsync()
|
|
|
|
}
|
|
|
|
|
2020-10-03 04:40:31 -06:00
|
|
|
def apply(compute: () => Fu[Result])(implicit ctx: Context): Fu[Result] =
|
2020-06-02 14:25:39 -06:00
|
|
|
if (ctx.isAnon && langs(ctx.lang.language) && defaultPrefs(ctx.req) && !hasCookies(ctx.req))
|
2020-10-03 04:40:31 -06:00
|
|
|
cache.getFuture(cacheKey(ctx), _ => compute())
|
2020-05-30 07:27:06 -06:00
|
|
|
else
|
2020-05-25 07:31:32 -06:00
|
|
|
compute()
|
2020-05-24 09:28:10 -06:00
|
|
|
|
2020-10-03 04:40:31 -06:00
|
|
|
private def cacheKey(ctx: Context) =
|
|
|
|
s"${HTTPRequest actionName ctx.req}(${ctx.lang.language})"
|
2020-05-30 07:27:06 -06:00
|
|
|
|
|
|
|
private def defaultPrefs(req: RequestHeader) =
|
|
|
|
lila.pref.RequestPref.fromRequest(req) == lila.pref.Pref.default
|
|
|
|
|
2020-05-24 09:28:10 -06:00
|
|
|
private val langs =
|
|
|
|
Set("en", "ru", "tr", "de", "es", "fr", "pt", "it", "pl", "ar", "fa", "id", "nl", "nb", "sv")
|
2020-06-02 14:25:39 -06:00
|
|
|
|
|
|
|
private def hasCookies(req: RequestHeader) =
|
|
|
|
lila.security.EmailConfirm.cookie.has(req)
|
2020-05-24 09:28:10 -06:00
|
|
|
}
|