コード例 #1
0
ファイル: flag.py プロジェクト: jwoglom/ctf-platform
def submit_flag(team, challenge, flag):
    if g.redis.get("rl{}".format(team.id)):
        delta = config.competition_end - datetime.now()
        if delta.days > 0 or delta.seconds > (config.flag_rl * 6):
            return FLAG_SUBMISSION_TOO_FAST

    if team.solved(challenge):
        return FLAG_SUBMITTED_ALREADY
    elif not challenge.enabled:
        return FLAG_CANNOT_SUBMIT_WHILE_DISABLED
    elif flag.strip().lower() != challenge.flag.strip().lower():
        g.redis.set("rl{}".format(team.id), str(datetime.now()),
                    config.flag_rl)
        ChallengeFailure.create(team=team,
                                challenge=challenge,
                                attempt=flag,
                                time=datetime.now())
        return FLAG_INCORRECT
    else:
        if int(g.redis.hget("solves", challenge.id).decode()) == 0:
            if challenge.breakthrough_bonus:
                ScoreAdjustment.create(team=team,
                                       value=challenge.breakthrough_bonus,
                                       reason="First solve for {}".format(
                                           challenge.name))

        g.redis.hincrby("solves", challenge.id, 1)
        g.redis.delete("scoreboard")
        g.redis.delete("graph")
        ChallengeSolve.create(team=team,
                              challenge=challenge,
                              time=datetime.now())
        return SUCCESS
コード例 #2
0
def submit_flag(team, challenge, flag):
    if g.redis.get("rl{}".format(team.id)):
        delta = config.competition_end - datetime.now()
        if delta.total_seconds() > (config.flag_rl * 6):
            return FLAG_SUBMISSION_TOO_FAST

    if team.solved(challenge):
        return FLAG_SUBMITTED_ALREADY
    elif not challenge.enabled:
        return FLAG_CANNOT_SUBMIT_WHILE_DISABLED
    elif flag.strip().lower() != challenge.flag.strip().lower():
        g.redis.set("rl{}".format(team.id), str(datetime.now()),
                    config.flag_rl)
        ChallengeFailure.create(team=team,
                                challenge=challenge,
                                attempt=flag,
                                time=datetime.now())
        return FLAG_INCORRECT
    else:
        g.redis.hincrby("solves", challenge.id, 1)
        if config.immediate_scoreboard:
            g.redis.delete("scoreboard")
            g.redis.delete("graph")
        ChallengeSolve.create(team=team,
                              challenge=challenge,
                              time=datetime.now())
        return SUCCESS
コード例 #3
0
ファイル: flag.py プロジェクト: TJCSec/ctf-platform
def submit_flag(team, challenge, flag):
    if g.redis.get("rl{}".format(team.id)):
        delta = config.competition_end - datetime.now()
        if delta.total_seconds() > (config.flag_rl * 6):
            return FLAG_SUBMISSION_TOO_FAST

    if team.solved(challenge):
        return FLAG_SUBMITTED_ALREADY
    elif not challenge.enabled:
        return FLAG_CANNOT_SUBMIT_WHILE_DISABLED
    elif flag.strip().lower() != challenge.flag.strip().lower():
        g.redis.set("rl{}".format(team.id), str(datetime.now()), config.flag_rl)
        ChallengeFailure.create(team=team, challenge=challenge, attempt=flag, time=datetime.now())
        return FLAG_INCORRECT
    else:
        g.redis.hincrby("solves", challenge.id, 1)
        if config.immediate_scoreboard:
            g.redis.delete("scoreboard")
            g.redis.delete("graph")
        ChallengeSolve.create(team=team, challenge=challenge, time=datetime.now())
        return SUCCESS