def sign_document_version(self, document_version, key, passphrase=None, user=None): temporary_file_object, temporary_filename = mkstemp() try: with document_version.open() as file_object: key.sign_file(binary=True, file_object=file_object, output=temporary_filename, passphrase=passphrase) except Exception: raise else: # The result of key.sign_file does not contain the signtarure ID. # Verify the signed file to obtain the signature ID. with open(temporary_filename, mode='rb') as file_object: result = Key.objects.verify_file(file_object=file_object) with open(temporary_filename, mode='rb') as file_object: document_version.document.new_version(file_object=file_object, _user=user) return self.get(signature_id=result.signature_id) finally: os.unlink(temporary_filename)
def sign_document_version(self, document_version, key, passphrase=None, user=None): temporary_file_object, temporary_filename = mkstemp() try: with document_version.open() as file_object: key.sign_file(binary=True, file_object=file_object, output=temporary_filename, passphrase=passphrase) except Exception: raise else: with open(temporary_filename, mode='rb') as file_object: new_version = document_version.document.new_version( file_object=file_object, _user=user) # This is a potential race condition but we have not way # to access the final signature at this point. signature = self.filter(document_version=new_version).first() return signature or self.none() finally: os.unlink(temporary_filename)
def sign_document_version(self, document_version, key, passphrase=None, user=None): temporary_file_object, temporary_filename = mkstemp() try: with document_version.open() as file_object: key.sign_file(binary=True, detached=True, file_object=file_object, output=temporary_filename, passphrase=passphrase) except Exception: raise else: return self.create(document_version=document_version, signature_file=File(temporary_file_object)) finally: os.unlink(temporary_filename)
def sign_document_version(self, document_version, key, passphrase=None, user=None): temporary_file_object, temporary_filename = mkstemp() try: with document_version.open() as file_object: key.sign_file(binary=True, file_object=file_object, output=temporary_filename, passphrase=passphrase) except Exception: raise else: with open(temporary_filename, mode='rb') as file_object: new_version = document_version.document.new_version( file_object=file_object, _user=user) finally: os.unlink(temporary_filename) return new_version