middleware.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import pytz
  2. from django.contrib.auth import logout
  3. from django.contrib.auth.models import AnonymousUser as DjAnonymousUser
  4. from .bans import get_request_ip_ban, get_user_ban
  5. from .models import AnonymousUser, Online
  6. from .online import tracker
  7. class RealIPMiddleware(object):
  8. def process_request(self, request):
  9. x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
  10. if x_forwarded_for:
  11. request.user_ip = x_forwarded_for.split(',')[0]
  12. else:
  13. request.user_ip = request.META.get('REMOTE_ADDR')
  14. class UserMiddleware(object):
  15. def process_request(self, request):
  16. if request.user.is_anonymous():
  17. request.user = AnonymousUser()
  18. elif not request.user.is_staff:
  19. if get_request_ip_ban(request) or get_user_ban(request.user):
  20. logout(request)
  21. request.user = AnonymousUser()
  22. class OnlineTrackerMiddleware(object):
  23. def process_request(self, request):
  24. if request.user.is_authenticated():
  25. try:
  26. request._misago_online_tracker = request.user.online_tracker
  27. except Online.DoesNotExist:
  28. tracker.start_tracking(request, request.user)
  29. else:
  30. request._misago_online_tracker = None
  31. def process_response(self, request, response):
  32. if hasattr(request, '_misago_online_tracker'):
  33. online_tracker = request._misago_online_tracker
  34. if online_tracker:
  35. if request.user.is_anonymous():
  36. tracker.stop_tracking(request, online_tracker)
  37. else:
  38. tracker.update_tracker(request, online_tracker)
  39. return response