More progress

This commit is contained in:
Walter 2025-02-07 07:11:18 +01:00
parent 6f7ebb2d47
commit d07c7f73da
8 changed files with 75 additions and 13 deletions

View File

@ -4,12 +4,8 @@ from django.views.generic import TemplateView
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
import random
import time
# Create your views here.
from bloonsa_game.models import Level
from users.util import tag_player
class CSRFexemptTemplateView(TemplateView):
@ -21,6 +17,7 @@ class CSRFexemptTemplateView(TemplateView):
class LoadLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
tag_player(request=request)
levelNum = request.POST.get("level_num")
if levelNum is None or not levelNum.isdigit():
return HttpResponseBadRequest()
@ -35,19 +32,23 @@ class LoadLevel(CSRFexemptTemplateView):
class RandomLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
tag_player(request=request)
level = Level.objects.order_by("?").first()
flashVars = level.getFlashVars(seperator="&")
return HttpResponse(flashVars)
def get(self, request, *args, **kwargs):
tag_player(request=request)
level = Level.objects.order_by("?").first()
flashVars = level.getFlashVars(seperator="&")
return HttpResponse(flashVars)
class CompleteLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
tag_player(request=request)
pass
class RateLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
tag_player(request=request)
pass

View File

@ -1,7 +1,6 @@
from django.contrib import admin
from .models import Level, Author
# Register your models here.
admin.site.register(Level)
admin.site.register(Author)

View File

@ -1,24 +1,26 @@
from django.contrib.auth.forms import AuthenticationForm
from django.shortcuts import render
from django.views.generic import TemplateView
# Create your views here.
from bloonsa_game.models import Level
from users.util import tag_player
class IndexView(TemplateView):
def get(self, request, *args, **kwargs):
tag_player(request=request)
return render(request, "bloonsa_game/index.html", context={})
class TermsView(TemplateView):
def get(self, request, *args, **kwargs):
tag_player(request=request)
return render(request, "bloonsa_game/terms.html", context={})
class GameView(TemplateView):
def get(self, request, *args, **kwargs):
tag_player(request=request)
if type(kwargs.get("pk")) is int:
level = Level.objects.get(id=kwargs["pk"])
if level:

View File

@ -1,3 +1,5 @@
from django.contrib import admin
# Register your models here.
from .models import Player, User
admin.site.register(Player)

View File

@ -62,4 +62,10 @@ class UserLoginForm(AuthenticationForm):
username = forms.CharField(min_length=3,
max_length=16,
label="Username",
required=True)
required=True)
class Meta:
model = User
fields = [
"username",
]

View File

@ -5,6 +5,8 @@ from django.contrib.auth.models import User
from bloonsa_game.models import Level
class Player(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
# Savedata
@ -20,4 +22,7 @@ class Player(models.Model):
# States
suspended = models.BooleanField(default=False)
banned = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
def __str__(self):
return f"{self.user} - {self.latestIP}"

40
app/users/util.py Normal file
View File

@ -0,0 +1,40 @@
from django.utils import timezone
from users.models import Player
tracking = False
def get_ip(request):
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
if x_forwarded_for:
ip = x_forwarded_for.split(",")[-1].strip()
else:
ip = request.META.get("REMOTE_ADDR")
return ip
# Create a Player object for a User
def init_player(request, user):
if not user.is_authenticated:
return
player = Player.objects.get(user=request.user)
if player:
return
ip = get_ip(request=request)
player = Player(user=user,
creationIP=ip,
latestIP=ip)
player.save()
# Update activity timestamp and IP
def tag_player(request, user=None):
if not tracking:
return
user = user or request.user
if not user.is_authenticated:
return
player = Player.objects.get(user=request.user)
if not player:
init_player(request=request, user=user)
player.latestActivity = timezone.now()
player.latestIP = get_ip(request=request)
player.save()

View File

@ -4,6 +4,8 @@ from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from users.forms import UserRegisterForm, UserLoginForm
from users.models import Player
from users.util import init_player, tag_player
class LoginView(TemplateView):
@ -16,7 +18,9 @@ class LoginView(TemplateView):
form = UserLoginForm(data=request.POST)
if not form.is_valid():
return render(request=request, template_name="users/login.html", context={"form": form})
login(request=request, user=form.get_user())
user = form.get_user()
init_player(request=request, user=user)
login(request=request, user=user)
return redirect("bloonsa_game:game")
@ -30,7 +34,9 @@ class RegisterView(TemplateView):
form = UserRegisterForm(request.POST)
if not form.is_valid():
return render(request=request, template_name="users/register.html", context={"form": form})
login(request=request, user=form.save())
user = form.save()
init_player(request=request, user=user)
login(request=request, user=user)
return redirect("bloonsa_game:game")
@ -39,6 +45,7 @@ class LogoutView(TemplateView):
def get(self, request, *args, **kwargs):
if request.user.is_authenticated:
tag_player(request=request)
logout(request)
return redirect("bloonsa_game:game")