errorpages.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.shortcuts import redirect
  2. from misago.admin.auth import is_admin_session, update_admin_session
  3. from . import get_protected_namespace, protected_admin_view, render
  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, {'message': message}, error_page=True)
  10. response.status_code = code
  11. return response
  12. else:
  13. return redirect('misago:admin:index')
  14. def admin_error_page(f):
  15. def decorator(request, *args, **kwargs):
  16. if get_protected_namespace(request):
  17. update_admin_session(request)
  18. return _error_page(request, *args, **kwargs)
  19. else:
  20. return f(request, *args, **kwargs)
  21. return decorator
  22. # Magic CSRF fail page for Admin
  23. def _csrf_failure(request, reason=""):
  24. if is_admin_session(request):
  25. update_admin_session(request)
  26. response = render(
  27. request, 'misago/admin/errorpages/csrf_failure_authenticated.html', error_page=True
  28. )
  29. else:
  30. response = render(request, 'misago/admin/errorpages/csrf_failure.html')
  31. response.status_code = 403
  32. return response
  33. def admin_csrf_failure(f):
  34. def decorator(request, *args, **kwargs):
  35. if get_protected_namespace(request):
  36. return _csrf_failure(request, *args, **kwargs)
  37. else:
  38. return f(request, *args, **kwargs)
  39. return decorator