package utils; import models.Judge; import play.Play; import play.libs.F; import play.mvc.Action; import play.mvc.Http; import play.mvc.Result; public class JudgeAccessAction extends Action<JudgeAccessAction> { private boolean ctxContains(Http.Context ctx, String key) { return ctx.request().queryString().get(key) != null && ctx.request().queryString().get(key).length > 0; } public F.Promise<Result> call(Http.Context ctx) throws Throwable { if (ctxContains(ctx, "judge") && ctxContains(ctx, "secret")) { Judge judge = Judge.find.byId(Integer.parseInt(ctx.request().queryString().get("judge")[0])); if (judge != null && judge.secret.equals(ctx.request().queryString().get("secret")[0])) { ctx.args.put("judge", judge); return delegate.call(ctx); } } return F.Promise.pure(badRequest("Judge is not authenticated.")); } }