diff --git a/account/views/oj.py b/account/views/oj.py index bc8c9cf3..4aaec7cb 100644 --- a/account/views/oj.py +++ b/account/views/oj.py @@ -396,7 +396,7 @@ class ProfileProblemDisplayIDRefreshAPI(APIView): ids = list(acm_problems.keys()) + list(oi_problems.keys()) if not ids: return self.success() - display_ids = Problem.objects.filter(id__in=ids).values_list("_id", flat=True) + display_ids = Problem.objects.filter(id__in=ids, visible=True).values_list("_id", flat=True) id_map = dict(zip(ids, display_ids)) for k, v in acm_problems.items(): v["_id"] = id_map[k] diff --git a/contest/views/oj.py b/contest/views/oj.py index 44adc020..9db09bfc 100644 --- a/contest/views/oj.py +++ b/contest/views/oj.py @@ -32,7 +32,7 @@ class ContestAPI(APIView): if not id: return self.error("Invalid parameter, id is required") try: - contest = Contest.objects.get(id=id) + contest = Contest.objects.get(id=id, visible=True) except Contest.DoesNotExist: return self.error("Contest does not exist") data = ContestSerializer(contest).data @@ -107,7 +107,7 @@ class ContestRankAPI(APIView): @check_contest_permission(check_type="ranks") def get(self, request): force_refresh = request.GET.get("force_refresh") - is_contest_admin = request.user.is_contest_admin(self.contest) + is_contest_admin = request.user.is_authenticated() and request.user.is_contest_admin(self.contest) if self.contest.rule_type == ContestRuleType.OI: serializer = OIContestRankSerializer else: diff --git a/submission/views/oj.py b/submission/views/oj.py index 3c035015..5d6351b0 100644 --- a/submission/views/oj.py +++ b/submission/views/oj.py @@ -51,7 +51,7 @@ class SubmissionAPI(APIView): hide_id = False if data.get("contest_id"): try: - contest = Contest.objects.get(id=data["contest_id"]) + contest = Contest.objects.get(id=data["contest_id"], visible=True) except Contest.DoesNotExist: return self.error("Contest doesn't exist.") if contest.status == ContestStatus.CONTEST_ENDED: