From c6b6766e6bfa25dcbe3167266cdd1a7d85e02428 Mon Sep 17 00:00:00 2001 From: James Wang Date: Fri, 1 Jan 2016 23:18:40 -0500 Subject: [PATCH 1/2] Add category to Problems --- server/api/models.py | 4 +++- server/api/problem.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/server/api/models.py b/server/api/models.py index 9f6b7be..d141404 100644 --- a/server/api/models.py +++ b/server/api/models.py @@ -37,6 +37,7 @@ class Teams(db.Model): class Problems(db.Model): pid = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) + category = db.Column(db.String(128)) description = db.Column(db.Text) hint = db.Column(db.Text) flag = db.Column(db.Text) @@ -44,8 +45,9 @@ class Problems(db.Model): value = db.Column(db.Integer) solves = db.Column(db.Integer) - def __init__(self, name, description, hint, flag, value): + def __init__(self, name, category, description, hint, flag, value): self.name = name + self.category = category self.description = description self.hint = hint self.flag = flag diff --git a/server/api/problem.py b/server/api/problem.py index 638d6f5..b2a3f75 100644 --- a/server/api/problem.py +++ b/server/api/problem.py @@ -11,6 +11,7 @@ blueprint = Blueprint("problem", __name__) @api_wrapper def problem_add(): name = request.form["name"] + category = request.form["category"] description = request.form["description"] hint = request.form["hint"] flag = request.form["flag"] @@ -21,7 +22,7 @@ def problem_add(): if name_exists: return { "success":0, "message": "Problem name already taken." } - problem = Problems(name, description, hint, flag, value) + problem = Problems(name, category, description, hint, flag, value) db.session.add(problem) db.session.commit() From aa208c4d15356eb248b8a819de60a2d4afd08fce Mon Sep 17 00:00:00 2001 From: James Wang Date: Sat, 2 Jan 2016 00:15:29 -0500 Subject: [PATCH 2/2] Add problem solve functionality --- server/api/problem.py | 36 ++++++++++++++++++++++++++++++++++-- server/app.py | 2 +- web/pages/register.html | 4 ++-- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/server/api/problem.py b/server/api/problem.py index b2a3f75..d55a1f5 100644 --- a/server/api/problem.py +++ b/server/api/problem.py @@ -1,8 +1,10 @@ +import logger + from flask import Blueprint, session, request from flask import current_app as app -from models import db, Problems -from decorators import admins_only, api_wrapper +from models import db, Problems, Solves, Teams +from decorators import admins_only, api_wrapper, login_required blueprint = Blueprint("problem", __name__) @@ -67,3 +69,33 @@ def problem_update(): return { "success": 1, "message": "Success!" } return { "success": 0, "message": "Problem does not exist!" } + +@blueprint.route("/submit", methods=["POST"]) +@api_wrapper +@login_required +def problem_submit(): + pid = request.form["pid"] + flag = request.form["flag"] + tid = session["tid"] + + problem = Problems.query.filter_by(pid=pid).first() + team = Teams.query.filter_by(tid=tid).first() + if problem: + if flag == problem.flag: + solve = Solves(pid, tid) + team.score += problem.value + problem.solves += 1 + db.session.add(solve) + db.session.add(team) + db.session.add(problem) + db.session.commit() + + logger.log("submissions.log", logger.WARNING, "%s has solved %s by submitting %s" % (team.name, problem.name, flag)) + return { "success": 1, "message": "Correct!" } + + else: + logger.log("submissions.log", logger.WARNING, "%s has incorrectly submitted %s to %s" % (team.name, flag, problem.name)) + return { "success": 0, "message": "Incorrect." } + + else: + return { "success": 0, "message": "Problem does not exist!" } diff --git a/server/app.py b/server/app.py index a262935..e5a2378 100644 --- a/server/app.py +++ b/server/app.py @@ -11,7 +11,7 @@ app.config["SQLALCHEMY_DATABASE_URI"] = config.SQLALCHEMY_DATABASE_URI app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = config.SQLALCHEMY_TRACK_MODIFICATIONS with app.app_context(): - from api.models import db + from api.models import db, Teams, Problems, Solves, Users db.init_app(app) db.create_all() diff --git a/web/pages/register.html b/web/pages/register.html index 5970f8b..14ece2d 100644 --- a/web/pages/register.html +++ b/web/pages/register.html @@ -36,9 +36,9 @@

- +
- +