# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
from datetime import datetime
+import json
import os
import logging
from time import mktime
from django.conf import settings
from django.urls import reverse
from django import http
-from django.http import Http404, HttpResponseForbidden
+from django.http import Http404, HttpResponse, HttpResponseForbidden, HttpResponseBadRequest
from django.middleware.gzip import GZipMiddleware
from django.utils.decorators import decorator_from_middleware
from django.utils.formats import localize
MAX_LAST_DOCS = 10
+class HttpResponseLengthRequired(HttpResponse):
+ status_code = 411
+
+
@never_cache
def editor(request, slug, chunk=None, template_name='wiki/document_details.html'):
try:
return HttpResponseForbidden("Not authorized.")
if request.method == 'POST':
+ # Check length to reject broken request.
+ try:
+ expected_cl = int(request.META['CONTENT_LENGTH'])
+ except:
+ return HttpResponseLengthRequired(json.dumps(
+ {"__message": _("Content length required.")}
+ ))
+ # 411 if missing
+ cl = len(request.body)
+ if cl != expected_cl:
+ return HttpResponseBadRequest(json.dumps(
+ {"__message": _("Wrong content length, request probably interrupted.")}
+ ))
+
form = forms.DocumentTextSaveForm(request.POST, user=request.user, prefix="textsave")
if form.is_valid():
if request.user.is_authenticated:
@never_cache
-def scans_list(request, pk):
- bs = get_object_or_404(sources.models.BookSource, pk=pk)
+def scans_list(request, pks):
+ pks = pks.split(',')
+ bss = [
+ get_object_or_404(sources.models.BookSource, pk=pk)
+ for pk in pks
+ ]
def map_to_url(filename):
return quote(("%s/%s" % (settings.MEDIA_URL, filename)))
- images = [
- {
- "url": map_to_url(f),
- } for f in bs.get_view_files()
- ]
+ images = []
+ for bs in bss:
+ images.extend([
+ {
+ "url": map_to_url(f),
+ } for f in bs.get_view_files()
+ ])
return JSONResponse(images)