def who_solved(chalid): if not utils.user_can_view_challenges(): return redirect(url_for('auth.login', next=request.path)) json = {'teams': []} if utils.hide_scores(): return jsonify(json) solves = Solves.query.join(Teams, Solves.teamid == Teams.id).filter(Solves.chalid == chalid, Teams.banned == False).order_by(Solves.date.asc()) for solve in solves: json['teams'].append({'id': solve.team.id, 'name': solve.team.name, 'date': solve.date}) return jsonify(json)
def solves_per_chal(): if not utils.user_can_view_challenges(): return redirect(url_for('auth.login', next=request.path)) solves_sub = db.session.query(Solves.chalid, db.func.count(Solves.chalid).label('solves')).join(Teams, Solves.teamid == Teams.id).filter(Teams.banned == False).group_by(Solves.chalid).subquery() solves = db.session.query(solves_sub.columns.chalid, solves_sub.columns.solves, Challenges.name) \ .join(Challenges, solves_sub.columns.chalid == Challenges.id).all() json = {} if utils.hide_scores(): for chal, count, name in solves: json[chal] = -1 else: for chal, count, name in solves: json[chal] = count db.session.close() return jsonify(json)
def fails(teamid=None): if teamid is None: fails = WrongKeys.query.filter_by(teamid=session['id']).count() solves = Solves.query.filter_by(teamid=session['id']).count() else: if utils.authed() and session['id'] == teamid: fails = WrongKeys.query.filter_by(teamid=teamid).count() solves = Solves.query.filter_by(teamid=teamid).count() elif utils.hide_scores(): fails = 0 solves = 0 else: fails = WrongKeys.query.filter_by(teamid=teamid).count() solves = Solves.query.filter_by(teamid=teamid).count() db.session.close() json = {'fails': str(fails), 'solves': str(solves)} return jsonify(json)
def who_solved(chalid): if not utils.user_can_view_challenges(): return redirect(url_for('auth.login', next=request.path)) json = {'teams': []} if utils.hide_scores(): return jsonify(json) solves = Solves.query.join(Teams, Solves.teamid == Teams.id).filter( Solves.chalid == chalid, Teams.banned == False).order_by(Solves.date.asc()) for solve in solves: json['teams'].append({ 'id': solve.team.id, 'name': solve.team.name, 'date': solve.date }) return jsonify(json)
def classified_scores(classification): json = {'standings': []} if utils.get_config( 'view_scoreboard_if_authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) if utils.hide_scores(): return jsonify(json) standings = get_standings(classification=classification) for i, x in enumerate(standings): json['standings'].append({ 'pos': i + 1, 'id': x.teamid, 'team': x.name, 'score': int(x.score) }) return jsonify(json)
def scores(): json = {'standings': []} if utils.get_config( 'view_scoreboard_if_authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) if utils.hide_scores(): return jsonify(json) standings = get_standings() for i, x in enumerate(standings): json['standings'].append({ 'pos': i + 1, 'id': x['name'], 'team': x['name'], 'score': int(x['score']), 'solves': x['solves'] }) return jsonify(json)
def topteams(count): json = {'scores': {}} if utils.get_config('view_scoreboard_if_authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) if utils.hide_scores(): return jsonify(json) if count > 20 or count < 0: count = 10 standings = get_standings(count=count) for team in standings: solves = Solves.query.filter_by(teamid=team.teamid) awards = Awards.query.filter_by(teamid=team.teamid) freeze = utils.get_config('freeze') if freeze: solves = solves.filter(Solves.date < utils.unix_time_to_utc(freeze)) awards = awards.filter(Awards.date < utils.unix_time_to_utc(freeze)) solves = solves.all() awards = awards.all() json['scores'][team.name] = [] for x in solves: json['scores'][team.name].append({ 'chal': x.chalid, 'team': x.teamid, 'value': x.chal.value, 'time': utils.unix_time(x.date) }) for award in awards: json['scores'][team.name].append({ 'chal': None, 'team': award.teamid, 'value': award.value, 'time': utils.unix_time(award.date) }) json['scores'][team.name] = sorted(json['scores'][team.name], key=lambda k: k['time']) return jsonify(json)
def scoreboard_view(): classifications = [] for classification in db.session.query( Classification.classification).distinct(): classifications.append(classification[0]) db.session.close() classifications = sorted(classifications, reverse=True) # -=- For TAMUctf, but can be left in without any problems -=- try: tamu_test() tamu = ["tamu"] except: tamu = [] #-=- try: current_user_class = Classification.query.filter_by( id=session.get('id')).first().classification except: current_user_class = "ALL" try: current_user_other = Classification.query.filter_by( id=session.get('id')).first().other except: current_user_other = 0 if utils.get_config( 'view_scoreboard_if_authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) if utils.hide_scores(): return render_template('scoreboard.html', errors=['Scores are currently hidden']) standings = get_standings() return render_template('scoreboard.html', teams=standings, score_frozen=utils.is_scoreboard_frozen(), classifications=classifications, tamu=tamu, current_user_class=current_user_class, current_user_other=current_user_other)
def solves_per_chal(): if not utils.user_can_view_challenges(): return redirect(url_for('auth.login', next=request.path)) solves_sub = db.session.query( Solves.chalid, db.func.count(Solves.chalid).label('solves')).join( Teams, Solves.teamid == Teams.id).filter(Teams.banned == False).group_by( Solves.chalid).subquery() solves = db.session.query(solves_sub.columns.chalid, solves_sub.columns.solves, Challenges.name) \ .join(Challenges, solves_sub.columns.chalid == Challenges.id).all() json = {} if utils.hide_scores(): for chal, count, name in solves: json[chal] = -1 else: for chal, count, name in solves: json[chal] = count db.session.close() return jsonify(json)
def team_solves(compid, teamid): json = {'solves': []} if utils.get_config('view_scoreboard_if_authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) if utils.hide_scores(): return jsonify(json) chalids = [ chal.chalid for chal in Chalcomp.query.filter(Chalcomp.compid == compid) ] solves = Solves.query.filter(Solves.teamid == teamid) awards = Awards.query.filter(Awards.teamid == teamid) solves = solves.filter(Solves.chalid.in_(chalids)) freeze = utils.get_config('freeze') if freeze: solves = solves.filter(Solves.date < utils.unix_time_to_utc(freeze)) awards = awards.filter(Awards.date < utils.unix_time_to_utc(freeze)) solves = solves.all() awards = awards.all() for solve in solves: json['solves'].append({ 'chal': solve.chalid, 'team': solve.teamid, 'value': solve.chal.value, 'time': utils.unix_time(solve.date) }) for award in awards: json['solves'].append({ 'chal': None, 'team': award.teamid, 'value': award.value, 'time': utils.unix_time(award.date) }) json['solves'] = sorted(json['solves'], key=lambda k: k['time']) return jsonify(json)
def team(teamid): if utils.get_config('workshop_mode'): abort(404) if utils.get_config('view_scoreboard_if_utils.authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) errors = [] freeze = utils.get_config('freeze') user = Teams.query.filter_by(id=teamid).first_or_404() solves = Solves.query.filter_by(teamid=teamid) awards = Awards.query.filter_by(teamid=teamid) place = user.place() score = user.score() if freeze: freeze = utils.unix_time_to_utc(freeze) if teamid != session.get('id'): solves = solves.filter(Solves.date < freeze) awards = awards.filter(Awards.date < freeze) solves = solves.all() awards = awards.all() db.session.close() if utils.hide_scores() and teamid != session.get('id'): errors.append('Scores are currently hidden') if errors: return render_template('team.html', team=user, errors=errors) if request.method == 'GET': return render_template('team.html', solves=solves, awards=awards, team=user, score=score, place=place, score_frozen=utils.is_scoreboard_frozen()) elif request.method == 'POST': json = {'solves': []} for x in solves: json['solves'].append({'id': x.id, 'chal': x.chalid, 'team': x.teamid}) return jsonify(json)
def solves_per_chal(): if not utils.user_can_view_challenges(): return redirect(url_for('auth.login', next=request.path)) chals = Challenges.query\ .filter(or_(Challenges.hidden != True, Challenges.hidden == None))\ .order_by(Challenges.value)\ .all() solves_sub = db.session.query( Solves.chalid, db.func.count(Solves.chalid).label('solves') )\ .join(Teams, Solves.teamid == Teams.id) \ .filter(Teams.banned == False) \ .group_by(Solves.chalid).subquery() solves = db.session.query( solves_sub.columns.chalid, solves_sub.columns.solves, Challenges.name ) \ .join(Challenges, solves_sub.columns.chalid == Challenges.id).all() data = {} if utils.hide_scores(): for chal, count, name in solves: data[chal] = -1 for c in chals: if c.id not in data: data[c.id] = -1 else: for chal, count, name in solves: data[chal] = count for c in chals: if c.id not in data: data[c.id] = 0 db.session.close() return jsonify(data)
def team(teamid): if utils.get_config('view_scoreboard_if_utils.authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) errors = [] freeze = utils.get_config('freeze') user = Teams.query.filter_by(id=teamid).first_or_404() solves = Solves.query.filter_by(teamid=teamid) awards = Awards.query.filter_by(teamid=teamid) place = user.place() score = user.score() if freeze: freeze = utils.unix_time_to_utc(freeze) if teamid != session.get('id'): solves = solves.filter(Solves.date < freeze) awards = awards.filter(Awards.date < freeze) solves = solves.all() awards = awards.all() db.session.close() if utils.hide_scores() and teamid != session.get('id'): errors.append('Scores are currently hidden') if errors: return render_template('team.html', team=user, errors=errors) if request.method == 'GET': return render_template('team.html', solves=solves, awards=awards, team=user, score=score, place=place, score_frozen=utils.is_scoreboard_frozen()) elif request.method == 'POST': json = {'solves': []} for x in solves: json['solves'].append({'id': x.id, 'chal': x.chalid, 'team': x.teamid}) return jsonify(json)
def solves(teamid=None): solves = None awards = None if teamid is None: if utils.is_admin(): solves = Solves.query.filter_by(teamid=session['id']).all() elif utils.user_can_view_challenges(): if utils.authed(): solves = Solves.query.join(Teams, Solves.teamid == Teams.id).filter( Solves.teamid == session['id'], Teams.banned == False).all() else: return jsonify({'solves': []}) else: return redirect(url_for('auth.login', next='solves')) else: if utils.authed() and session['id'] == teamid: solves = Solves.query.filter_by(teamid=teamid) awards = Awards.query.filter_by(teamid=teamid) freeze = utils.get_config('freeze') if freeze: freeze = utils.unix_time_to_utc(freeze) if teamid != session.get('id'): solves = solves.filter(Solves.date < freeze) awards = awards.filter(Awards.date < freeze) solves = solves.all() awards = awards.all() elif utils.hide_scores(): # Use empty values to hide scores solves = [] awards = [] else: solves = Solves.query.filter_by(teamid=teamid) awards = Awards.query.filter_by(teamid=teamid) freeze = utils.get_config('freeze') if freeze: freeze = utils.unix_time_to_utc(freeze) if teamid != session.get('id'): solves = solves.filter(Solves.date < freeze) awards = awards.filter(Awards.date < freeze) solves = solves.all() awards = awards.all() db.session.close() json = {'solves': []} for solve in solves: json['solves'].append({ 'chal': solve.chal.name, 'chalid': solve.chalid, 'team': solve.teamid, 'value': solve.chal.value, 'category': solve.chal.category, 'time': utils.unix_time(solve.date) }) if awards: for award in awards: json['solves'].append({ 'chal': award.name, 'chalid': None, 'team': award.teamid, 'value': award.value, 'category': award.category or "Award", 'time': utils.unix_time(award.date) }) json['solves'].sort(key=lambda k: k['time']) return jsonify(json)
def topteams(count): json = {'places': {}} if utils.get_config('view_scoreboard_if_authed') and not utils.authed(): return redirect(url_for('auth.login', next=request.path)) if utils.hide_scores(): return jsonify(json) if count > 20 or count < 0: count = 10 standings = get_standings(count=count) team_ids = [team.teamid for team in standings] solves = Solves.query.filter(Solves.teamid.in_(team_ids)) awards = Awards.query.filter(Awards.teamid.in_(team_ids)) freeze = utils.get_config('freeze') if freeze: solves = solves.filter(Solves.date < utils.unix_time_to_utc(freeze)) awards = awards.filter(Awards.date < utils.unix_time_to_utc(freeze)) solves = solves.all() awards = awards.all() for i, team in enumerate(team_ids): json['places'][i + 1] = { 'id': standings[i].teamid, 'name': standings[i].name, 'solves': [] } for solve in solves: if solve.teamid == team: json['places'][i + 1]['solves'].append({ 'chal': solve.chalid, 'team': solve.teamid, 'value': solve.chal.value, 'time': utils.unix_time(solve.date) }) for award in awards: if award.teamid == team: json['places'][i + 1]['solves'].append({ 'chal': None, 'team': award.teamid, 'value': award.value, 'time': utils.unix_time(award.date) }) json['places'][i + 1]['solves'] = sorted(json['places'][i + 1]['solves'], key=lambda k: k['time']) return jsonify(json)