From f54b52467a8a67eeb05926d3239231e9f3ca39ac Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sat, 19 Dec 2020 11:59:27 +0000 Subject: [PATCH 1/8] Create `ForceKid` permission --- modules/security/src/main/Permission.scala | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/security/src/main/Permission.scala b/modules/security/src/main/Permission.scala index 4adba86f0d..96462c72c6 100644 --- a/modules/security/src/main/Permission.scala +++ b/modules/security/src/main/Permission.scala @@ -22,6 +22,7 @@ object Permission { case object NotifySlack extends Permission("NOTIFY_SLACK", List(UserSpy), "Notify #tavern") case object ViewPrivateComms extends Permission("VIEW_PRIVATE_COMS", "View private comms") case object Shadowban extends Permission("SHADOWBAN", List(UserSpy, ChatTimeout), "Shadowban") + case object ForceKid extends Permission("FORCE_KID", List(UserSpy), "Force Kid Mode") case object MarkEngine extends Permission("ADJUST_CHEATER", List(UserSpy), "Mark as cheater") case object MarkBooster extends Permission("ADJUST_BOOSTER", List(UserSpy), "Mark as booster") case object IpBan extends Permission("IP_BAN", List(UserSpy), "IP ban") @@ -101,6 +102,7 @@ object Permission { List( ViewPrivateComms, Shadowban, + ForceKid, ChatTimeout, ModerateForum, ReportBan, @@ -169,6 +171,7 @@ object Permission { "Comm mod" -> List( ViewPrivateComms, Shadowban, + ForceKid, ChatTimeout, ModerateForum, ReportBan, From a2b6894da4860476448bf45b57bc58a6b4b033b7 Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sat, 19 Dec 2020 16:01:02 +0000 Subject: [PATCH 2/8] force kid WIP --- app/controllers/Mod.scala | 5 +++++ conf/routes | 1 + modules/mod/src/main/ModApi.scala | 9 +++++++++ 3 files changed, 15 insertions(+) diff --git a/app/controllers/Mod.scala b/app/controllers/Mod.scala index 1a94eead4b..040f65f8e2 100644 --- a/app/controllers/Mod.scala +++ b/app/controllers/Mod.scala @@ -108,6 +108,11 @@ final class Mod( } ) + def kid(username: String) = + OAuthMod(_.ForceKid) { _ => me => + modApi.setKid(me.id, username) map some + }(actionResult(username)) + def deletePmsAndChats(username: String) = OAuthMod(_.Shadowban) { _ => _ => withSuspect(username) { sus => diff --git a/conf/routes b/conf/routes index 5865518bcc..bf5d608013 100644 --- a/conf/routes +++ b/conf/routes @@ -399,6 +399,7 @@ POST /mod/:username/booster/:v controllers.Mod.booster(username: String, POST /mod/:username/troll/:v controllers.Mod.troll(username: String, v: Boolean) POST /mod/:username/delete-pms-and-chats controllers.Mod.deletePmsAndChats(username: String) POST /mod/:username/warn controllers.Mod.warn(username: String, subject: String) +POST /mod/:username/kid controllers.Mod.kid(username: String) POST /mod/:username/disable-2fa controllers.Mod.disableTwoFactor(username: String) POST /mod/:username/close controllers.Mod.closeAccount(username: String) POST /mod/:username/reopen controllers.Mod.reopenAccount(username: String) diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index acdd2e0d5b..e97d719b6b 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -110,6 +110,15 @@ final class ModApi( } } + def setKid(mod: String, username: String): Funit = + withUser(username) { user => + userRepo.isKid(user.id) flatMap { + !_ ?? { + (userRepo.setKid(user, true)) >> logApi.reopenAccount(mod, user.id) + } + } + } + def setTitle(mod: String, username: String, title: Option[Title]): Funit = withUser(username) { user => title match { From 1b3e8a1d29b87944f27203dac8d8d0ddb24d048a Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sat, 19 Dec 2020 17:00:15 +0000 Subject: [PATCH 3/8] add force kid button, still WIP --- app/views/user/mod.scala | 9 +++++++++ modules/mod/src/main/ModApi.scala | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/views/user/mod.scala b/app/views/user/mod.scala index 2626aeb598..f49029e2f9 100644 --- a/app/views/user/mod.scala +++ b/app/views/user/mod.scala @@ -100,6 +100,15 @@ object mod { submitButton(cls := "btn-rack__btn confirm")("Clear PMs & chats") ) }, + isGranted(_.ForceKid) option { + postForm( + action := routes.Mod.kid(u.username), + title := "Activate kid mode if not already the case", + cls := "xhr" + )( + submitButton(cls := "btn-rack__btn confirm")("kid") + ) + }, isGranted(_.RemoveRanking) option { postForm( action := routes.Mod.rankban(u.username, !u.marks.rankban), diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index e97d719b6b..d0b1509849 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -114,7 +114,7 @@ final class ModApi( withUser(username) { user => userRepo.isKid(user.id) flatMap { !_ ?? { - (userRepo.setKid(user, true)) >> logApi.reopenAccount(mod, user.id) + (userRepo.setKid(user, true)) } } } From 427fae0bd95bcc83d1db4e969aeccaf25d7c3e8c Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sat, 19 Dec 2020 20:26:37 +0000 Subject: [PATCH 4/8] log force kid --- modules/mod/src/main/ModApi.scala | 5 ++--- modules/mod/src/main/Modlog.scala | 4 ++++ modules/mod/src/main/ModlogApi.scala | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index d0b1509849..b6ff184b17 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -113,10 +113,9 @@ final class ModApi( def setKid(mod: String, username: String): Funit = withUser(username) { user => userRepo.isKid(user.id) flatMap { - !_ ?? { - (userRepo.setKid(user, true)) + case false => (userRepo.setKid(user, true)) >> logApi.forceKid(mod, user.id, true) + case true => logApi.forceKid(mod, user.id, false) } - } } def setTitle(mod: String, username: String, title: Option[Title]): Funit = diff --git a/modules/mod/src/main/Modlog.scala b/modules/mod/src/main/Modlog.scala index 9f5bb163d4..31c7b16fe2 100644 --- a/modules/mod/src/main/Modlog.scala +++ b/modules/mod/src/main/Modlog.scala @@ -66,6 +66,8 @@ case class Modlog( case Modlog.teamKick => "kick from team" case Modlog.teamEdit => "edited team" case Modlog.appealPost => "posted in appeal" + case Modlog.forceKidSuccess => "force kid mode" + case Modlog.forceKidFailure => "force kid mode on already kid account" case a => a } @@ -129,4 +131,6 @@ object Modlog { val teamKick = "teamKick" val teamEdit = "teamEdit" val appealPost = "appealPost" + val forceKidSuccess = "forceKidSuccess" + val forceKidFailure = "forceKidFailure" } diff --git a/modules/mod/src/main/ModlogApi.scala b/modules/mod/src/main/ModlogApi.scala index c97eda9075..298346ee1c 100644 --- a/modules/mod/src/main/ModlogApi.scala +++ b/modules/mod/src/main/ModlogApi.scala @@ -53,6 +53,11 @@ final class ModlogApi(repo: ModlogRepo, userRepo: UserRepo, slackApi: lila.slack Modlog.make(mod, sus, if (sus.user.marks.troll) Modlog.troll else Modlog.untroll) } + def forceKid(mod: User.ID, kid: User.ID, success: Boolean) = + add { + Modlog(mod, kid.some, if (success) Modlog.forceKidSuccess else Modlog.forceKidFailure) + } + def disableTwoFactor(mod: User.ID, user: User.ID) = add { Modlog(mod, user.some, Modlog.disableTwoFactor) From 28a61dee92b65d7c7bdbba40619eb32890e4f6d9 Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sun, 20 Dec 2020 08:54:52 +0000 Subject: [PATCH 5/8] simplify force kid log --- modules/mod/src/main/ModApi.scala | 3 +-- modules/mod/src/main/Modlog.scala | 6 ++---- modules/mod/src/main/ModlogApi.scala | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index b6ff184b17..f17610a383 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -113,8 +113,7 @@ final class ModApi( def setKid(mod: String, username: String): Funit = withUser(username) { user => userRepo.isKid(user.id) flatMap { - case false => (userRepo.setKid(user, true)) >> logApi.forceKid(mod, user.id, true) - case true => logApi.forceKid(mod, user.id, false) + !_ ?? {(userRepo.setKid(user, true))} >> logApi.forceKid(mod, user.id) } } diff --git a/modules/mod/src/main/Modlog.scala b/modules/mod/src/main/Modlog.scala index 31c7b16fe2..03e343b773 100644 --- a/modules/mod/src/main/Modlog.scala +++ b/modules/mod/src/main/Modlog.scala @@ -66,8 +66,7 @@ case class Modlog( case Modlog.teamKick => "kick from team" case Modlog.teamEdit => "edited team" case Modlog.appealPost => "posted in appeal" - case Modlog.forceKidSuccess => "force kid mode" - case Modlog.forceKidFailure => "force kid mode on already kid account" + case Modlog.forceKid => "force kid mode" case a => a } @@ -131,6 +130,5 @@ object Modlog { val teamKick = "teamKick" val teamEdit = "teamEdit" val appealPost = "appealPost" - val forceKidSuccess = "forceKidSuccess" - val forceKidFailure = "forceKidFailure" + val forceKid = "forceKid" } diff --git a/modules/mod/src/main/ModlogApi.scala b/modules/mod/src/main/ModlogApi.scala index 298346ee1c..70d137b058 100644 --- a/modules/mod/src/main/ModlogApi.scala +++ b/modules/mod/src/main/ModlogApi.scala @@ -53,9 +53,9 @@ final class ModlogApi(repo: ModlogRepo, userRepo: UserRepo, slackApi: lila.slack Modlog.make(mod, sus, if (sus.user.marks.troll) Modlog.troll else Modlog.untroll) } - def forceKid(mod: User.ID, kid: User.ID, success: Boolean) = + def forceKid(mod: User.ID, kid: User.ID) = add { - Modlog(mod, kid.some, if (success) Modlog.forceKidSuccess else Modlog.forceKidFailure) + Modlog(mod, kid.some, Modlog.forceKid) } def disableTwoFactor(mod: User.ID, user: User.ID) = From d51987c0279e0cb4ca0e5571c9259f0ef1e8219d Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sun, 20 Dec 2020 08:57:25 +0000 Subject: [PATCH 6/8] scalafmt --- modules/mod/src/main/ModApi.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index f17610a383..87872f780d 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -113,9 +113,9 @@ final class ModApi( def setKid(mod: String, username: String): Funit = withUser(username) { user => userRepo.isKid(user.id) flatMap { - !_ ?? {(userRepo.setKid(user, true))} >> logApi.forceKid(mod, user.id) - } - } + !_ ?? { (userRepo.setKid(user, true)) } >> logApi.forceKid(mod, user.id) + } + } def setTitle(mod: String, username: String, title: Option[Title]): Funit = withUser(username) { user => From 6f85ced046e6b9b7d2cda6ca9eb7ea867e2cef72 Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Sun, 20 Dec 2020 09:32:59 +0000 Subject: [PATCH 7/8] Capitalise "kid" -> "Kid" --- app/views/user/mod.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/user/mod.scala b/app/views/user/mod.scala index f49029e2f9..085d8437ef 100644 --- a/app/views/user/mod.scala +++ b/app/views/user/mod.scala @@ -106,7 +106,7 @@ object mod { title := "Activate kid mode if not already the case", cls := "xhr" )( - submitButton(cls := "btn-rack__btn confirm")("kid") + submitButton(cls := "btn-rack__btn confirm")("Kid") ) }, isGranted(_.RemoveRanking) option { From 0c2f2cc6cbeff6722d156794a0a36c9ad8865574 Mon Sep 17 00:00:00 2001 From: kraktus <56031107+kraktus@users.noreply.github.com> Date: Mon, 21 Dec 2020 08:20:07 +0000 Subject: [PATCH 8/8] Rename "ForceKid" -> "SetKidMode" Better name, since the user can still disable it --- app/controllers/Mod.scala | 2 +- app/views/user/mod.scala | 2 +- modules/mod/src/main/ModApi.scala | 2 +- modules/mod/src/main/Modlog.scala | 4 ++-- modules/mod/src/main/ModlogApi.scala | 4 ++-- modules/security/src/main/Permission.scala | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/controllers/Mod.scala b/app/controllers/Mod.scala index 040f65f8e2..70ab20b7ae 100644 --- a/app/controllers/Mod.scala +++ b/app/controllers/Mod.scala @@ -109,7 +109,7 @@ final class Mod( ) def kid(username: String) = - OAuthMod(_.ForceKid) { _ => me => + OAuthMod(_.SetKidMode) { _ => me => modApi.setKid(me.id, username) map some }(actionResult(username)) diff --git a/app/views/user/mod.scala b/app/views/user/mod.scala index 085d8437ef..7d07d2d621 100644 --- a/app/views/user/mod.scala +++ b/app/views/user/mod.scala @@ -100,7 +100,7 @@ object mod { submitButton(cls := "btn-rack__btn confirm")("Clear PMs & chats") ) }, - isGranted(_.ForceKid) option { + isGranted(_.SetKidMode) option { postForm( action := routes.Mod.kid(u.username), title := "Activate kid mode if not already the case", diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index 87872f780d..52091d86e2 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -113,7 +113,7 @@ final class ModApi( def setKid(mod: String, username: String): Funit = withUser(username) { user => userRepo.isKid(user.id) flatMap { - !_ ?? { (userRepo.setKid(user, true)) } >> logApi.forceKid(mod, user.id) + !_ ?? { (userRepo.setKid(user, true)) } >> logApi.setKidMode(mod, user.id) } } diff --git a/modules/mod/src/main/Modlog.scala b/modules/mod/src/main/Modlog.scala index 03e343b773..866f60236c 100644 --- a/modules/mod/src/main/Modlog.scala +++ b/modules/mod/src/main/Modlog.scala @@ -66,7 +66,7 @@ case class Modlog( case Modlog.teamKick => "kick from team" case Modlog.teamEdit => "edited team" case Modlog.appealPost => "posted in appeal" - case Modlog.forceKid => "force kid mode" + case Modlog.setKidMode => "set kid mode" case a => a } @@ -130,5 +130,5 @@ object Modlog { val teamKick = "teamKick" val teamEdit = "teamEdit" val appealPost = "appealPost" - val forceKid = "forceKid" + val setKidMode = "setKidMode" } diff --git a/modules/mod/src/main/ModlogApi.scala b/modules/mod/src/main/ModlogApi.scala index 70d137b058..9eb28bbeb5 100644 --- a/modules/mod/src/main/ModlogApi.scala +++ b/modules/mod/src/main/ModlogApi.scala @@ -53,9 +53,9 @@ final class ModlogApi(repo: ModlogRepo, userRepo: UserRepo, slackApi: lila.slack Modlog.make(mod, sus, if (sus.user.marks.troll) Modlog.troll else Modlog.untroll) } - def forceKid(mod: User.ID, kid: User.ID) = + def setKidMode(mod: User.ID, kid: User.ID) = add { - Modlog(mod, kid.some, Modlog.forceKid) + Modlog(mod, kid.some, Modlog.setKidMode) } def disableTwoFactor(mod: User.ID, user: User.ID) = diff --git a/modules/security/src/main/Permission.scala b/modules/security/src/main/Permission.scala index 96462c72c6..bbded49952 100644 --- a/modules/security/src/main/Permission.scala +++ b/modules/security/src/main/Permission.scala @@ -22,7 +22,7 @@ object Permission { case object NotifySlack extends Permission("NOTIFY_SLACK", List(UserSpy), "Notify #tavern") case object ViewPrivateComms extends Permission("VIEW_PRIVATE_COMS", "View private comms") case object Shadowban extends Permission("SHADOWBAN", List(UserSpy, ChatTimeout), "Shadowban") - case object ForceKid extends Permission("FORCE_KID", List(UserSpy), "Force Kid Mode") + case object SetKidMode extends Permission("SET_KID_MODE", List(UserSpy), "Set Kid Mode") case object MarkEngine extends Permission("ADJUST_CHEATER", List(UserSpy), "Mark as cheater") case object MarkBooster extends Permission("ADJUST_BOOSTER", List(UserSpy), "Mark as booster") case object IpBan extends Permission("IP_BAN", List(UserSpy), "IP ban") @@ -102,7 +102,7 @@ object Permission { List( ViewPrivateComms, Shadowban, - ForceKid, + SetKidMode, ChatTimeout, ModerateForum, ReportBan, @@ -171,7 +171,7 @@ object Permission { "Comm mod" -> List( ViewPrivateComms, Shadowban, - ForceKid, + SetKidMode, ChatTimeout, ModerateForum, ReportBan,