From aa8789ae31c6f4fb0e8060be5618cf44381db6cd Mon Sep 17 00:00:00 2001 From: jonaswinkler Date: Wed, 16 Dec 2020 21:53:11 +0100 Subject: [PATCH] fix up the migration for encrypted documents and a couple other associated issues. --- src/documents/migrations/1003_mime_types.py | 10 ++++++---- src/documents/views.py | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/documents/migrations/1003_mime_types.py b/src/documents/migrations/1003_mime_types.py index e5e613735..78ecced2b 100644 --- a/src/documents/migrations/1003_mime_types.py +++ b/src/documents/migrations/1003_mime_types.py @@ -30,12 +30,14 @@ def add_mime_types(apps, schema_editor): documents = Document.objects.all() for d in documents: + f = open(source_path(d), "rb") if d.storage_type == STORAGE_TYPE_GPG: - f = GnuPG.decrypted(open(source_path(d), "rb")) - else: - f = open(source_path(d), "rb") - d.mime_type = magic.from_buffer(f.read(1024), mime=True) + data = GnuPG.decrypted(f) + else: + data = f.read(1024) + + d.mime_type = magic.from_buffer(data, mime=True) d.save() f.close() diff --git a/src/documents/views.py b/src/documents/views.py index 36d3445c4..bf31c749b 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -169,7 +169,12 @@ class DocumentViewSet(RetrieveModelMixin, parser_class = get_parser_class_for_mime_type(mime_type) if parser_class: parser = parser_class(logging_group=None) - return parser.extract_metadata(file, mime_type) + + try: + return parser.extract_metadata(file, mime_type) + except Exception as e: + # TODO: cover GPG errors, remove later. + return [] else: return [] @@ -215,7 +220,12 @@ class DocumentViewSet(RetrieveModelMixin, @cache_control(public=False, max_age=315360000) def thumb(self, request, pk=None): try: - return HttpResponse(Document.objects.get(id=pk).thumbnail_file, + doc = Document.objects.get(id=pk) + if doc.storage_type == Document.STORAGE_TYPE_GPG: + handle = GnuPG.decrypted(doc.thumbnail_file) + else: + handle = doc.thumbnail_file + return HttpResponse(handle, content_type='image/png') except (FileNotFoundError, Document.DoesNotExist): raise Http404()