decorators.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from django.conf import settings
  2. from django.core.exceptions import PermissionDenied
  3. from django.shortcuts import redirect
  4. from django.utils.translation import ugettext as _
  5. from misago.core.exceptions import Banned
  6. from .bans import get_request_ip_ban
  7. from .models import Ban
  8. def deny_authenticated(f):
  9. def decorator(request, *args, **kwargs):
  10. if request.user.is_authenticated:
  11. raise PermissionDenied(_("This page is not available to signed in users."))
  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.GET.get('ref') == 'login':
  19. return redirect(settings.LOGIN_REDIRECT_URL)
  20. raise PermissionDenied(_("You have to sign in to access this page."))
  21. else:
  22. return f(request, *args, **kwargs)
  23. return decorator
  24. def deny_banned_ips(f):
  25. def decorator(request, *args, **kwargs):
  26. ban = get_request_ip_ban(request)
  27. if ban:
  28. hydrated_ban = Ban(
  29. check_type=Ban.IP, user_message=ban['message'], expires_on=ban['expires_on']
  30. )
  31. raise Banned(hydrated_ban)
  32. else:
  33. return f(request, *args, **kwargs)
  34. return decorator