decorators.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import gettext_lazy as _
  3. from misago.users.bans import get_request_ip_ban
  4. def deny_authenticated(f):
  5. def decorator(request, *args, **kwargs):
  6. if request.user.is_authenticated():
  7. if request.is_ajax():
  8. message = _("This action is not available to signed in users.")
  9. else:
  10. message = _("This page is not available to signed in users.")
  11. raise PermissionDenied(message)
  12. else:
  13. return f(request, *args, **kwargs)
  14. return decorator
  15. def deny_guests(f):
  16. def decorator(request, *args, **kwargs):
  17. if request.user.is_anonymous():
  18. if request.is_ajax():
  19. message = _("This action is not available to guests.")
  20. else:
  21. message = _("This page is not available to guests.")
  22. raise PermissionDenied(message)
  23. else:
  24. return f(request, *args, **kwargs)
  25. return decorator
  26. def deny_banned_ips(f):
  27. def decorator(request, *args, **kwargs):
  28. ban = get_request_ip_ban(request)
  29. if ban:
  30. default_message = _("Your IP address has been banned.")
  31. ban_message = ban.get('message') or default_message
  32. if ban.get('expires'):
  33. ban_expires = ban['formatted_expiration_date']
  34. expiration_message = _("This ban will end on %(date)s.")
  35. expiration_message = expiration_message % {'date': ban_expires}
  36. ban_message = '%s\n\n%s' % (ban_message, expiration_message)
  37. raise PermissionDenied(ban_message)
  38. else:
  39. return f(request, *args, **kwargs)
  40. return decorator