lila/modules/api/src/main/Cli.scala

89 lines
2.9 KiB
Scala

package lila.api
import lila.common.Bus
final private[api] class Cli(
userRepo: lila.user.UserRepo,
security: lila.security.Env,
teamSearch: lila.teamSearch.Env,
forumSearch: lila.forumSearch.Env,
team: lila.team.Env,
puzzle: lila.puzzle.Env,
tournament: lila.tournament.Env,
explorer: lila.explorer.Env,
fishnet: lila.fishnet.Env,
study: lila.study.Env,
studySearch: lila.studySearch.Env,
coach: lila.coach.Env,
evalCache: lila.evalCache.Env,
plan: lila.plan.Env,
msg: lila.msg.Env
)(implicit ec: scala.concurrent.ExecutionContext)
extends lila.common.Cli {
private val logger = lila.log("cli")
def apply(args: List[String]): Fu[String] =
run(args).dmap(_ + "\n") ~ {
_.logFailure(logger, _ => args mkString " ") foreach { output =>
logger.info("%s\n%s".format(args mkString " ", output))
}
}
def process = {
case "uptime" :: Nil => fuccess(s"${lila.common.Uptime.seconds} seconds")
case "change" :: ("asset" | "assets") :: "version" :: Nil =>
import lila.common.AssetVersion
AssetVersion.change()
fuccess(s"Changed to ${AssetVersion.current}")
case "gdpr" :: "erase" :: username :: "forever" :: Nil =>
userRepo named username map {
case None => "No such user."
case Some(user) if user.enabled => "That user account is not closed. Can't erase."
case Some(user) =>
Bus.publish(lila.user.User.GDPRErase(user), "gdprErase")
s"Erasing all data about ${user.username} now"
}
case "announce" :: "cancel" :: Nil =>
AnnounceStore set none
Bus.publish(AnnounceStore.cancel, "announce")
fuccess("Removed announce")
case "announce" :: msgWords =>
AnnounceStore.set(msgWords mkString " ") match {
case Some(announce) =>
Bus.publish(announce, "announce")
fuccess(announce.json.toString)
case None =>
fuccess(
"Invalid announce. Format: `announce <length> <unit> <words...>` or just `announce cancel` to cancel it"
)
}
case "bus" :: "dump" :: Nil =>
val keys = Bus.keys
fuccess(s"${keys.size}\n ${keys mkString "\n"}")
}
private def run(args: List[String]): Fu[String] = {
(processors lift args) | fufail("Unknown command: " + args.mkString(" "))
} recover { case e: Exception =>
"ERROR " + e
}
private def processors =
security.cli.process orElse
teamSearch.cli.process orElse
forumSearch.cli.process orElse
team.cli.process orElse
puzzle.cli.process orElse
tournament.cli.process orElse
explorer.cli.process orElse
fishnet.cli.process orElse
study.cli.process orElse
studySearch.cli.process orElse
coach.cli.process orElse
evalCache.cli.process orElse
plan.cli.process orElse
msg.cli.process orElse
process
}