mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-28 20:41:46 +00:00
middleware for displaying 413 page
When a RequestDataTooBig exception is thrown, users are largely in the dark about what happened and how it can be fixed. This commit resolves this by inserting middleware to redirect the request to a custom 413 error page. This exception is thrown when DATA_UPLOAD_MAX_MEMORY_SIZE is exceeded. The default value is 2.5MB. Fixes #2340 Fixes #2633
This commit is contained in:
parent
06568aab88
commit
a7fcd898c2
4 changed files with 48 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
||||||
""" look at all this nice middleware! """
|
""" look at all this nice middleware! """
|
||||||
from .timezone_middleware import TimezoneMiddleware
|
from .timezone_middleware import TimezoneMiddleware
|
||||||
from .ip_middleware import IPBlocklistMiddleware
|
from .ip_middleware import IPBlocklistMiddleware
|
||||||
|
from .file_too_big import FileTooBig
|
||||||
|
|
30
bookwyrm/middleware/file_too_big.py
Normal file
30
bookwyrm/middleware/file_too_big.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
"""Middleware to display a custom 413 error page"""
|
||||||
|
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.shortcuts import render
|
||||||
|
from django.core.exceptions import RequestDataTooBig
|
||||||
|
|
||||||
|
|
||||||
|
class FileTooBig:
|
||||||
|
"""Middleware to display a custom page when a
|
||||||
|
RequestDataTooBig exception is thrown"""
|
||||||
|
|
||||||
|
def __init__(self, get_response):
|
||||||
|
"""boilerplate __init__ from Django docs"""
|
||||||
|
|
||||||
|
self.get_response = get_response
|
||||||
|
|
||||||
|
def __call__(self, request):
|
||||||
|
"""If RequestDataTooBig is thrown, render the 413 error page"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
body = request.body # pylint: disable=unused-variable
|
||||||
|
|
||||||
|
except RequestDataTooBig:
|
||||||
|
|
||||||
|
rendered = render(request, "413.html")
|
||||||
|
response = HttpResponse(rendered)
|
||||||
|
return response
|
||||||
|
|
||||||
|
response = self.get_response(request)
|
||||||
|
return response
|
|
@ -119,6 +119,7 @@ MIDDLEWARE = [
|
||||||
"bookwyrm.middleware.IPBlocklistMiddleware",
|
"bookwyrm.middleware.IPBlocklistMiddleware",
|
||||||
"django.contrib.messages.middleware.MessageMiddleware",
|
"django.contrib.messages.middleware.MessageMiddleware",
|
||||||
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||||
|
"bookwyrm.middleware.FileTooBig",
|
||||||
]
|
]
|
||||||
|
|
||||||
ROOT_URLCONF = "bookwyrm.urls"
|
ROOT_URLCONF = "bookwyrm.urls"
|
||||||
|
|
16
bookwyrm/templates/413.html
Normal file
16
bookwyrm/templates/413.html
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{% extends 'layout.html' %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}{% trans "File too large" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="block">
|
||||||
|
<h1 class="title">{% trans "File too large" %}</h1>
|
||||||
|
<p class="content">{% trans "The file you are uploading is too large." %}</p>
|
||||||
|
<p class="content">
|
||||||
|
{% blocktrans %}
|
||||||
|
You you can try using a smaller file, or ask your BookWyrm server administrator to increase the <code>DATA_UPLOAD_MAX_MEMORY_SIZE</code> setting.
|
||||||
|
{% endblocktrans %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue