More progress
This commit is contained in:
parent
6f7ebb2d47
commit
d07c7f73da
@ -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
|
||||
|
||||
@ -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)
|
||||
@ -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:
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from .models import Player, User
|
||||
|
||||
admin.site.register(Player)
|
||||
|
||||
@ -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",
|
||||
]
|
||||
@ -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
40
app/users/util.py
Normal 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()
|
||||
@ -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")
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user