# 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:
"description": change.description,
"author": change.author_str(),
"date": localize(change.created_at),
- "publishable": _("Publishable") + "\n" if change.publishable else "",
+ "publishable": change.publishable,
"tag": ',\n'.join(str(tag) for tag in change.tags.all()),
"published": _("Published") + ": " + \
localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp) \