def function(request, pk): puzzle = Puzzle.objects.get(pk=pk) test_puzzle_access(request.user, puzzle) team = get_team(request.user) if puzzle.function == '': raise Http404 else: exec puzzle.function return HttpResponse(json.dumps(out), mimetype="application/json")
def post(self, request): if self.request.user.is_staff: team = Team.objects.get(pk=int(self.request.GET['team'])) message = Message(team=team, text=request.POST["msg"], judges=True) message.save() else: team = get_team(self.request.user) if team is not None: message = Message(team=team, text=request.POST["msg"], judges=False) message.save() return self.get(request)
def get_context_data(self, **kwargs): test_puzzle_access(self.request.user, self.object) team = get_team(self.request.user) context = super(PuzzleView, self).get_context_data(**kwargs) guess_text = None if "guess" in self.request.POST: guess_text = self.request.POST["guess"] if "guess" in self.request.GET: guess_text = self.request.GET["guess"] if 'xhr' in self.request.GET: guess = Guess(puzzle=self.object, team=team, text=guess_text, submitted=False, pagehit=self.request.pagehit) guess.save() return [] if guess_text: context['submitted'] = True if re.match("^" + self.object.solution + "$", guess_text): context['correct'] = True if team: team.puzzles_completed.add(self.object) team.nodes_visible.add( *secret.puzzle_child_nodes(self.object)) else: context['correct'] = False guess = Guess(puzzle=self.object, team=team, text=guess_text, submitted=True, correct=context['correct'], pagehit=self.request.pagehit) guess.save() context["completed"] = (self.request.user.is_staff or (self.object in team.puzzles_completed.all())) context["quotes"] = [ q.split('--') for q in self.object.quotes.split('\n') ] context["teampuzzle"] = None if team: try: context["teampuzzle"] = TeamPuzzle.objects.get( puzzle=self.object, team=team) except TeamPuzzle.DoesNotExist: pass return context
def get_queryset(self): if self.request.user.is_staff: if 'team' in self.request.GET: self.team = Team.objects.get(pk=int(self.request.GET['team'])) else: self.team = None queryset = Team.objects.extra( select={'unread_message_count': 'SELECT COUNT(*) FROM main_message WHERE main_message.team_id=main_team.id AND main_message.read=false AND main_message.judges=false'}) return queryset else: self.team = get_team(self.request.user) queryset = self.model.objects.filter(team=self.team).order_by('time') if self.request.user.is_staff: queryset.filter(judges=False).update(read=True) else: queryset.filter(judges=True).update(read=True) return queryset
def process_request(self, request): if request.user.is_authenticated(): user = request.user else: user = None if not request.path.startswith( '/track') and not request.path.startswith('/liveapi'): if 'xhr' in request.GET and 'ph' in request.GET: ph = PageHit.objects.get(pk=request.GET['ph']) if ph.user == user: request.pagehit = ph return None ph = PageHit(user=user, team=get_team(user), page=request.path, judge=False if not user else user.is_staff) ph.save() request.pagehit = ph return None
def get_queryset(self): if self.request.user.is_staff: if 'team' in self.request.GET: self.team = Team.objects.get(pk=int(self.request.GET['team'])) else: self.team = None queryset = Team.objects.extra( select={ 'unread_message_count': 'SELECT COUNT(*) FROM main_message WHERE main_message.team_id=main_team.id AND main_message.read=false AND main_message.judges=false' }) return queryset else: self.team = get_team(self.request.user) queryset = self.model.objects.filter(team=self.team).order_by('time') if self.request.user.is_staff: queryset.filter(judges=False).update(read=True) else: queryset.filter(judges=True).update(read=True) return queryset
def process_request(self, request): try: HUNT = Hunt.objects.filter(active=True).values()[0] team = get_team(request.user) if HUNT["start"] > datetime.now(): message = "This part of the site locked until the hunt begins." elif HUNT["end"] < datetime.now(): message = "The hunt is now over, the site is locked until we announce results." elif team and not team.active: message = "Your team is currently disabled from viewing and solving puzzles. If this is unexpected please message the judges." else: return None except IndexError: message = "An error has occured, and the site is locked. Please inform the judges of this." if request.user.is_staff: return None else: if re.match("/$|/messages|/teams|/accounts|/admin", request.path): return None else: return render(request, "locked.html", {"text": message})
def process_request(self, request): try: HUNT = Hunt.objects.filter(active=True).values()[0] team = get_team(request.user) if HUNT["start"] > datetime.now(): message = "This part of the site locked until the hunt begins." elif HUNT["end"] < datetime.now(): message = "The hunt is now over, the site is locked until we announce results." elif team and not team.active: message = "Your team is currently disabled from viewing and solving puzzles. If this is unexpected please message the judges." else: return None except IndexError: message = "An error has occured, and the site is locked. Please inform the judges of this." if request.user.is_staff: return None else: if re.match("/$|/messages|/teams|/accounts|/admin", request.path): return None else: return render(request, "locked.html", {"text":message})
def get(self, request): team = get_team(self.request.user) if team: for announcement in self.queryset.exclude(teams_read=team): announcement.teams_read.add(team) return super(HomeView, self).get(self, request)