def register(username, password, email): state_code = 0 if not Checker.is_valid_username(username): state_code = 2002 elif not Checker.is_valid_password(password): state_code = 2007 elif not Checker.is_valid_password(email): state_code = 2006 elif User.query.filter_by(username=username).first(): state_code = 2008 else: state_code = 1 user = User(username=username, password=password, email=email) user.save() return state_code
def api_logout(): session_id = request.args.get('session_id') user = User.get_cur_user(session_id=session_id) sessions = user.sessions.all() for s in sessions: s.delete() return jsonify({"status": "1"})
def contest(contest_id): contest = Contest.query.filter_by(id=contest_id).first() user = User.get_cur_user() now = time.time() if now < contest.start_time and not contest.is_allowed_edit(user): return not_have_permission() player = None info = {} if user: player = contest.players.filter_by(user_id=user.id).first() if player: details = player.get_score_details() for key, val in details.items(): if isinstance(val, dict): pid = int(key) jid = int(val["judge_id"]) status = JudgeState.query.filter_by(id=jid).first().status url = url_for("judge_detail", judge_id=jid) if contest.is_running(): info[pid] = u"<a href = '%s'>已提交</a>" % (url) else: info[pid] = "<a href = '%s'>%s</a>" % (url, status) return render_template("contest.html", tool=Tools, contest=contest, info=info)
def edit_contest(contest_id): user = User.get_cur_user() if not user: return need_login() contest = Contest.query.filter_by(id=contest_id).first() if contest and not contest.is_allowed_edit(user): return not_have_permission() elif not (user.have_privilege(4) or user.have_privilege(5)): return not_have_permission() if request.method == "POST": if not contest: contest = Contest(title=request.form.get("title"), start_time=request.form.get("start_time"), end_time=request.form.get("end_time"), holder=user) contest.title = request.form.get("title") contest.start_time = request.form.get("start_time") contest.end_time = request.form.get("end_time") contest.information = request.form.get("information") try: problems_list = [int(pid) for pid in request.form.get("problems").split(",")] except: problems_list = [] contest.set_problems(problems_list) contest.save() return redirect(url_for("contest", contest_id=contest.id)) else: return render_template("edit_contest.html", tool=Tools, contest=contest)
def edit_article(article_id): user = User.get_cur_user() if not user: return need_login() article = Article.query.filter_by(id=article_id).first() if article and article.is_allowed_edit(user) == False: return not_have_permission() if request.method == "POST": if request.form.get("title") == "" or request.form.get( "content") == "": return show_error("Please input title and content", url_for("edit_article", article_id=article_id)) if not article: article = Article(title=request.form.get("title"), content=request.form.get("content"), user=user) article.title = request.form.get("title") article.content = request.form.get("content") article.update_time = time.time() article.sort_time = time.time() article.save() return redirect(url_for("article", article_id=article.id)) else: return render_template("edit_article.html", tool=Tools, article=article, tab="discussion")
def contest(contest_id): contest = Contest.query.filter_by(id=contest_id).first() user = User.get_cur_user() now = time.time() if now < contest.start_time and not contest.is_allowed_edit(user): return not_have_permission() player = None info = {} if user: player = contest.players.filter_by(user_id = user.id).first() if player: details = player.get_score_details() for key, val in details.iteritems(): if isinstance(val, dict): pid = int(key) jid = int(val["judge_id"]) status = JudgeState.query.filter_by(id = jid).first().status url = url_for("judge_detail", judge_id = jid) if contest.is_running(): info[pid] = u"<a href = '%s'>已提交</a>" % (url) else: info[pid] = "<a href = '%s'>%s</a>" % (url, status) return render_template("contest.html", tool=Tools, contest=contest, info = info)
def edit_notice(notice_id): user = User.get_cur_user() if not user: return need_login() notice = Notice.query.filter_by(id=notice_id).first() if notice and not notice.is_allowed_edit(user): return not_have_permission() elif not (user.have_privilege(4) or user.have_privilege(5)): return not_have_permission() if request.method == "POST": if request.form.get("title") == "" or request.form.get( "content") == "": return show_error("Please input title and content", url_for("edit_notice", anotice_id=notice_id)) if not notice: notice = Notice(title=request.form.get("title"), content=request.form.get("content"), user=user) notice.title = request.form.get("title") notice.content = request.form.get("content") notice.tags = request.form.get("tags") notice.update_time = time.time() notice.sort_time = time.time() notice.save() return redirect(url_for("info")) else: return render_template("edit_notice.html", tool=Tools, notice=notice, tab="notice")
def find_user(): nickname = request.args.get("nickname") user = User.find_user(nickname=nickname) if not user: return show_error("Can't find " + nickname, url_for("ranklist")) return redirect(url_for("user", user_id=user.id))
def delete_article(article_id): user = User.get_cur_user() article = Article.query.filter_by(id=article_id).first() if not user: return need_login() if not article: return show_error("Can't find article", url_for('index')) if article and article.is_allowed_edit(user) == False: return not_have_permission() if request.args.get("confirm") == "true": article = Article.query.filter_by(id=article_id).first() if article and article.is_allowed_edit(user) == False: return not_have_permission() if article: article.delete() return redirect(url_for("discussion")) else: return render_template("delete_article.html", tool=Tools, user=user, article=article)
def edit_problem(problem_id): user = User.get_cur_user() if not user: return need_login() problem = Problem.query.filter_by(id=problem_id).first() if problem and problem.is_allowed_edit(user) == False: return not_have_permission() if request.method == "POST": if not problem: problem_id = controller.create_problem( user=user, title=request.form.get("title")) problem = Problem.query.filter_by(id=problem_id).first() problem.update(title=request.form.get("title"), description=request.form.get("description"), input_format=request.form.get("input_format"), output_format=request.form.get("output_format"), example=request.form.get("example"), limit_and_hint=request.form.get("limit_and_hint")) problem.save() return redirect(url_for("problem", problem_id=problem.id)) else: return render_template("edit_problem.html", tool=Tools, problem=problem)
def edit_problem(problem_id): user = User.get_cur_user() if not user: return need_login() problem = Problem.query.filter_by(id=problem_id).first() if problem and problem.is_allowed_edit(user) == False: return not_have_permission() if request.method == "POST": if not problem: problem_id = controller.create_problem(user=user, title=request.form.get("title")) problem = Problem.query.filter_by(id=problem_id).first() problem.update(title=request.form.get("title"), description=request.form.get("description"), input_format=request.form.get("input_format"), output_format=request.form.get("output_format"), example=request.form.get("example"), limit_and_hint=request.form.get("limit_and_hint")) problem.save() return redirect(url_for("problem", problem_id=problem.id)) else: return render_template("edit_problem.html", tool=Tools, problem=problem)
def upload_testdata(problem_id): user = User.get_cur_user() if not user: return need_login() problem = Problem.query.filter_by(id=problem_id).first() if not problem: abort(404) if problem.is_allowed_edit(user) == False: return not_have_permission() if request.method == "POST": file = request.files.get("testdata") if file: problem.update_testdata(file) if request.form.get("time_limit"): problem.time_limit = int(request.form.get("time_limit")) if request.form.get("memory_limit"): problem.memory_limit = int(request.form.get("memory_limit")) problem.save() return redirect(url_for("upload_testdata", problem_id=problem_id)) else: return render_template("upload_testdata.html", tool=Tools, problem=problem, parse=FileParser.parse_as_testdata)
def judge_state(): query = JudgeState.query.order_by(db.desc(JudgeState.id)) nickname = request.args.get("submitter") problem_id = request.args.get("problem_id") if request.args.get("submitter"): submitter = User.query.filter_by(nickname=nickname).first() if submitter: submitter_id = submitter.id else: submitter_id = 0 query = query.filter_by(user_id=submitter_id) if request.args.get("problem_id"): query = query.filter_by(problem_id=int(problem_id)) def make_url(page, other): other["page"] = page return url_for("judge_state") + "?" + urlencode(other) if not nickname: nickname = "" if not problem_id: problem_id = "" sorter = Paginate(query, make_url=make_url, other={"submitter": nickname, "problem_id": problem_id}, cur_page=request.args.get("page"), edge_display_num=3, per_page=10) return render_template("judge_state.html", user=User.get_cur_user(), judges=sorter.get(), tab="judge", submitter=nickname, problem_id=problem_id, sorter=sorter, encode=urlencode, tool=Tools)
def unstar_problem(problem_id): user = User.get_cur_user() problem = Problem.query.filter_by(id=problem_id).first() if not problem: abort(404) problem.stared.remove(user) problem.save() return redirect(url_for("problem", problem_id=problem_id))
def delete_notice(notice_id): user = User.get_cur_user() if not user: return need_login() notice = Notice.query.filter_by(id=notice_id).first() if notice and notice.is_allowed_edit(user) is False: return not_have_permission() notice.delete() return redirect(url_for("info"))
def contest_ranklist(contest_id): user = User.get_cur_user() contest = Contest.query.filter_by(id=contest_id).first() if not contest: abort(404) now = time.time() if contest.is_allowed_edit(user) or now > contest.end_time: return render_template("contest_ranklist.html", tool=Tools, contest=contest) else: return not_have_permission()
def judge_detail(judge_id): judge = JudgeState.query.filter_by(id=judge_id).first() if not judge: abort(404) return render_template("judge_detail.html", judge=judge, user=User.get_cur_user(), tab="judge", tool=Tools)
def problem(problem_id): user = User.get_cur_user() problem = Problem.query.filter_by(id=problem_id).first() if not problem: abort(404) if problem.is_allowed_use(user) == False: return not_have_permission() return render_template("problem.html", tool=Tools, tab="problem_set", problem=problem)
def problem(problem_id): user = User.get_cur_user() problem = Problem.query.filter_by(id=problem_id).first() if not problem: abort(404) if problem.is_allowed_use(user) is False: return not_have_permission() return render_template("problem.html", tool=Tools, tab="problem_set", problem=problem)
def delete_comment(comment_id): user = User.get_cur_user() comment = Comment.query.filter_by(id=comment_id).first() if not user: return need_login() if not comment: return show_error("Can't find comment", url_for('index')) if comment and comment.is_allowed_edit(user) is False: return not_have_permission() if comment: comment.delete() return redirect(url_for('article', article_id=comment.article_id))
def change_public_attr(problem_id): session_id = request.args.get('session_id') user = User.get_cur_user(session_id=session_id) problem = Problem.query.filter_by(id=problem_id).first() if problem and user and user.have_privilege(2): if request.method == "POST": problem.is_public = True elif request.method == "DELETE": problem.is_public = False problem.save() else: abort(404) return jsonify({"status": 0})
def edit_user(user_id): edited_user = User.find_user(id=user_id) if not edited_user: return show_error("Can't find user", next=url_for("index")) user = User.get_cur_user() if not edited_user.is_allowed_edit(user): return not_have_permission() if request.method == "POST": email = request.form.get("email") information = request.form.get("information") old_password = request.form.get("old_password") new_password = request.form.get("new_password") status = 1 if not Checker.is_valid_email(email): status = 3001 if information == "": information = None if old_password: if not edited_user.check_password(old_password): status = 3002 else: if not Checker.is_valid_password(new_password): edited_user.password = new_password else: status = 3003 if status == 1: edited_user.email = email edited_user.information = information edited_user.save() return render_template("edit_user.html", tool=Tools, edited_user=edited_user, status=status) else: return render_template("edit_user.html", tool=Tools, edited_user=edited_user)
def user(user_id): user = User.find_user(id=user_id) if not user: return show_error("Can't find user", next=url_for("index")) user.refresh_submit_info() user.save() articles = Article.query.filter_by(user_id = user.id).order_by(Article.public_time.desc()).all() articles_num = len(articles) return render_template("user.html", tool=Tools, shown_user=user, articles_num = articles_num, articles = articles)
def contest_problem(contest_id, kth_problem): contest = Contest.query.filter_by(id=contest_id).first() user = User.get_cur_user() if not contest: abort(404) now = time.time() if now < contest.start_time and not contest.is_allowed_edit(user): return not_have_permission() problem = contest.get_problems()[kth_problem] if now > contest.end_time: return redirect(url_for("problem", problem_id=problem.id)) return render_template("contest_problem.html", tool=Tools, problem=problem, contest=contest)
def submit_code(problem_id): user = User.get_cur_user() if not user: return need_login() problem = Problem.query.filter_by(id=problem_id).first() if not problem: abort(404) if request.method == "POST": code = request.form.get("code") language = "C++" if not code or len(code) <= 0 or len(code) >= 1024 * 100: return show_error( "Please check out your code length.The code should less than 100kb.", url_for("submit_code", problem_id=problem.id)) judge = JudgeState(code=code, user=user, language=language, problem=problem) contest_id = request.args.get("contest_id") if contest_id: contest = Contest.query.filter_by(id=contest_id).first() if contest and contest.is_running(): judge.type = 1 judge.type_info = contest_id else: return show_error("Sorry.The contest has been ended.", next=url_for("contest", contest_id=contest.id)) else: if not problem.is_allowed_use(user): return show_error("Sorry.You don't have permission.", next=url_for("index")) if not problem.is_public: judge.type = 2 judge.save() waiting = WaitingJudge(judge) waiting.save() return redirect(url_for("judge_detail", judge_id=judge.id)) else: return render_template("submit.html", tool=Tools, problem=problem, tab="judge")
def user(user_id): user = User.find_user(id=user_id) if not user: return show_error("Can't find user", next=url_for("index")) user.refresh_submit_info() user.save() articles = Article.query.filter_by(user_id=user.id).order_by( Article.public_time.desc()).all() articles_num = len(articles) return render_template("user.html", tool=Tools, shown_user=user, articles_num=articles_num, articles=articles)
def comment_article(article_id): user = User.get_cur_user() article = Article.query.filter_by(id=article_id).first() if not article: abort(404) if not user: return need_login() comment_str = request.form.get("comment") if not comment_str.replace(" ", ""): return show_error("请输入评论", next=url_for("article", article_id=article_id)) comment = Comment(comment_str, article, user) comment.save() return redirect(url_for("article", article_id=article.id))
def delete_article(article_id): user = User.get_cur_user() article = Article.query.filter_by(id=article_id).first() if not user: return need_login() if not article: return show_error("Can't find article", url_for('index')) if article and article.is_allowed_edit(user) == False: return not_have_permission() if request.args.get("confirm") == "true": article = Article.query.filter_by(id=article_id).first() if article and article.is_allowed_edit(user) == False: return not_have_permission() article.delete() return redirect(url_for("discussion")) else: return render_template("delete_article.html", tool = Tools, user=user, article=article)
def submit_code(problem_id): user = User.get_cur_user() if not user: return need_login() problem = Problem.query.filter_by(id=problem_id).first() if not problem: abort(404) if request.method == "POST": code = request.form.get("code") language = "C++" if not code or len(code) <= 0 or len(code) >= 1024 * 100: return show_error("Please check out your code length.The code should less than 100kb.", url_for("submit_code", problem_id=problem.id)) judge = JudgeState(code=code, user=user, language=language, problem=problem) contest_id = request.args.get("contest_id") if contest_id: contest = Contest.query.filter_by(id=contest_id).first() if contest and contest.is_running(): judge.type = 1 judge.type_info = contest_id else: return show_error("Sorry.The contest has been ended.", next=url_for("contest", contest_id=contest.id)) else: if not problem.is_allowed_use(user): return show_error("Sorry.You don't have permission.", next=url_for("index")) if not problem.is_public: judge.type = 2 judge.save() waiting = WaitingJudge(judge) waiting.save() return redirect(url_for("judge_detail", judge_id=judge.id)) else: return render_template("submit.html", tool=Tools, problem=problem, tab="judge")
def edit_article(article_id): user = User.get_cur_user() if not user: return need_login() article = Article.query.filter_by(id=article_id).first() if article and article.is_allowed_edit(user) == False: return not_have_permission() if request.method == "POST": if request.form.get("title") == "" or request.form.get("content") == "": return show_error("Please input title and content", url_for("edit_article", article_id=article_id)) if not article: article = Article(title=request.form.get("title"), content=request.form.get("content"), user=user) article.title = request.form.get("title") article.content = request.form.get("content") article.update_time = time.time() article.sort_time = time.time() article.save() return redirect(url_for("article", article_id=article.id)) else: return render_template("edit_article.html", tool=Tools, article=article, tab="discussion")
def edit_user(user_id): edited_user = User.find_user(id=user_id) if not edited_user: return show_error("Can't find user", next=url_for("index")) user = User.get_cur_user() if not edited_user.is_allowed_edit(user): return not_have_permission() if request.method == "POST": email = request.form.get("email") information = request.form.get("information") old_password = request.form.get("old_password") new_password = request.form.get("new_password") if user.have_privilege(1): if request.form.get("prb_mng"): edited_user.give_privilege(2) else: edited_user.del_privilege(2) if request.form.get("vwa_prb"): edited_user.give_privilege(3) else: edited_user.del_privilege(3) if request.form.get("cts_mng"): edited_user.give_privilege(4) else: edited_user.del_privilege(4) if request.form.get("cts_bld"): edited_user.give_privilege(5) else: edited_user.del_privilege(5) if request.form.get("atc_mng"): edited_user.give_privilege(6) else: edited_user.del_privilege(6) if request.form.get("usr_mng"): edited_user.give_privilege(7) else: edited_user.del_privilege(7) if request.form.get("dat_dld"): edited_user.give_privilege(8) else: edited_user.del_privilege(8) status = 1 if not Checker.is_valid_email(email): status = 3001 if information == "": information = None if old_password: if edited_user.password != old_password: status = 3002 else: if Checker.is_valid_password(new_password): edited_user.password = new_password else: status = 3003 if status == 1: edited_user.email = email edited_user.information = information edited_user.save() return render_template("edit_user.html", tool=Tools, edited_user=edited_user, status=status) else: return render_template("edit_user.html", tool=Tools, edited_user=edited_user)
def get_cur_user(): return User.get_cur_user()