2016-01-26 21:37:23 -07:00
|
|
|
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 }
|
2016-01-26 21:37:23 -07:00
|
|
|
import lila.app._
|
2016-01-30 03:27:41 -07:00
|
|
|
import lila.challenge.{ Challenge => ChallengeModel }
|
2016-01-26 21:37:23 -07:00
|
|
|
import lila.common.{ HTTPRequest, LilaCookie }
|
2016-01-30 03:27:41 -07:00
|
|
|
import views.html
|
2016-01-26 21:37:23 -07:00
|
|
|
|
2016-01-26 22:56:30 -07:00
|
|
|
object Challenge extends LilaController {
|
2016-01-26 21:37:23 -07:00
|
|
|
|
2016-01-27 08:01:23 -07:00
|
|
|
private def env = Env.challenge
|
2016-01-26 21:37:23 -07:00
|
|
|
|
|
|
|
private val PostRateLimit = new lila.memo.RateLimit(5, 1 minute)
|
|
|
|
|
2016-01-27 08:01:23 -07:00
|
|
|
def all = Auth { implicit ctx =>
|
|
|
|
me =>
|
2016-01-30 19:04:27 -07:00
|
|
|
renderAll(me)
|
2016-01-28 05:04:55 -07:00
|
|
|
}
|
|
|
|
|
2016-01-30 19:04:27 -07:00
|
|
|
private[controllers] def renderAll(me: lila.user.User)(implicit ctx: Context) =
|
|
|
|
env.api.findByDestId(me.id) zip
|
|
|
|
env.api.findByChallengerId(me.id) map {
|
|
|
|
case (out, in) => Ok(env.jsonView.all(in, out)) as JSON
|
|
|
|
}
|
|
|
|
private[controllers] def renderOne(challenge: ChallengeModel)(implicit ctx: Context) =
|
|
|
|
Ok(env.jsonView.one(challenge)) 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-27 08:01:23 -07:00
|
|
|
}
|
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
|
|
|
|
}
|
|
|
|
}
|
2016-01-26 21:37:23 -07:00
|
|
|
}
|