Update document signature app to work with new django_gpg changes.
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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),
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user