from django.shortcuts import render, HttpResponse from django.http import HttpResponseBadRequest from django.views.generic import TemplateView from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from bloonsa_game.models import Level from users.models import Player, Bloonsa_LevelRating from users.util import tag_player class CSRFexemptTemplateView(TemplateView): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super().dispatch(*args, **kwargs) class LoadLevel(CSRFexemptTemplateView): def post(self, request, *args, **kwargs): levelId = request.POST.get("levelId") if levelId is None or not levelId.isdigit(): return HttpResponseBadRequest() level = Level.objects.filter(levelId=int(levelId)).first() if level is None: return HttpResponseBadRequest() if request.user.is_authenticated: tag_player(request=request) player = Player.objects.get(user=request.user) player.bloonsa_levelsPlayed.add(level) flashVars = level.getFlashVars(seperator="&") return HttpResponse(flashVars) class RandomLevel(CSRFexemptTemplateView): def post(self, request, *args, **kwargs): level = Level.objects.order_by("?").first() flashVars = level.getFlashVars(seperator="&") if request.user.is_authenticated: tag_player(request=request) player = Player.objects.get(user=request.user) player.bloonsa_levelsPlayed.add(level) return HttpResponse(flashVars) def get(self, request, *args, **kwargs): return self.post(request=request, *args, **kwargs) class CompleteLevel(CSRFexemptTemplateView): def post(self, request, *args, **kwargs): if request.user.is_authenticated: tag_player(request=request) levelId = int(request.POST.get("levelId")) level = Level.objects.get(levelId=levelId) player = Player.objects.get(user=request.user) player.bloonsa_levelsBeaten.add(level) # Sending empty content means error in as3 return HttpResponse(content="GG", status=200) class RateLevel(CSRFexemptTemplateView): def post(self, request, *args, **kwargs): if request.user.is_authenticated: tag_player(request=request) rating = int(request.POST.get("rating")) levelId = int(request.POST.get("levelId")) level = Level.objects.get(levelId=levelId) player = Player.objects.get(user=request.user) ratingObject = Bloonsa_LevelRating.objects.filter(player=player, level=level).first() if ratingObject: ratingObject.rating = rating ratingObject.save() return HttpResponse(content="OK", status=200) else: rating = Bloonsa_LevelRating.objects.create(player=player, level=level, rating=rating) rating.save() return HttpResponse(content="OK", status=200) return HttpResponse(status=400)