mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-17 05:54:19 +01:00
Adding score and place to team page, fixing create_app
This commit is contained in:
@@ -7,7 +7,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
|
|
||||||
def create_app(subdomain, username="", password=""):
|
def create_app(subdomain="", username="", password=""):
|
||||||
app = Flask("CTFd", static_folder="../static", template_folder="../templates")
|
app = Flask("CTFd", static_folder="../static", template_folder="../templates")
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
app.config.from_object('CTFd.config')
|
app.config.from_object('CTFd.config')
|
||||||
|
|||||||
@@ -277,9 +277,11 @@ def init_admin(app):
|
|||||||
user = Teams.query.filter_by(id=teamid).first()
|
user = Teams.query.filter_by(id=teamid).first()
|
||||||
solves = Solves.query.filter_by(teamid=teamid).all()
|
solves = Solves.query.filter_by(teamid=teamid).all()
|
||||||
addrs = Tracking.query.filter_by(team=teamid).group_by(Tracking.ip).all()
|
addrs = Tracking.query.filter_by(team=teamid).group_by(Tracking.ip).all()
|
||||||
|
score = user.score()
|
||||||
|
place = user.place()
|
||||||
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return render_template('admin/team.html', solves=solves, team=user, addrs=addrs)
|
return render_template('admin/team.html', solves=solves, team=user, addrs=addrs, score=score, place=place)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
name = request.form.get('name', None)
|
name = request.form.get('name', None)
|
||||||
password = request.form.get('password', None)
|
password = request.form.get('password', None)
|
||||||
|
|||||||
@@ -109,6 +109,21 @@ class Teams(db.Model):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<team %r>' % self.name
|
return '<team %r>' % self.name
|
||||||
|
|
||||||
|
def score(self):
|
||||||
|
score = db.func.sum(Challenges.value).label('score')
|
||||||
|
stuff = db.session.query(Solves.teamid, score).join(Teams).join(Challenges).filter(Teams.banned == None, Teams.id==self.id).group_by(Solves.teamid).one()
|
||||||
|
print stuff
|
||||||
|
return stuff[1] if stuff[1] else 0
|
||||||
|
|
||||||
|
def place(self):
|
||||||
|
score = db.func.sum(Challenges.value).label('score')
|
||||||
|
quickest = db.func.max(Solves.date).label('quickest')
|
||||||
|
teams = db.session.query(Solves.teamid).join(Teams).join(Challenges).filter(Teams.banned == None).group_by(Solves.teamid).order_by(score.desc(), quickest).all()
|
||||||
|
#http://codegolf.stackexchange.com/a/4712
|
||||||
|
i = teams.index((self.id,)) + 1
|
||||||
|
k = i%10
|
||||||
|
return "%d%s"%(i,"tsnrhtdd"[(i/10%10!=1)*(k<4)*k::4])
|
||||||
|
|
||||||
class Solves(db.Model):
|
class Solves(db.Model):
|
||||||
__table_args__ = (db.UniqueConstraint('chalid', 'teamid'), {})
|
__table_args__ = (db.UniqueConstraint('chalid', 'teamid'), {})
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
|||||||
@@ -106,10 +106,12 @@ def init_views(app):
|
|||||||
def team(teamid):
|
def team(teamid):
|
||||||
user = Teams.query.filter_by(id=teamid).first()
|
user = Teams.query.filter_by(id=teamid).first()
|
||||||
solves = Solves.query.filter_by(teamid=teamid).all()
|
solves = Solves.query.filter_by(teamid=teamid).all()
|
||||||
|
score = user.score()
|
||||||
|
place = user.place()
|
||||||
db.session.close()
|
db.session.close()
|
||||||
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return render_template('team.html', solves=solves, team=user)
|
return render_template('team.html', solves=solves, team=user, score=score, place=place)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
json = {'solves':[]}
|
json = {'solves':[]}
|
||||||
for x in solves:
|
for x in solves:
|
||||||
|
|||||||
2
serve.py
2
serve.py
@@ -1,3 +1,3 @@
|
|||||||
from CTFd import create_app
|
from CTFd import create_app
|
||||||
app = create_app('')
|
app = create_app()
|
||||||
app.run(debug=True, host="0.0.0.0", port=4000)
|
app.run(debug=True, host="0.0.0.0", port=4000)
|
||||||
|
|||||||
@@ -5,6 +5,17 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 id="team-id">{{ team.name }}</h1>
|
<h1 id="team-id">{{ team.name }}</h1>
|
||||||
|
<h2 id="team-place" class="text-center">
|
||||||
|
{%if place %}
|
||||||
|
{{ place }} <small>place</small>
|
||||||
|
{% endif %}
|
||||||
|
</h2>
|
||||||
|
<h2 id="team-score" class="text-center">
|
||||||
|
{%if score %}
|
||||||
|
{{ score }} <small>points</small>
|
||||||
|
{% endif %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
|
||||||
<div id="keys-pie-graph"></div>
|
<div id="keys-pie-graph"></div>
|
||||||
<div id="categories-pie-graph"></div>
|
<div id="categories-pie-graph"></div>
|
||||||
|
|||||||
@@ -5,6 +5,18 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 id="team-id">{{ team.name }}</h1>
|
<h1 id="team-id">{{ team.name }}</h1>
|
||||||
|
<h2 id="team-place" class="text-center">
|
||||||
|
{%if place %}
|
||||||
|
{{ place }} <small>place</small>
|
||||||
|
{% endif %}
|
||||||
|
</h2>
|
||||||
|
<h2 id="team-score" class="text-center">
|
||||||
|
{%if score %}
|
||||||
|
{{ score }} <small>points</small>
|
||||||
|
{% endif %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
<div id="keys-pie-graph"></div>
|
<div id="keys-pie-graph"></div>
|
||||||
<div id="categories-pie-graph"></div>
|
<div id="categories-pie-graph"></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user