Пример #1
0
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)
Пример #2
0
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'))
Пример #3
0
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'))
Пример #4
0
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)
Пример #5
0
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'))
Пример #6
0
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)]),
    )
Пример #7
0
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("/")
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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))
Пример #11
0
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))