64 lines
1.8 KiB
Scala
64 lines
1.8 KiB
Scala
package controllers
|
|
|
|
import lila.api.Context
|
|
import lila.app._
|
|
import lila.user.UserRepo
|
|
|
|
import play.api.libs.json._
|
|
import play.api.mvc._
|
|
|
|
object Irwin extends LilaController {
|
|
|
|
import lila.irwin.JSONHandlers.reportReader
|
|
|
|
def dashboard = Secure(_.SeeReport) { implicit ctx => me =>
|
|
Env.irwin.api.dashboard map { d =>
|
|
Ok(views.html.irwin.dashboard(d))
|
|
}
|
|
}
|
|
|
|
def saveReport = OpenBody(parse.json) { implicit ctx =>
|
|
ModExternalBot {
|
|
UserRepo.irwin.flatten("Missing irwin user") flatMap { irwin =>
|
|
ctx.body.body.validate[lila.irwin.IrwinReport].fold(
|
|
err => fuccess(BadRequest(err.toString)),
|
|
report => Env.irwin.api.reports.insert(report) inject Ok
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
def assessment(username: String) = Open { implicit ctx =>
|
|
ModExternalBot {
|
|
OptionFuResult(UserRepo named username) { user =>
|
|
Env.mod.assessApi.refreshAssessByUsername(user.id) >>
|
|
Env.mod.jsonView(user) map {
|
|
_.fold[Result](NotFound) { obj => Ok(obj) as JSON }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
def usersMarkAndCurrentReport(idsStr: String) = Open { implicit ctx =>
|
|
ModExternalBot {
|
|
val ids = idsStr.split(',').toList map lila.user.User.normalize
|
|
for {
|
|
engineIds <- UserRepo filterByEngine ids
|
|
reportedIds <- Env.report.api.currentlyReportedForCheat
|
|
} yield Ok(Json.toJson(ids.map { id =>
|
|
id -> Json.obj("engine" -> engineIds(id), "report" -> reportedIds(id))
|
|
}.toMap)) as JSON
|
|
}
|
|
}
|
|
|
|
def eventStream = Open { implicit ctx =>
|
|
ModExternalBot {
|
|
Ok.chunked(Env.irwin.stream.enumerator).fuccess
|
|
}
|
|
}
|
|
|
|
private def ModExternalBot(f: => Fu[Result])(implicit ctx: Context) =
|
|
if (get("api_key") contains Env.mod.ApiKey) f
|
|
else fuccess(NotFound)
|
|
}
|