From f4d9a99048117d085ef186f48296c527c5886c00 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 4 Nov 2021 22:04:55 +0100
Subject: [PATCH] Add API view for accessing the PDF file of live documents

(cherry picked from commit a43f2d7bc566ff422f319973408ba96b42a0f0da)
---
 aleksis/apps/resint/urls.py  |  6 ++++++
 aleksis/apps/resint/views.py | 18 ++++++++++++++----
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/aleksis/apps/resint/urls.py b/aleksis/apps/resint/urls.py
index f72aee8..aac33a3 100644
--- a/aleksis/apps/resint/urls.py
+++ b/aleksis/apps/resint/urls.py
@@ -5,6 +5,7 @@ from .views import (
     LiveDocumentDeleteView,
     LiveDocumentEditView,
     LiveDocumentListView,
+    LiveDocumentShowAPIView,
     LiveDocumentShowView,
     PosterCurrentView,
     PosterDeleteView,
@@ -42,4 +43,9 @@ urlpatterns = [
     path(
         "live_documents/<str:slug>.pdf", LiveDocumentShowView.as_view(), name="show_live_document",
     ),
+    path(
+        "api/live_documents/<str:slug>.pdf",
+        LiveDocumentShowAPIView.as_view(),
+        name="api_show_live_document",
+    ),
 ]
diff --git a/aleksis/apps/resint/views.py b/aleksis/apps/resint/views.py
index abef233..fcc50f0 100644
--- a/aleksis/apps/resint/views.py
+++ b/aleksis/apps/resint/views.py
@@ -15,6 +15,7 @@ from django.views.generic.list import ListView
 
 from django_tables2 import SingleTableView
 from guardian.shortcuts import get_objects_for_user
+from oauth2_provider.views.mixins import ClientProtectedResourceMixin
 from reversion.views import RevisionMixin
 from rules.contrib.views import PermissionRequiredMixin
 
@@ -221,15 +222,24 @@ class LiveDocumentDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDel
     success_message = _("The live document has been deleted.")
 
 
-class LiveDocumentShowView(PermissionRequiredMixin, SingleObjectMixin, View):
-    """Show the current version of the live document."""
+class LiveDocumentShowBaseView(SingleObjectMixin, View):
+    """Base view for showing live documents."""
 
     model = LiveDocument
-    permission_required = "resint.view_livedocument_rule"
 
     def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> FileResponse:
         live_document = self.get_object()
         file = live_document.get_current_file()
         if not file:
             raise Http404
-        return FileResponse(file.file, content_type="application/pdf")
+        return FileResponse(file, content_type="application/pdf")
+
+
+class LiveDocumentShowView(PermissionRequiredMixin, LiveDocumentShowBaseView):
+    """Show the current version of the live document."""
+
+    permission_required = "resint.view_livedocument_rule"
+
+
+class LiveDocumentShowAPIView(ClientProtectedResourceMixin, LiveDocumentShowBaseView):
+    """Show the current version of the live document in API."""
-- 
GitLab