Improved, simplified and optimized the document signature verification model and manager

This commit is contained in:
Roberto Rosario
2012-01-03 06:55:08 -04:00
parent 6a8c86b0a4
commit 4ded57f27d
7 changed files with 478 additions and 67 deletions

View File

@@ -9,35 +9,31 @@ logger = logging.getLogger(__name__)
class DocumentVersionSignatureManager(models.Manager):
#def update_signed_state(self, document):
# document_signature, created = self.model.get_or_create(
# document_version=document.latest_version,
# )
# if document.exists():
# descriptor = document.open()
# try:
# document_signature.signature_state = gpg.verify_file(descriptor).status
# # TODO: give use choice for auto public key fetch?
# # OR maybe new config option
# except GPGVerificationError:
# document_signature.signature_state = None
# finally:
# document_signature.save()
def add_detached_signature(self, document, detached_signature):
def get_document_signature(self, document):
document_signature, created = self.model.objects.get_or_create(
document_version=document.latest_version,
)
if not self.signature_state(document):
return document_signature
def add_detached_signature(self, document, detached_signature):
document_signature = self.get_document_signature(document)
if document_signature.has_embedded_signature:
raise Exception('document already has an embedded signature')
else:
if document_signature.signature_file:
logger.debug('Existing detached signature')
document_signature.delete_detached_signature()
document_signature.signature_file = None
document_signature.save()
document_signature.signature_file = detached_signature
document_signature.save()
else:
raise Exception('document already has an embedded signature')
def has_detached_signature(self, document):
document_signature, created = self.model.objects.get_or_create(
document_version=document.latest_version,
)
document_signature = self.get_document_signature(document)
if document_signature.signature_file:
return True
else:
@@ -46,36 +42,13 @@ class DocumentVersionSignatureManager(models.Manager):
def has_embedded_signature(self, document):
logger.debug('document: %s' % document)
if self.signature_state(document):
return True
else:
return False
def signature_state(self, document):
document_signature, created = self.model.objects.get_or_create(
document_version=document.latest_version,
)
logger.debug('created: %s' % created)
if created and document.exists():
descriptor = document.open(raw=True)
try:
document_signature.signature_state = gpg.verify_file(descriptor).status
# TODO: give use choice for auto public key fetch?
# OR maybe new config option
except GPGVerificationError:
document_signature.signature_state = None
finally:
document_signature.save()
#document_signature.signature_state = self.verify_signature(document).status
#document_signature.save()
return document_signature.signature_state
document_signature = self.get_document_signature(document)
return document_signature.has_embedded_signature
def detached_signature(self, document):
document_signature, created = self.model.objects.get_or_create(
document_version=document.latest_version,
)
document_signature = self.get_document_signature(document)
return document_signature.signature_file.storage.open(document_signature.signature_file.path)
def verify_signature(self, document):