def challenges(): chals = Challenge.select().order_by(Challenge.points, Challenge.name) solved = Challenge.select().join(ChallengeSolve).where( ChallengeSolve.team == g.team) solves = { i: int(g.redis.hget("solves", i).decode()) for i in [k.id for k in chals] } categories = sorted(list({chal.category for chal in chals})) return render_template("challenges.html", challenges=chals, solved=solved, categories=categories, solves=solves)
def submit(challenge): chal = Challenge.get(Challenge.id == challenge) flagval = request.form["flag"] code, message = flag.submit_flag(g.team, chal, flagval) flash(message) return redirect(url_for('challenges'))
def challenge_show_solves(challenge): chal = Challenge.get(Challenge.id == challenge) solves = ChallengeSolve.select(ChallengeSolve, Team).join(Team).order_by( ChallengeSolve.time).where(ChallengeSolve.challenge == chal) return render_template("challenge_solves.html", challenge=chal, solves=solves)
def submit(challenge): chal = Challenge.get(Challenge.id == challenge) flagval = request.form["flag"] code, message = flag.submit_flag(g.team, chal, flagval) app.logger.info(g.user.username+" submit a flag ,challenge's name is "+chal.name) flash(message) return redirect(url_for('challenges'))
def rand_chal(cat): t = token_hex(2+int(random()*8)) return Challenge( title=t, flag=t, category=cat, points=int(random()*100), text=' '.join([token_hex(int(random()*12)) for _ in range(10)]), )
def post_challenge(): form = ChallengeForm() runIds = form.data['runs'] if runIds is None or len(runIds) != 1: return redirect( '/?challengeError=Please select exactly one run to challenge') if current_user is not None and hasattr(current_user, 'id'): prev_challenged_run = db.session.query(Challenge).filter( Challenge.runner_id == current_user.id).first() #found a previosly challenged run, gotta make it unchallenged and then challenge the next one if prev_challenged_run: db.session.delete(prev_challenged_run) if prev_challenged_run.run_id != int(runIds[0]): # I'm not unchallenging a run, but challenging a new one new_challenge = db.session.query(Run).filter( Run.runner_id == current_user.id, Run.id == runIds[0]).first() if new_challenge is not None: challenge = Challenge() challenge.run_id = runIds[0] challenge.runner = current_user challenge.runner_id = current_user.id challenge.run = new_challenge latest_id = db.session.query(func.max(Run.id)).scalar() challenge.latest_run_id = latest_id db.session.add(challenge) db.session.commit() else: # just challenge the new one new_challenge = db.session.query(Run).filter( Run.runner_id == current_user.id, Run.id == runIds[0]).first() if new_challenge is not None: challenge = Challenge() challenge.run_id = runIds[0] challenge.runner = current_user challenge.runner_id = current_user.id challenge.run = new_challenge latest_id = db.session.query(func.max(Run.id)).scalar() challenge.latest_run_id = latest_id db.session.add(challenge) db.session.commit() else: return redirect("/login") return redirect("/")
def challenge_show_solves(challenge): chal = Challenge.get(Challenge.id == challenge) solves = ChallengeSolve.select(ChallengeSolve, Team).join(Team).order_by(ChallengeSolve.time).where(ChallengeSolve.challenge == chal) return render_template("challenge_solves.html", challenge=chal, solves=solves)
def challenges(): chals = Challenge.select().order_by(Challenge.points, Challenge.name) solved = Challenge.select().join(ChallengeSolve).where(ChallengeSolve.team == g.team) solves = {i: int(g.redis.hget("solves", i).decode()) for i in [k.id for k in chals]} categories = sorted(list({chal.category for chal in chals})) return render_template("challenges.html", challenges=chals, solved=solved, categories=categories, solves=solves)
def submit_api(challenge): chal = Challenge.get(Challenge.id == challenge) flagval = request.form["flag"] code, message = flag.submit_flag(g.team, chal, flagval) return jsonify(dict(code=code, message=message))