bloonsworld/app/users/util.py
2025-02-28 20:39:49 +01:00

64 lines
2.0 KiB
Python

from django.contrib.auth import logout
from django.utils import timezone
from bloonsa_game.models import Config
from users.models import Player, Log
actions = Log.Actions
class BloonsaUtil:
def __init__(self):
self.tracking = True
@staticmethod
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(self, request):
if not request.user.is_authenticated:
return
if hasattr(request.user, "player"):
if not hasattr(request.user.player, "bloonsa_config"):
bloonsa_config = Config(player=request.user.player)
bloonsa_config.save()
return request.user.player
ip = self.get_ip(request=request)
player = Player(user=request.user,
creation_ip=ip,
latest_ip=ip)
player.save()
bloonsa_config = Config(player=player)
bloonsa_config.save()
return player
# Update activity timestamp and IP
def tag_player(self, request):
if not self.tracking:
return
if not request and not request.user.is_authenticated:
return
request.user.player.latest_activity = timezone.now()
request.user.player.latest_ip = self.get_ip(request=request)
request.user.player.save()
def log(self, action, note=None, player=None, request=None):
if not self.tracking:
return
if not player:
if not request or not request.user.is_authenticated:
return
player = self.init_player(request=request)
self.tag_player(request=request)
item = Log(player=player,
action=action,
note=note)
item.save()
bloonsa_util = BloonsaUtil()