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