Improved, simplified and optimized the document signature verification model and manager
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user