From 15cfe4f5083a8411dcded8bed11dfaba78aa2ea7 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Mon, 17 Feb 2020 13:48:25 -0600 Subject: [PATCH] verified users can send more messages (for lichess4545) --- modules/msg/src/main/MsgSecurity.scala | 7 ++++--- modules/user/src/main/User.scala | 9 +++++---- modules/user/src/main/UserRepo.scala | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/msg/src/main/MsgSecurity.scala b/modules/msg/src/main/MsgSecurity.scala index 7be2d1739c..26b6c7ddf9 100644 --- a/modules/msg/src/main/MsgSecurity.scala +++ b/modules/msg/src/main/MsgSecurity.scala @@ -24,14 +24,14 @@ final private class MsgSecurity( import MsgSecurity._ private val CreateLimitPerUser = new RateLimit[User.ID]( - credits = 20, + credits = 20 * 5, duration = 24 hour, name = "PM creates per user", key = "msg_create.user" ) private val ReplyLimitPerUser = new RateLimit[User.ID]( - credits = 20, + credits = 20 * 5, duration = 1 minute, name = "PM replies per user", key = "msg_reply.user" @@ -69,7 +69,8 @@ final private class MsgSecurity( if (unlimited) fuccess(none) else { val limiter = if (isNew) CreateLimitPerUser else ReplyLimitPerUser - !limiter(user.id)(true) ?? fuccess(Limit.some) + val cost = if (user.isVerified) 1 else 5 + !limiter(user.id, cost = cost)(true) ?? fuccess(Limit.some) } private def isSpam(text: String): Fu[Option[Verdict]] = diff --git a/modules/user/src/main/User.scala b/modules/user/src/main/User.scala index b2331e535b..3225452b62 100644 --- a/modules/user/src/main/User.scala +++ b/modules/user/src/main/User.scala @@ -176,10 +176,11 @@ object User { def isTroll = marks.exists(_.troll) } - case class Contact(_id: ID, kid: Option[Boolean], marks: Option[UserMarks]) { - def id = _id - def isKid = ~kid - def isTroll = marks.exists(_.troll) + case class Contact(_id: ID, kid: Option[Boolean], marks: Option[UserMarks], roles: Option[List[String]]) { + def id = _id + def isKid = ~kid + def isTroll = marks.exists(_.troll) + def isVerified = roles.exists(_ contains "ROLE_VERIFIED") } case class Contacts(orig: Contact, dest: Contact) diff --git a/modules/user/src/main/UserRepo.scala b/modules/user/src/main/UserRepo.scala index 35410a43ca..b17f4a99b4 100644 --- a/modules/user/src/main/UserRepo.scala +++ b/modules/user/src/main/UserRepo.scala @@ -580,7 +580,7 @@ final class UserRepo(val coll: Coll)(implicit ec: scala.concurrent.ExecutionCont import User.contactHandler coll.byOrderedIds[User.Contact, User.ID]( List(orig, dest), - $doc(F.kid -> true, F.marks -> true).some, + $doc(F.kid -> true, F.marks -> true, F.roles -> true).some, ReadPreference.secondaryPreferred )(_._id) map { case List(o, d) => User.Contacts(o, d).some