decorators.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from django.core.exceptions import PermissionDenied
  2. from django.shortcuts import redirect
  3. from django.utils.translation import gettext as _
  4. from misago.users.bans import get_request_ip_ban
  5. def deny_authenticated(f):
  6. def decorator(request, *args, **kwargs):
  7. if request.user.is_authenticated():
  8. if request.is_ajax():
  9. raise PermissionDenied(
  10. _("This action is not available to signed in users."))
  11. else:
  12. return redirect('misago:index')
  13. else:
  14. return f(request, *args, **kwargs)
  15. return decorator
  16. def deny_guests(f):
  17. def decorator(request, *args, **kwargs):
  18. if request.user.is_anonymous():
  19. if request.is_ajax():
  20. raise PermissionDenied(
  21. _("This action is not available to guests."))
  22. else:
  23. return redirect('misago:index')
  24. else:
  25. return f(request, *args, **kwargs)
  26. return decorator
  27. def deny_banned_ips(f):
  28. def decorator(request, *args, **kwargs):
  29. ban = get_request_ip_ban(request)
  30. if ban:
  31. if request.is_ajax():
  32. raise PermissionDenied(ban.get_serialized_message())
  33. else:
  34. return redirect('misago:index')
  35. else:
  36. return f(request, *args, **kwargs)
  37. return decorator