errorpages.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.shortcuts import redirect
  2. from . import get_protected_namespace, protected_admin_view, render
  3. from ..auth import is_admin_session, update_admin_session
  4. # Magic error page used by admin
  5. @protected_admin_view
  6. def _error_page(request, code, message=None):
  7. if is_admin_session(request):
  8. template_pattern = 'misago/admin/errorpages/%s.html' % code
  9. response = render(request, template_pattern, {
  10. 'message': message
  11. }, error_page=True)
  12. response.status_code = code
  13. return response
  14. else:
  15. return redirect('misago:admin:index')
  16. def admin_error_page(f):
  17. def decorator(request, *args, **kwargs):
  18. if get_protected_namespace(request):
  19. update_admin_session(request)
  20. return _error_page(request, *args, **kwargs)
  21. else:
  22. return f(request, *args, **kwargs)
  23. return decorator
  24. # Magic CSRF fail page for Admin
  25. def _csrf_failure(request, reason=""):
  26. if is_admin_session(request):
  27. update_admin_session(request)
  28. response = render(
  29. request, 'misago/admin/errorpages/csrf_failure_authenticated.html',
  30. error_page=True)
  31. else:
  32. response = render(request, 'misago/admin/errorpages/csrf_failure.html')
  33. response.status_code = 403
  34. return response
  35. def admin_csrf_failure(f):
  36. def decorator(request, *args, **kwargs):
  37. if get_protected_namespace(request):
  38. return _csrf_failure(request, *args, **kwargs)
  39. else:
  40. return f(request, *args, **kwargs)
  41. return decorator