Move cli commands to HTTP post WIP
parent
8c4187d1a3
commit
a5e21b5d18
|
@ -1,9 +1,10 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.forum.ForumEnv
|
||||
import scalaz.effects._
|
||||
|
||||
case class Forum(env: ForumEnv) {
|
||||
private[cli] case class Forum(env: ForumEnv) {
|
||||
|
||||
def denormalize: IO[Unit] = env.denormalize
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.core.CoreEnv
|
||||
import scalaz.effects._
|
||||
|
||||
case class Games(env: CoreEnv) {
|
||||
private[cli] case class Games(env: CoreEnv) {
|
||||
|
||||
def perDay(days: Int): IO[Unit] = for {
|
||||
nbs ← env.game.gameRepo.nbPerDay(days)
|
|
@ -1,4 +1,5 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.parseIntOption
|
||||
import lila.i18n.I18nEnv
|
||||
|
@ -6,7 +7,7 @@ import play.api.i18n.Lang
|
|||
import java.io._
|
||||
import scalaz.effects._
|
||||
|
||||
case class I18n(i18n: I18nEnv) {
|
||||
private[cli] case class I18n(i18n: I18nEnv) {
|
||||
|
||||
def jsDump: IO[Unit] = for {
|
||||
_ ← putStrLn("Dumping JavaScript translations")
|
|
@ -1,9 +1,10 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.core.CoreEnv
|
||||
import scalaz.effects._
|
||||
|
||||
case class Infos(env: CoreEnv) {
|
||||
private[cli] case class Infos(env: CoreEnv) {
|
||||
|
||||
def averageElo: IO[Unit] = for {
|
||||
avg ← env.user.userRepo.averageElo
|
|
@ -1,15 +1,14 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import scalaz.effects._
|
||||
import play.api.{ Mode, Application, Play }
|
||||
import java.io.File
|
||||
|
||||
import lila.parseIntOption
|
||||
import lila.core.{ Global, CoreEnv }
|
||||
|
||||
object Main {
|
||||
|
||||
def main(args: Array[String]): Unit = withApp { env ⇒
|
||||
def main(env: CoreEnv)(args: Array[String]): IO[Unit] = {
|
||||
|
||||
def users = Users(env.user.userRepo, env.security.store)
|
||||
def games = Games(env)
|
||||
|
@ -47,20 +46,4 @@ object Main {
|
|||
case _ ⇒ putStrLn("Unknown command: " + args.mkString(" "))
|
||||
}
|
||||
}
|
||||
|
||||
private def withApp(op: CoreEnv ⇒ IO[_]): Int = {
|
||||
val app = new Application(
|
||||
path = new File("."),
|
||||
classloader = this.getClass.getClassLoader,
|
||||
sources = None,
|
||||
mode = Mode.Dev)
|
||||
try {
|
||||
Play start app
|
||||
op(Global.env).unsafePerformIO
|
||||
0
|
||||
}
|
||||
finally {
|
||||
Play.stop()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,11 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.search.SearchEnv
|
||||
import lila.search.Query
|
||||
import scalaz.effects._
|
||||
|
||||
case class Search(env: SearchEnv) {
|
||||
private[cli] case class Search(env: SearchEnv) {
|
||||
|
||||
def reset: IO[Unit] = env.indexer.rebuildAll
|
||||
|
|
@ -5,7 +5,7 @@ import user.{ User, UserRepo }
|
|||
import team.{ Team, TeamRepo, TeamApi }
|
||||
import scalaz.effects._
|
||||
|
||||
case class Teams(
|
||||
private[cli] case class Teams(
|
||||
teamRepo: TeamRepo,
|
||||
userRepo: UserRepo,
|
||||
api: TeamApi) {
|
|
@ -1,10 +1,11 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.user.{ User, UserRepo }
|
||||
import lila.security.Store
|
||||
import scalaz.effects._
|
||||
|
||||
case class Users(userRepo: UserRepo, securityStore: Store) {
|
||||
private[cli] case class Users(userRepo: UserRepo, securityStore: Store) {
|
||||
|
||||
def enable(username: String): IO[Unit] =
|
||||
perform(username, userRepo.enable)
|
|
@ -1,9 +1,10 @@
|
|||
package lila.cli
|
||||
package lila
|
||||
package cli
|
||||
|
||||
import lila.wiki.WikiEnv
|
||||
import scalaz.effects._
|
||||
|
||||
case class Wiki(env: WikiEnv) {
|
||||
private[cli] case class Wiki(env: WikiEnv) {
|
||||
|
||||
def fetch: IO[Unit] = for {
|
||||
_ ← putStrLn("Fetching wiki from github")
|
|
@ -0,0 +1,39 @@
|
|||
package controllers
|
||||
|
||||
import lila._
|
||||
import views._
|
||||
|
||||
import play.api.mvc._
|
||||
import play.api.mvc.Results._
|
||||
import play.api.data._
|
||||
import play.api.data.Forms._
|
||||
|
||||
import scalaz.effects._
|
||||
|
||||
object Cli extends LilaController {
|
||||
|
||||
private def userRepo = env.user.userRepo
|
||||
private def runCommand = lila.cli.Main.main(env) _
|
||||
|
||||
private lazy val form = Form(tuple(
|
||||
"command" -> nonEmptyText,
|
||||
"password" -> nonEmptyText
|
||||
))
|
||||
|
||||
def command = OpenBody { implicit ctx ⇒
|
||||
implicit val req = ctx.body
|
||||
IOResult {
|
||||
form.bindFromRequest.fold(
|
||||
err ⇒ io(Ok("bad request")), {
|
||||
case (command, password) ⇒ CliAuth(password) {
|
||||
runCommand(command.split(" ")) map { res ⇒ Ok(res) }
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
private def CliAuth(password: String)(op: IO[Result]): IO[Result] =
|
||||
userRepo.checkPassword(env.settings.CliUsername, password) flatMap {
|
||||
_.fold(op, io(Ok("permission denied")))
|
||||
}
|
||||
}
|
|
@ -9,8 +9,12 @@ import play.api.libs.json._
|
|||
import play.api.libs.iteratee._
|
||||
import play.api.libs.concurrent.Akka
|
||||
|
||||
import scalaz.effects.io
|
||||
|
||||
object Main extends LilaController {
|
||||
|
||||
private lazy val runCommand = lila.cli.Main.main(env) _
|
||||
|
||||
def websocket = WebSocket.async[JsValue] { implicit req ⇒
|
||||
implicit val ctx = reqToCtx(req)
|
||||
env.site.socket.join(
|
||||
|
|
|
@ -136,6 +136,8 @@ final class Settings(config: Config, val IsDev: Boolean) {
|
|||
val CoreCollectionCache = getString("core.collection.cache")
|
||||
val CoreCronEnabled = getBoolean("core.cron.enabled")
|
||||
|
||||
val CliUsername = getString("cli.username")
|
||||
|
||||
val NetDomain = getString("net.domain")
|
||||
val NetBaseUrl = getString("net.base_url")
|
||||
|
||||
|
|
|
@ -133,10 +133,7 @@ class UserRepo(collection: MongoCollection)
|
|||
salt ← data.getAs[String]("salt")
|
||||
enabled ← data.getAs[Boolean]("enabled")
|
||||
sha512 = data.getAs[Boolean]("sha512") | false
|
||||
} yield enabled && hashed == sha512.fold(
|
||||
hash512(password, salt),
|
||||
hash(password, salt)
|
||||
)
|
||||
} yield enabled && hashed == sha512.fold(hash512(password, salt), hash(password, salt))
|
||||
} map (_ | false)
|
||||
|
||||
def create(username: String, password: String): IO[Option[User]] = for {
|
||||
|
|
9
bin/cli
9
bin/cli
|
@ -1,7 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ -z "$*" ]; then
|
||||
bin/play -Dcore.cron.enabled=false
|
||||
else
|
||||
bin/play -Dcore.cron.enabled=false ";project cli;run $*"
|
||||
fi
|
||||
COMMAND=$*
|
||||
PASSWORD=$LILA_CLI_PASSWORD
|
||||
|
||||
curl -d "password=$PASSWORD&command=$COMMAND" http://en.l.org/cli
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
curl -d "c=$*" http://en.lichess.org
|
|
@ -174,5 +174,7 @@ GET /monitor/players controllers.Monitor.nbPlayers
|
|||
GET /monitor/mps controllers.Monitor.nbMoves
|
||||
GET /monitor/status controllers.Monitor.status
|
||||
|
||||
POST /cli controllers.Cli.command
|
||||
|
||||
# Assets
|
||||
GET /assets/*file controllers.Assets.at(path="/public", file)
|
||||
|
|
|
@ -75,8 +75,4 @@ object ApplicationBuild extends Build with Resolvers with Dependencies {
|
|||
resolvers := Seq(iliaz),
|
||||
libraryDependencies := Seq(scalaz, scalalib, hasher, jodaTime, jodaConvert)
|
||||
)
|
||||
|
||||
lazy val cli = Project("cli", file("cli"), settings = buildSettings).settings(
|
||||
libraryDependencies ++= Seq(scalastic)
|
||||
) dependsOn lila
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue