1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from django.contrib.auth import logout
- from django.utils.deprecation import MiddlewareMixin
- from .bans import get_request_ip_ban, get_user_ban
- from .models import AnonymousUser, Online
- from .online import tracker
- class RealIPMiddleware(MiddlewareMixin):
- def process_request(self, request):
- x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
- if x_forwarded_for:
- request.user_ip = x_forwarded_for.split(",")[0]
- else:
- request.user_ip = request.META.get("REMOTE_ADDR")
- class UserMiddleware(MiddlewareMixin):
- def process_request(self, request):
- if request.user.is_anonymous:
- request.user = AnonymousUser()
- elif not request.user.is_staff:
- if get_request_ip_ban(request) or get_user_ban(
- request.user, request.cache_versions
- ):
- logout(request)
- request.user = AnonymousUser()
- class OnlineTrackerMiddleware(MiddlewareMixin):
- def process_request(self, request):
- if request.user.is_authenticated:
- try:
- request._misago_online_tracker = request.user.online_tracker
- except Online.DoesNotExist:
- tracker.start_tracking(request, request.user)
- else:
- request._misago_online_tracker = None
- def process_response(self, request, response):
- if hasattr(request, "_misago_online_tracker"):
- online_tracker = request._misago_online_tracker
- if online_tracker:
- if request.user.is_anonymous:
- tracker.stop_tracking(request, online_tracker)
- else:
- tracker.update_tracker(request, online_tracker)
- return response
|