refactor json form error result

This commit is contained in:
Thibault Duplessis 2018-08-21 10:31:13 +02:00
parent 5d476de857
commit a5053e2d41
10 changed files with 21 additions and 21 deletions

View file

@ -81,7 +81,7 @@ object Auth extends LilaController {
api.usernameForm.bindFromRequest.fold(
err => negotiate(
html = Unauthorized(html.auth.login(api.loginForm, referrer)).fuccess,
api = _ => Unauthorized(errorsAsJson(err)).fuccess
api = _ => jsonFormError(err)
),
username => HasherRateLimit(username, ctx.req) { chargeIpLimiter =>
api.loadLoginForm(username) flatMap { loginForm =>
@ -95,7 +95,7 @@ object Auth extends LilaController {
case _ => Unauthorized(html.auth.login(err, referrer))
}
},
api = _ => Unauthorized(errorsAsJson(err)).fuccess
api = _ => jsonFormError(err)
)
},
result => result.toOption match {
@ -214,7 +214,7 @@ object Auth extends LilaController {
api = apiVersion => forms.signup.mobile.bindFromRequest.fold(
err => {
err("username").value foreach { authLog(_, s"Signup fail: ${err.errors mkString ", "}") }
fuccess(BadRequest(jsonError(errorsAsJson(err))))
jsonFormError(err)
},
data => HasherRateLimit(data.username, ctx.req) { _ =>
val email = env.emailAddressValidator.validate(data.realEmail) err s"Invalid email ${data.email}"

View file

@ -34,7 +34,7 @@ object Bot extends LilaController {
}
case Array("game", id, "chat") => WithBot(me) {
Env.bot.form.chat.bindFromRequest.fold(
err => BadRequest(errorsAsJson(err)).fuccess,
jsonFormError,
res => WithMyBotGame(id, me) { pov =>
Env.bot.player.chat(pov.gameId, me, res) inject jsonOkResult
}

View file

@ -466,7 +466,7 @@ private[controllers] trait LilaController
) andThen (__ \ "").json.prune
}
protected def errorsAsJson(form: play.api.data.Form[_])(implicit lang: play.api.i18n.Lang) = {
protected def errorsAsJson(form: Form[_])(implicit lang: play.api.i18n.Lang) = {
val json = Json.toJson(
form.errors.groupBy(_.key).mapValues { errors =>
errors.map(e => lila.i18n.Translator.txt.literal(e.message, lila.i18n.I18nDb.Site, e.args, lang))
@ -475,6 +475,9 @@ private[controllers] trait LilaController
json validate jsonGlobalErrorRenamer getOrElse json
}
protected def jsonFormError(err: Form[_])(implicit lang: play.api.i18n.Lang) =
fuccess(BadRequest(errorsAsJson(err)))
protected def pageHit(implicit ctx: lila.api.Context) =
if (HTTPRequest isHuman ctx.req) lila.mon.http.request.path(ctx.req.path)()

View file

@ -112,7 +112,7 @@ object Message extends LilaController {
}
),
api = _ => forms.thread(me).bindFromRequest.fold(
err => fuccess(BadRequest(errorsAsJson(err))),
jsonFormError,
data => api.makeThread(data, me) map { thread =>
Ok(Json.obj("ok" -> true, "id" -> thread.id))
}

View file

@ -98,7 +98,7 @@ object Puzzle extends LilaController {
if (puzzle.mate) lila.mon.puzzle.round.mate()
else lila.mon.puzzle.round.material()
env.forms.round.bindFromRequest.fold(
err => fuccess(BadRequest(errorsAsJson(err))),
jsonFormError,
resultInt => {
val result = Result(resultInt == 1)
ctx.me match {
@ -134,7 +134,7 @@ object Puzzle extends LilaController {
if (puzzle.mate) lila.mon.puzzle.round.mate()
else lila.mon.puzzle.round.material()
env.forms.round.bindFromRequest.fold(
err => fuccess(BadRequest(errorsAsJson(err))),
jsonFormError,
resultInt => ctx.me match {
case Some(me) => for {
(round, mode) <- env.finisher(
@ -168,7 +168,7 @@ object Puzzle extends LilaController {
NoBot {
implicit val req = ctx.body
env.forms.vote.bindFromRequest.fold(
err => fuccess(BadRequest(errorsAsJson(err))),
jsonFormError,
vote => env.api.vote.find(id, me) flatMap {
v => env.api.vote.update(id, me, v, vote == 1)
} map {

View file

@ -63,9 +63,9 @@ object Setup extends LilaController with TheftPrevention {
implicit val req = ctx.body
PostRateLimit(HTTPRequest lastRemoteAddress ctx.req) {
env.forms.friend(ctx).bindFromRequest.fold(
f => negotiate(
err => negotiate(
html = Lobby.renderHome(Results.BadRequest),
api = _ => fuccess(BadRequest(errorsAsJson(f)))
api = _ => jsonFormError(err)
), {
case config => userId ?? UserRepo.byId flatMap { destUser =>
destUser ?? { Env.challenge.granter(ctx.me, _, config.perfType) } flatMap {
@ -138,10 +138,7 @@ object Setup extends LilaController with TheftPrevention {
PostRateLimit(HTTPRequest lastRemoteAddress ctx.req) {
NoPlaybanOrCurrent {
env.forms.hook(ctx).bindFromRequest.fold(
err => negotiate(
html = BadRequest(errorsAsJson(err).toString).fuccess,
api = _ => BadRequest(errorsAsJson(err)).fuccess
),
jsonFormError,
config =>
if (getBool("pool")) env.processor.saveHookConfig(config) inject hookSaveOnlyResponse
else (ctx.userId ?? Env.relation.api.fetchBlocking) flatMap {
@ -200,9 +197,9 @@ object Setup extends LilaController with TheftPrevention {
PostRateLimit(HTTPRequest lastRemoteAddress ctx.req) {
implicit val req = ctx.body
form(ctx).bindFromRequest.fold(
f => negotiate(
err => negotiate(
html = Lobby.renderHome(Results.BadRequest),
api = _ => fuccess(BadRequest(errorsAsJson(f)))
api = _ => jsonFormError(err)
),
config => op(config)(ctx) flatMap { pov =>
negotiate(

View file

@ -272,7 +272,7 @@ object Study extends LilaController {
def importPgn(id: String) = AuthBody { implicit ctx => me =>
implicit val req = ctx.body
lila.study.DataForm.importPgn.form.bindFromRequest.fold(
err => BadRequest(errorsAsJson(err)).fuccess,
jsonFormError,
data => env.api.importPgns(me, StudyModel.Id(id), data.toChapterDatas, sticky = data.sticky)
)
}

View file

@ -253,7 +253,7 @@ object Tournament extends LilaController {
private def doApiCreate(me: lila.user.User)(implicit req: Request[_]): Fu[Result] =
env.forms(me).bindFromRequest.fold(
err => BadRequest(errorsAsJson(err)).fuccess,
jsonFormError,
setup => teamsIBelongTo(me) flatMap { teams =>
env.api.createTournament(setup, me, teams, getUserTeamIds) flatMap { tour =>
Env.tournament.jsonView(tour, none, none, getUserTeamIds, none, none, lila.i18n.defaultLang)

View file

@ -282,7 +282,7 @@ object User extends LilaController {
def apiWriteNote(username: String) = ScopedBody() { implicit req => me =>
doWriteNote(username, me)(
err = err => _ => fuccess(BadRequest(errorsAsJson(err))),
err = err => _ => jsonFormError(err),
suc = jsonOkResult
)
}

View file

@ -105,7 +105,7 @@ object UserAnalysis extends LilaController with TheftPrevention {
def pgn = OpenBody { implicit ctx =>
implicit val req = ctx.body
Env.importer.forms.importForm.bindFromRequest.fold(
failure => BadRequest(errorsAsJson(failure)).fuccess,
jsonFormError,
data => Env.importer.importer.inMemory(data).fold(
err => BadRequest(jsonError(err.shows)).fuccess, {
case (game, fen) =>