decorators.py 1.5 KB

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