middleware.py 1.4 KB

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