Merge django_gpg's verify_file + verify_w_retry methods

This commit is contained in:
Roberto Rosario
2012-02-05 00:19:54 -04:00
parent a13f048242
commit 735d3db97a
2 changed files with 26 additions and 33 deletions

View File

@@ -174,30 +174,10 @@ class GPG(object):
self.gpg = gnupg.GPG(**kwargs) self.gpg = gnupg.GPG(**kwargs)
def verify_w_retry(self, file_input, detached_signature=None): def verify_file(self, file_input, detached_signature=None, close_descriptor=True, fetch_key=False):
logger.debug('file_input type: %s' % type(file_input)) """
input_descriptor = GPG.get_descriptor(file_input)
try:
verify = self.verify_file(input_descriptor, detached_signature, close_descriptor=False)
if verify.status == 'no public key':
# Try to fetch the public key from the keyservers
try:
self.receive_key(verify.key_id)
return self.verify_w_retry(input_descriptor, detached_signature)
except KeyFetchingError:
return verify
else:
input_descriptor.close()
return verify
except IOError:
return False
def verify_file(self, file_input, detached_signature=None, close_descriptor=True):
'''
Verify the signature of a file. Verify the signature of a file.
''' """
input_descriptor = GPG.get_descriptor(file_input) input_descriptor = GPG.get_descriptor(file_input)
@@ -213,15 +193,28 @@ class GPG(object):
else: else:
verify = self.gpg.verify_file(input_descriptor) verify = self.gpg.verify_file(input_descriptor)
if close_descriptor: logger.debug('verify.status: %s' % getattr(verify, 'status', None))
input_descriptor.close()
if verify: if verify:
logger.debug('verify ok')
if close_descriptor:
input_descriptor.close()
return verify return verify
#elif getattr(verify, 'status', None) == 'no public key': elif getattr(verify, 'status', None) == 'no public key':
# # Exception to the rule, to be able to query the keyservers # Exception to the rule, to be able to query the keyservers
# return verify if fetch_key:
try:
self.receive_key(verify.key_id)
return self.verify_file(input_descriptor, detached_signature, close_descriptor, fetch_key=False)
except KeyFetchingError:
if close_descriptor:
input_descriptor.close()
return verify
else:
return verify
else: else:
logger.debug('No verify')
if close_descriptor:
input_descriptor.close()
raise GPGVerificationError() raise GPGVerificationError()
def verify(self, data): def verify(self, data):
@@ -234,12 +227,12 @@ class GPG(object):
raise GPGVerificationError(verify.status) raise GPGVerificationError(verify.status)
def sign_file(self, file_input, key=None, destination=None, key_id=None, passphrase=None, clearsign=False): def sign_file(self, file_input, key=None, destination=None, key_id=None, passphrase=None, clearsign=False):
''' """
Signs a filename, storing the signature and the original file Signs a filename, storing the signature and the original file
in the destination filename provided (the destination file is in the destination filename provided (the destination file is
overrided if it already exists), if no destination file name is overrided if it already exists), if no destination file name is
provided the signature is returned. provided the signature is returned.
''' """
kwargs = {} kwargs = {}
kwargs['clearsign'] = clearsign kwargs['clearsign'] = clearsign

View File

@@ -59,6 +59,6 @@ class DocumentVersionSignatureManager(models.Manager):
args = (document.open(raw=True),) args = (document.open(raw=True),)
try: try:
return gpg.verify_w_retry(*args) return gpg.verify_file(*args, fetch_key=True)
except GPGVerificationError: except GPGVerificationError:
return None return None