Skip to content

Commit d5c8126

Browse files
committed
make users not be able to see problems from contests that haven't started
1 parent 0c97fbb commit d5c8126

3 files changed

Lines changed: 17 additions & 11 deletions

File tree

autograder/apps/contests/views.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from django.core.paginator import Paginator
33
from django.conf import settings
44
from django.utils import timezone
5+
from django.http import HttpResponse
56
from ..oauth.decorators import login_required, admin_required
67
from .models import Contest
78
from ..problems.models import Problem
@@ -16,6 +17,8 @@
1617
@login_required
1718
def contests_view(request):
1819
contests = Contest.objects.filter(tjioi=settings.TJIOI_MODE).order_by("-start")
20+
if not request.user.is_staff:
21+
contests = contests.filter(start__lte=timezone.now())
1922
context = {"contests": contests}
2023
return render(request, "contest/contests.html", context)
2124

@@ -28,14 +31,11 @@ def contest_view(request, cid):
2831
if problems is None:
2932
problems = []
3033

31-
now = timezone.now()
32-
contest_start = contest.start
3334
contest_end = contest.end
3435
time_message = contest_end
3536
time_type = "end"
36-
if now < contest_start:
37-
time_type = "start"
38-
time_message = contest_start
37+
if timezone.now() < contest.start:
38+
return HttpResponse("Contest has not started yet", status=403)
3939

4040
ordered = []
4141
for problem in problems:
@@ -94,7 +94,8 @@ def contest_standings_view(request, cid):
9494
problems = Problem.objects.filter(contest_id=cid)
9595
contest = get_object_or_404(Contest, id=cid)
9696

97-
logger.error(standings)
97+
if timezone.now() < contest.start:
98+
return HttpResponse("Contest has not started yet", status=403)
9899

99100
context = {
100101
"title": standings["title"],
@@ -111,6 +112,8 @@ def contest_standings_view(request, cid):
111112
@login_required
112113
def contest_status_view(request, cid, mine_only, page):
113114
contest = get_object_or_404(Contest, id=cid)
115+
if timezone.now() < contest.start:
116+
return HttpResponse("Contest has not started yet", status=403)
114117
subs = Submission.objects.filter(contest=contest)
115118
if not request.user.is_staff:
116119
subs = subs.filter(usr__is_staff=False)

autograder/apps/problems/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
def problemset_view(request):
1515
problems = Problem.objects.filter(contest__tjioi=settings.TJIOI_MODE)
1616
if not request.user.is_staff:
17-
problems = problems.filter(secret=False, contest__end__lt=timezone.now())
17+
problems = problems.filter(secret=False, contest__start__lte=timezone.now())
1818

1919
problems = problems.order_by("-id")
2020

autograder/apps/runtests/views.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ def submit_view(request, cid=None, pid=None):
2929
if pid is not None:
3030
problem = get_object_or_404(Problem, id=pid)
3131

32-
if (not request.user.is_staff and problem.secret) or not (
33-
settings.TJIOI_MODE == problem.contest.tjioi
34-
):
32+
if (
33+
not request.user.is_staff
34+
and (problem.secret or problem.contest.start > timezone.now())
35+
) or not (settings.TJIOI_MODE == problem.contest.tjioi):
3536
return redirect("runtests:submit")
3637

3738
context["problem"] = problem
@@ -43,6 +44,8 @@ def submit_view(request, cid=None, pid=None):
4344
)
4445
if not request.user.is_staff:
4546
problems = problems.filter(secret=False)
47+
if contest.start > timezone.now():
48+
return redirect("runtests:submit")
4649

4750
problems = problems.order_by("id")
4851
context["contest"] = contest
@@ -51,7 +54,7 @@ def submit_view(request, cid=None, pid=None):
5154
else:
5255
problems = Problem.objects.filter(contest__tjioi=settings.TJIOI_MODE)
5356
if not request.user.is_staff:
54-
problems = problems.filter(secret=False)
57+
problems = problems.filter(secret=False, contest__start__lte=timezone.now())
5558

5659
problems = problems.order_by("id")
5760
context["problems"] = problems

0 commit comments

Comments
 (0)