middleware.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from django.conf import settings
  2. from django.contrib.auth import logout
  3. from django.contrib.auth.models import AnonymousUser as DjAnonymousUser
  4. from django.core.urlresolvers import resolve
  5. from misago.users.bans import get_request_ip_ban, get_user_ban
  6. from misago.users.models import AnonymousUser, Online
  7. from misago.users.online import tracker
  8. class RealIPMiddleware(object):
  9. def process_request(self, request):
  10. x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
  11. if x_forwarded_for:
  12. request._misago_real_ip = x_forwarded_for.split(',')[0]
  13. else:
  14. request._misago_real_ip = request.META.get('REMOTE_ADDR')
  15. class AvatarServerMiddleware(object):
  16. def process_request(self, request):
  17. if request.path_info.startswith(settings.MISAGO_AVATAR_SERVER_PATH):
  18. request.user = DjAnonymousUser()
  19. resolved_path = resolve(request.path_info)
  20. return resolved_path.func(request, **resolved_path.kwargs)
  21. class UserMiddleware(object):
  22. def process_request(self, request):
  23. if request.user.is_anonymous():
  24. request.user = AnonymousUser()
  25. elif not request.user.is_superuser:
  26. if get_request_ip_ban(request) or get_user_ban(request.user):
  27. logout(request)
  28. request.user.ip = request._misago_real_ip
  29. request.preloaded_ember_data.update({
  30. 'isAuthenticated': request.user.is_authenticated(),
  31. })
  32. if request.user.is_authenticated():
  33. request.preloaded_ember_data.update({
  34. 'user': {
  35. 'username': request.user.username,
  36. 'isAuthenticated': True,
  37. 'isAnonymous': False
  38. }
  39. })
  40. else:
  41. request.preloaded_ember_data.update({
  42. 'user': {
  43. 'isAuthenticated': False,
  44. 'isAnonymous': True
  45. }
  46. })
  47. class OnlineTrackerMiddleware(object):
  48. def process_request(self, request):
  49. if request.user.is_authenticated():
  50. try:
  51. request._misago_online_tracker = request.user.online_tracker
  52. except Online.DoesNotExist:
  53. tracker.start_tracking(request, request.user)
  54. else:
  55. request._misago_online_tracker = None
  56. def process_response(self, request, response):
  57. if hasattr(request, '_misago_online_tracker'):
  58. online_tracker = request._misago_online_tracker
  59. if online_tracker:
  60. if request.user.is_anonymous():
  61. tracker.stop_tracking(request, online_tracker)
  62. else:
  63. tracker.update_tracker(request, online_tracker)
  64. return response