commit: 58d9bbc078e6714e4a9ae1975576428bc355bdc0
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 30 17:41:08 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Jun 30 17:41:08 2014 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=58d9bbc0
add seed file installed db
---
gkeys/lib.py | 41 ++++++++++++++++++++++++++---------------
gkeys/seed.py | 34 +++++++++++++++++++---------------
2 files changed, 45 insertions(+), 30 deletions(-)
diff --git a/gkeys/lib.py b/gkeys/lib.py
index b888367..c80cff6 100644
--- a/gkeys/lib.py
+++ b/gkeys/lib.py
@@ -25,6 +25,7 @@ from os.path import join as pjoin
from pyGPG.gpg import GPG
from gkeys.fileops import ensure_dirs
from gkeys.log import logger
+from gkeys.seed import Seeds
class GkeysGPG(GPG):
'''Gentoo-keys primary gpg class'''
@@ -90,38 +91,44 @@ class GkeysGPG(GPG):
'''Add the specified key to the specified keydir
@param gkey: GKEY namedtuple with
- (name, keyid/longkeyid, keydir, fingerprint,)
+ (name, nick, keydir, fingerprint)
'''
self.set_keyserver()
self.set_keydir(gkey.keydir, 'recv-keys', reset=True)
self.set_keyring('pubring.gpg', 'recv-keys', reset=False)
+ # Save the gkey seed to the installed db
+ self.set_keyseedfile()
+ self.seedfile.update(gkey)
+ if not self.seedfile.save():
+ logger.error("GkeysGPG.add_key(); failed to save seed" + gkey.nick)
+ return []
logger.debug("LIB: add_key; ensure dirs: " + self.keydir)
ensure_dirs(str(self.keydir))
- keyids = gkey.keyid
+ fingerprints = gkey.fingerprint
results = []
- for keyid in keyids:
- logger.debug("LIB: add_key; final keyids" + keyid)
+ for fingerprint in fingerprints:
+ logger.debug("LIB: add_key; adding fingerprint" + fingerprint)
logger.debug("** Calling runGPG with Running 'gpg %s --recv-keys
%s' for: %s"
% (' '.join(self.config.get_key('tasks', 'recv-keys')),
- keyid, gkey.name)
- )
- result = self.runGPG(task='recv-keys', inputfile=keyid)
+ fingerprint, gkey.name))
+ result = self.runGPG(task='recv-keys', inputfile=fingerprint)
logger.info('GPG return code: ' + str(result.returncode))
if result.fingerprint in gkey.fingerprint:
result.failed = False
message = "Fingerprints match... Import successful: "
- message += "key: %s" %keyid
- message += "\n result len: %s, %s"
%(len(result.fingerprint), result.fingerprint)
- message += "\n gkey len: %s, %s"
%(len(gkey.fingerprint[0]), gkey.fingerprint[0])
+ message += "fingerprint: %s" % fingerprint
+ message += "\n result len: %s, %s" % (len(result.fingerprint),
result.fingerprint)
+ message += "\n gkey len: %s, %s" % (len(gkey.fingerprint[0]),
gkey.fingerprint[0])
logger.info(message)
else:
result.failed = True
message = "Fingerprints do not match... Import failed for "
- message += "key: %s" %keyid
- message += "\n result: %s" %(result.fingerprint)
- message += "\n gkey..: %s" %(str(gkey.fingerprint))
+ message += "fingerprint: %s" % fingerprint
+ message += "\n result: %s" % (result.fingerprint)
+ message += "\n gkey..: %s" % (str(gkey.fingerprint))
logger.error(message)
results.append(result)
+ print("lib.add_key(), result =")
print(result.stderr_out)
return results
@@ -129,7 +136,7 @@ class GkeysGPG(GPG):
def del_key(self, gkey, keydir):
'''Delete the specified key in the specified keydir
- @param gkey: GKEY namedtuple with (name, keyid/longkeyid, fingerprint)
+ @param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint)
'''
return []
@@ -143,7 +150,7 @@ class GkeysGPG(GPG):
def update_key(self, gkey, keydir):
'''Update the specified key in the specified keydir
- @param key: tuple of (name, keyid, fingerprint)
+ @param key: tuple of (name, nick, keydir, fingerprint)
@param keydir: the keydir to add the key to
'''
return []
@@ -195,3 +202,7 @@ class GkeysGPG(GPG):
'''Verify the file specified at filepath
'''
pass
+
+ def set_keyseedfile(self):
+ self.seedfile = Seeds(pjoin(self.keydir, 'gkey.seeds'))
+ self.seedfile.load()
diff --git a/gkeys/seed.py b/gkeys/seed.py
index 9dfa955..cfb2b98 100644
--- a/gkeys/seed.py
+++ b/gkeys/seed.py
@@ -88,20 +88,17 @@ class Seeds(object):
return False
- def delete(self, gkey=None, index=None):
+ def delete(self, gkey=None):
'''Delete the key from the seeds in memory
@param gkey: GKEY, the matching GKEY to delete
- @param index: int, '''
+ '''
if gkey:
try:
- self.seeds.pop(getattr(gkey[0], 'nick'), None)
+ self.seeds.pop(gkey.nick, None)
except ValueError:
return False
return True
- elif index:
- self.seeds.pop(index)
- return True
def list(self, **kwargs):
@@ -125,19 +122,16 @@ class Seeds(object):
'''Search for the keys matching the regular expression pattern'''
pass
+ def nick_search(self, nick):
+ '''Searches the seeds for a matching nick
- def index(self, gkey):
- '''The index of the gkey in the seeds list
-
- @param gkey: GKEY, the matching GKEY to delete
- @return int
+ @param nick: string
+ @returns GKEY instance or None
'''
try:
- index = self.seeds.index(gkey)
- except ValueError:
+ return self.seeds[nick]
+ except KeyError:
return None
- return index
-
def _error(self, err):
'''Class error logging function'''
@@ -153,3 +147,13 @@ class Seeds(object):
if is_gkey:
seeds[dev] = dict(value._asdict())
return json.dumps(seeds, sort_keys=True, indent=4)
+
+ def update(self, gkey):
+ '''Looks for existance of a matching nick already in the seedfile
+ if it exists. Then either adds or replaces the gkey
+ @param gkey: GKEY instance
+ '''
+ oldkey = self.nick_search(gkey.nick[0])
+ if oldkey:
+ self.delete(oldkey)
+ self.add(gkey.nick, gkey)