lila/app/controllers/Challenge.scala

48 lines
1.5 KiB
Scala
Raw Normal View History

package controllers
import play.api.data.Form
import play.api.i18n.Messages.Implicits._
import play.api.libs.json.Json
import play.api.mvc.{ Result, Results, Call, RequestHeader, Accepting }
import scala.concurrent.duration._
2016-01-28 05:04:55 -07:00
import lila.api.{ Context, BodyContext }
import lila.app._
2016-01-30 03:27:41 -07:00
import lila.challenge.{ Challenge => ChallengeModel }
import lila.common.{ HTTPRequest, LilaCookie }
2016-01-30 03:27:41 -07:00
import views.html
2016-01-26 22:56:30 -07:00
object Challenge extends LilaController {
private def env = Env.challenge
private val PostRateLimit = new lila.memo.RateLimit(5, 1 minute)
def all = Auth { implicit ctx =>
me =>
env.api.findByDestId(me.id) zip
2016-01-28 05:04:55 -07:00
env.api.findByChallengerId(me.id) map {
case (out, in) => Ok(env.jsonView.all(in, out)) as JSON
}
}
2016-01-30 03:27:41 -07:00
private[controllers] def reach(id: String)(implicit ctx: Context): Fu[Result] =
env.api byId id flatMap {
2016-01-28 05:04:55 -07:00
case None => notFound
2016-01-30 03:27:41 -07:00
case Some(challenge) if isMine(challenge) => Ok(html.challenge.mine(challenge)).fuccess
case Some(challenge) => Ok(html.challenge.theirs(challenge)).fuccess
2016-01-28 05:04:55 -07:00
}
2016-01-30 03:27:41 -07:00
private def isMine(challenge: ChallengeModel)(implicit ctx: Context) = challenge.challenger match {
case Left(anon) => HTTPRequest sid ctx.req contains anon.secret
2016-01-28 05:04:55 -07:00
case Right(user) => ctx.userId contains user.id
}
2016-01-30 03:27:41 -07:00
def cancel(id: String) = Open { implicit ctx =>
OptionFuResult(env.api byId id) { challenge =>
if (isMine(challenge)) env.api remove challenge inject Redirect(routes.Lobby.home)
else notFound
}
}
}