middleware.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. from django.contrib.auth import logout
  2. from django.utils.deprecation import MiddlewareMixin
  3. from .bans import get_request_ip_ban, get_user_ban
  4. from .models import AnonymousUser
  5. from .online import tracker
  6. class RealIPMiddleware(MiddlewareMixin):
  7. def process_request(self, request):
  8. x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
  9. if x_forwarded_for:
  10. request.user_ip = x_forwarded_for.split(',')[0]
  11. else:
  12. request.user_ip = request.META.get('REMOTE_ADDR')
  13. class UserMiddleware(MiddlewareMixin):
  14. def process_request(self, request):
  15. if request.user.is_anonymous:
  16. request.user = AnonymousUser()
  17. elif not request.user.is_staff:
  18. if get_request_ip_ban(request) or get_user_ban(request.user):
  19. logout(request)
  20. request.user = AnonymousUser()
  21. class OnlineTrackerMiddleware(MiddlewareMixin):
  22. def process_request(self, request):
  23. tracker.start_request_tracker(request)
  24. def process_response(self, request, response):
  25. tracker.update_request_tracker(request)
  26. return response