diff --git a/mayan/apps/document_signatures/hooks.py b/mayan/apps/document_signatures/hooks.py index 0065d2c425..8443e66adc 100644 --- a/mayan/apps/document_signatures/hooks.py +++ b/mayan/apps/document_signatures/hooks.py @@ -4,33 +4,37 @@ import io import logging from django.apps import apps -from django_gpg.exceptions import GPGDecryptionError -from django_gpg.runtime import gpg +from django_gpg.exceptions import DecryptionError logger = logging.getLogger(__name__) -def document_pre_open_hook(descriptor, instance): +def document_pre_open_hook(file_object, instance): logger.debug('instance: %s', instance) DocumentVersionSignature = apps.get_model( app_label='document_signatures', model_name='DocumentVersionSignature' ) + Key = apps.get_model( + app_label='django_gpg', model_name='Key' + ) + if DocumentVersionSignature.objects.has_embedded_signature(document_version=instance): # If it has an embedded signature, decrypt try: - result = gpg.decrypt_file(descriptor, close_descriptor=False) + result = Key.objects.decrypt_file(file_object=file_object) # gpg return a string, turn it into a file like object - except GPGDecryptionError: + except DecryptionError: # At least return the original raw content - descriptor.seek(0) - return descriptor + file_object.seek(0) + return file_object else: - descriptor.close() - return io.BytesIO(result.data) + file_object.close() + return io.BytesIO(result) + #return result else: - return descriptor + return file_object def document_version_post_save_hook(instance): diff --git a/mayan/apps/document_signatures/managers.py b/mayan/apps/document_signatures/managers.py index c03e2b5699..4b9e64b673 100644 --- a/mayan/apps/document_signatures/managers.py +++ b/mayan/apps/document_signatures/managers.py @@ -4,8 +4,8 @@ import logging from django.db import models -from django_gpg.exceptions import GPGVerificationError -from django_gpg.runtime import gpg +from django_gpg.exceptions import VerificationError +from django_gpg.models import Key logger = logging.getLogger(__name__) @@ -84,8 +84,8 @@ class DocumentVersionSignatureManager(models.Manager): args = (document_version_descriptor,) try: - return gpg.verify_file(*args, fetch_key=False) - except GPGVerificationError: + return Key.objects.verify_file(*args) + except VerificationError: return None finally: document_version_descriptor.close() diff --git a/mayan/apps/document_signatures/models.py b/mayan/apps/document_signatures/models.py index 931bdde8eb..cf1ca82e3b 100644 --- a/mayan/apps/document_signatures/models.py +++ b/mayan/apps/document_signatures/models.py @@ -6,7 +6,8 @@ import uuid from django.db import models from django.utils.translation import ugettext_lazy as _ -from django_gpg.runtime import gpg +from django_gpg.exceptions import DecryptionError +from django_gpg.models import Key from documents.models import DocumentVersion from .managers import DocumentVersionSignatureManager @@ -40,9 +41,13 @@ class DocumentVersionSignature(models.Model): logger.debug('checking for embedded signature') with self.document_version.open(raw=True) as file_object: - self.has_embedded_signature = gpg.has_embedded_signature( - file_object - ) + try: + Key.objects.decrypt_file(file_object=file_object) + except DecryptionError: + self.has_embedded_signature = False + else: + self.has_embedded_signature = True + self.save() def delete_detached_signature_file(self): diff --git a/mayan/apps/document_signatures/views.py b/mayan/apps/document_signatures/views.py index 00c691b9b1..0b443402bd 100644 --- a/mayan/apps/document_signatures/views.py +++ b/mayan/apps/document_signatures/views.py @@ -10,7 +10,7 @@ from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, render_to_response from django.template import RequestContext -from django.template.defaultfilters import force_escape +from django.utils.html import escape from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList @@ -70,11 +70,9 @@ def document_verify(request, document_pk): [ _('Signature ID: %s') % signature.signature_id, _('Signature type: %s') % signature_type, - _('Key ID: %s') % signature.key_id, - _('Timestamp: %s') % datetime.fromtimestamp( - int(signature.sig_timestamp) - ), - _('Signee: %s') % force_escape(getattr(signature, 'username', '')), + _('Key fingerprint: %s') % signature.fingerprint, + _('Timestamp: %s') % signature.date, + _('Signee: %s') % escape(signature.user_id), ] )