middleware.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from django.utils import timezone
  2. from misago.users.models import AnonymousUser, Online
  3. class RealIPMiddleware(object):
  4. def process_request(self, request):
  5. x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
  6. if x_forwarded_for:
  7. request._misago_real_ip = x_forwarded_for.split(',')[0]
  8. else:
  9. request._misago_real_ip = request.META.get('REMOTE_ADDR')
  10. class UserMiddleware(object):
  11. def process_request(self, request):
  12. if request.user.is_anonymous():
  13. request.user = AnonymousUser()
  14. class OnlineTrackerMiddleware(object):
  15. def process_request(self, request):
  16. if request.user.is_authenticated():
  17. try:
  18. request._misago_online_tracker = request.user.online_tracker
  19. except Online.DoesNotExist:
  20. online_tracker = Online.objects.create(
  21. user=request.user, current_ip=request._misago_real_ip)
  22. request.user.online_tracker = online_tracker
  23. request._misago_online_tracker = online_tracker
  24. else:
  25. request._misago_online_tracker = None
  26. def process_response(self, request, response):
  27. if hasattr(request, '_misago_online_tracker'):
  28. tracker = request._misago_online_tracker
  29. if tracker:
  30. if request.user.is_anonymous():
  31. # User logged off, update his last visit and blam tracker
  32. user = tracker.user
  33. user.last_active = tracker.last_click
  34. user.last_ip = tracker.current_ip
  35. user.save(update_fields=['last_active', 'last_ip'])
  36. else:
  37. # Bump user's tracker time
  38. tracker.current_ip = request._misago_real_ip
  39. tracker.last_click = timezone.now()
  40. tracker.save(update_fields=['last_click', 'current_ip'])
  41. return response