Update document signature app to work with new django_gpg changes.

This commit is contained in:
Roberto Rosario
2016-03-23 19:57:45 -04:00
parent e96f748439
commit c8f7c4ef86
4 changed files with 31 additions and 24 deletions

View File

@@ -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):

View File

@@ -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()

View File

@@ -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):

View File

@@ -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),
]
)