コード例 #1
0
ファイル: puzzle.py プロジェクト: Bjwebb/CUCaTS-Puzzlehunt
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")
コード例 #2
0
ファイル: __init__.py プロジェクト: Bjwebb/CUCaTS-Puzzlehunt
 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) 
コード例 #3
0
 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)
コード例 #4
0
ファイル: puzzle.py プロジェクト: Bjwebb/CUCaTS-Puzzlehunt
    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
コード例 #5
0
ファイル: __init__.py プロジェクト: Bjwebb/CUCaTS-Puzzlehunt
 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
コード例 #6
0
 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
コード例 #7
0
 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
コード例 #8
0
    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})
コード例 #9
0
 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})
コード例 #10
0
ファイル: __init__.py プロジェクト: Bjwebb/CUCaTS-Puzzlehunt
 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)
コード例 #11
0
 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)