def post(self, request, *args, **kwargs): if "emptybackground" in request.POST: p = PdfFileWriter() try: p.addBlankPage( width=float(request.POST.get('width')) * mm, height=float(request.POST.get('height')) * mm, ) except ValueError: return JsonResponse({ "status": "error", "error": "Invalid height/width given." }) buffer = BytesIO() p.write(buffer) buffer.seek(0) c = CachedFile(web_download=True) c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.save() c.file.save('empty.pdf', ContentFile(buffer.read())) c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('control:pdf.background', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) if "background" in request.FILES: error, fileobj = self.process_upload() if error: return JsonResponse({"status": "error", "error": error}) c = CachedFile(web_download=True) c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.file = fileobj c.save() c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('control:pdf.background', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) cf = None if request.POST.get("background", "").strip(): try: cf = CachedFile.objects.get(id=request.POST.get("background")) except CachedFile.DoesNotExist: pass if "preview" in request.POST: with rolledback_transaction(), language( request.event.settings.locale, request.event.settings.region): p = self._get_preview_position() fname, mimet, data = self.generate( p, override_layout=(json.loads(self.request.POST.get("data")) if self.request.POST.get("data") else None), override_background=cf.file if cf else None) resp = HttpResponse(data, content_type=mimet) ftype = fname.split(".")[-1] if settings.DEBUG: # attachment is more secure as we're dealing with user-generated stuff here, but inline is much more convenient during debugging resp[ 'Content-Disposition'] = 'inline; filename="ticket-preview.{}"'.format( ftype) resp._csp_ignore = True else: resp[ 'Content-Disposition'] = 'attachment; filename="ticket-preview.{}"'.format( ftype) return resp elif "data" in request.POST: if cf: self.save_background(cf) self.save_layout() return JsonResponse({'status': 'ok'}) return HttpResponseBadRequest()