diff --git a/build.sbt b/build.sbt index 3cfa4d17f4..f92b7e12fc 100644 --- a/build.sbt +++ b/build.sbt @@ -354,7 +354,7 @@ lazy val message = module("message", ) lazy val msg = module("msg", - Seq(common, db, user, hub, relation, security, shutup, notifyModule), + Seq(common, db, user, hub, relation, security, shutup, notifyModule, chat), reactivemongo.bundle ) diff --git a/modules/chat/src/main/ChatPanic.scala b/modules/chat/src/main/ChatPanic.scala index 9cd1a78951..37a6c456ed 100644 --- a/modules/chat/src/main/ChatPanic.scala +++ b/modules/chat/src/main/ChatPanic.scala @@ -13,6 +13,9 @@ final class ChatPanic { } def allowed(u: User): Boolean = allowed(u, false) + def allowed(id: User.ID, fetch: User.ID => Fu[Option[User]]): Fu[Boolean] = + if (enabled) fetch(id) dmap { _ ?? allowed } else fuTrue + def enabled = until exists { d => (d isAfter DateTime.now) || { until = none diff --git a/modules/msg/src/main/Env.scala b/modules/msg/src/main/Env.scala index 9ddf95494b..7ce437b673 100644 --- a/modules/msg/src/main/Env.scala +++ b/modules/msg/src/main/Env.scala @@ -17,7 +17,8 @@ final class Env( prefApi: lila.pref.PrefApi, notifyApi: lila.notify.NotifyApi, cacheApi: lila.memo.CacheApi, - spam: lila.security.Spam + spam: lila.security.Spam, + chatPanic: lila.chat.ChatPanic )(implicit ec: scala.concurrent.ExecutionContext, scheduler: akka.actor.Scheduler) { private val colls = wire[MsgColls] diff --git a/modules/msg/src/main/MsgSecurity.scala b/modules/msg/src/main/MsgSecurity.scala index 298fe37f70..3aa556d524 100644 --- a/modules/msg/src/main/MsgSecurity.scala +++ b/modules/msg/src/main/MsgSecurity.scala @@ -15,7 +15,8 @@ final private class MsgSecurity( prefApi: lila.pref.PrefApi, userRepo: lila.user.UserRepo, relationApi: lila.relation.RelationApi, - spam: lila.security.Spam + spam: lila.security.Spam, + chatPanic: lila.chat.ChatPanic )(implicit ec: scala.concurrent.ExecutionContext) { import BsonHandlers._ @@ -81,7 +82,7 @@ final private class MsgSecurity( def post(orig: User.ID, dest: User.ID): Fu[Boolean] = (dest != User.lichessId) ?? { !relationApi.fetchBlocks(dest, orig) >>& { create(orig, dest) >>| reply(orig, dest) - } + } >>& chatPanic.allowed(orig, userRepo.byId) } private def create(orig: User.ID, dest: User.ID): Fu[Boolean] =