From 4fd0d333df3df4c1aad20a55389b48492ffe3b55 Mon Sep 17 00:00:00 2001 From: Kevin Chung Date: Sat, 12 Mar 2016 14:59:29 -0500 Subject: [PATCH] Adding ability to mark challenges as solved --- CTFd/admin.py | 12 +++- CTFd/models.py | 24 +++++++- CTFd/templates/admin/team.html | 103 +++++++++++++++++++++++++++------ CTFd/templates/setup.html | 1 + CTFd/templates/team.html | 6 ++ 5 files changed, 125 insertions(+), 21 deletions(-) diff --git a/CTFd/admin.py b/CTFd/admin.py index 0a654591..64df626d 100644 --- a/CTFd/admin.py +++ b/CTFd/admin.py @@ -519,19 +519,29 @@ def admin_solves(teamid="all"): return jsonify(json_data) +@admin.route('/admin/solves///solve', methods=['POST']) +@admins_only +def create_solve(teamid, chalid): + solve = Solves(chalid=chalid, teamid=teamid, ip='127.0.0.1', flag='MARKED_AS_SOLVED_BY_ADMIN') + db.session.add(solve) + db.session.commit() + db.session.close() + return '1' + @admin.route('/admin/solves///delete', methods=['POST']) @admins_only def delete_solve(teamid, chalid): solve = Solves.query.filter_by(teamid=teamid, chalid=chalid).first() db.session.delete(solve) db.session.commit() + db.session.close() return '1' @admin.route('/admin/wrong_keys///delete', methods=['POST']) @admins_only def delete_wrong_key(teamid, chalid): - wrong_key = WrongKeys.query.filter_by(team=teamid, chalid=chalid).first() + wrong_key = WrongKeys.query.filter_by(teamid=teamid, chalid=chalid).first() db.session.delete(wrong_key) db.session.commit() return '1' diff --git a/CTFd/models.py b/CTFd/models.py index 1da1af64..91141d47 100644 --- a/CTFd/models.py +++ b/CTFd/models.py @@ -1,5 +1,6 @@ from flask.ext.sqlalchemy import SQLAlchemy from sqlalchemy.exc import DatabaseError +from sqlalchemy.sql import func from socket import inet_aton, inet_ntoa from struct import unpack, pack @@ -41,7 +42,7 @@ class Challenges(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80)) description = db.Column(db.Text) - value = db.Column(db.Integer) + value = db.Column(db.Integer) category = db.Column(db.String(80)) flags = db.Column(db.Text) hidden = db.Column(db.Boolean) @@ -57,6 +58,25 @@ class Challenges(db.Model): return '' % self.name +class Awards(db.Model): + id = db.Column(db.Integer, primary_key=True) + teamid = db.Column(db.Integer, db.ForeignKey('teams.id')) + name = db.Column(db.String(80)) + description = db.Column(db.Text) + date = db.Column(db.DateTime, default=datetime.datetime.utcnow) + value = db.Column(db.Integer) + category = db.Column(db.String(80)) + icon = db.Column(db.Text) + + def __init__(self, teamid, name, value): + self.teamid = teamid + self.name = name + self.value = value + + def __repr__(self): + return '' % self.name + + class Tags(db.Model): id = db.Column(db.Integer, primary_key=True) chal = db.Column(db.Integer, db.ForeignKey('challenges.id')) @@ -150,7 +170,7 @@ class Solves(db.Model): date = db.Column(db.DateTime, default=datetime.datetime.utcnow) team = db.relationship('Teams', foreign_keys="Solves.teamid", lazy='joined') chal = db.relationship('Challenges', foreign_keys="Solves.chalid", lazy='joined') - # value = db.Column(db.Integer) + # value = db.Column(db.Integer) def __init__(self, chalid, teamid, ip, flag): self.ip = ip2long(ip) diff --git a/CTFd/templates/admin/team.html b/CTFd/templates/admin/team.html index 0bd9aee4..354b7875 100644 --- a/CTFd/templates/admin/team.html +++ b/CTFd/templates/admin/team.html @@ -18,15 +18,13 @@