decorators.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from django.utils.translation import ugettext as _
  2. from misago.acl.exceptions import ACLError403, ACLError404
  3. from misago.apps.errors import error403, error404, error_banned
  4. def acl_errors(f):
  5. def decorator(*args, **kwargs):
  6. try:
  7. return f(*args, **kwargs)
  8. except ACLError403 as e:
  9. return error403(args[0], e.message)
  10. except ACLError404 as e:
  11. return error404(args[0], e.message)
  12. return decorator
  13. def block_authenticated(f):
  14. def decorator(*args, **kwargs):
  15. request = args[0]
  16. if not request.firewall.admin and request.user.is_authenticated():
  17. from misago.views import error403
  18. return error403(request, _("%(username)s, this page is not available to signed in users.") % {'username': request.user.username})
  19. return f(*args, **kwargs)
  20. return decorator
  21. def block_banned(f):
  22. def decorator(*args, **kwargs):
  23. request = args[0]
  24. try:
  25. if request.ban.is_banned():
  26. from misago.banning.views import error_banned
  27. return error_banned(request);
  28. return f(*args, **kwargs)
  29. except AttributeError:
  30. pass
  31. return f(*args, **kwargs)
  32. return decorator
  33. def block_crawlers(f):
  34. def decorator(*args, **kwargs):
  35. request = args[0]
  36. if request.user.is_crawler():
  37. return error403(request)
  38. return f(*args, **kwargs)
  39. return decorator
  40. def block_guest(f):
  41. def decorator(*args, **kwargs):
  42. request = args[0]
  43. if not request.user.is_authenticated():
  44. from misago.views import error403
  45. return error403(request, _("Dear Guest, only signed in members are allowed to access this page. Please sign in or register and try again."))
  46. return f(*args, **kwargs)
  47. return decorator
  48. def block_jammed(f):
  49. def decorator(*args, **kwargs):
  50. request = args[0]
  51. try:
  52. if not request.firewall.admin and request.jam.is_jammed():
  53. return error403(request, _("You have used up allowed attempts quota and we temporarily banned you from accessing this page."))
  54. except AttributeError:
  55. pass
  56. return f(*args, **kwargs)
  57. return decorator
  58. def check_csrf(f):
  59. def decorator(*args, **kwargs):
  60. request = args[0]
  61. if not request.csrf.request_secure(request):
  62. from misago.views import error403
  63. return error403(request, _("Request authorization is invalid. Please try again."))
  64. return f(*args, **kwargs)
  65. return decorator