commit: 98bfad8cbe753e799ea2ebe9219b32126a06dda5
Author: Pavlos Ratis <dastergon <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 21 22:47:33 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Jul 21 22:47:33 2014 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=98bfad8c
removekey action: Remove installed keys
---
gkeys/actions.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
gkeys/cli.py | 1 -
gkeys/lib.py | 17 ++++++++---------
gkeys/seed.py | 7 +++++--
4 files changed, 66 insertions(+), 15 deletions(-)
diff --git a/gkeys/actions.py b/gkeys/actions.py
index f5ea252..caa0d7f 100644
--- a/gkeys/actions.py
+++ b/gkeys/actions.py
@@ -14,8 +14,12 @@ from __future__ import print_function
import os
+from json import load
+from shutil import rmtree
+
from gkeys.lib import GkeysGPG
from gkeys.seedhandler import SeedHandler
+from gkeys.config import GKEY
Available_Actions = ['listseed', 'addseed', 'removeseed', 'moveseed',
'fetchseed',
'listseedfiles', 'listkey', 'addkey', 'removekey', 'movekey',
@@ -222,7 +226,7 @@ class Actions(object):
for result in results[key.name]:
print("key desired:", key.name, ", key added:",
result.username, ", succeeded:",
- not result.failed,", fingerprint:",
result.fingerprint)
+ not result.failed, ", fingerprint:",
result.fingerprint)
self.logger.debug("stderr_out: " +
str(result.stderr_out))
if result.failed:
failed.append(key)
@@ -234,7 +238,35 @@ class Actions(object):
def removekey(self, args):
'''Remove an installed key'''
- pass
+ if not args.nick:
+ return ["Please provide a nickname or -n *"]
+ handler = SeedHandler(self.logger, self.config)
+ kwargs = handler.build_gkeydict(args)
+ self.logger.debug("ACTIONS: addkey; kwargs: %s" % str(kwargs))
+ installed_keys = self.installed(args)[1]
+ for gkey in installed_keys:
+ if kwargs['nick'] not in gkey.nick:
+ messages = ["%s does not seem to be a valid key." %
kwargs['nick']]
+ else:
+ self.output(['', [gkey]], '\n Found GKEY seed:')
+ ans = raw_input("Do you really want to remove %s?[y/n]: "
+ % kwargs['nick']).lower()
+ while ans not in ["yes", "y", "no", "n"]:
+ ans = raw_input("Do you really want to remove %s?[y/n]: "
+ % kwargs['nick']).lower()
+ if ans in ["no", "n"]:
+ messages = ["Key removal aborted... Nothing to be done."]
+ else:
+ keydir = self.config.get_key(args.seeds + "-keydir")
+ rm_candidate = os.path.join(keydir, gkey.nick)
+ self.logger.debug("ACTIONS: removekey; keysdir = %s" %
keydir)
+ if args.seeds:
+ try:
+ rmtree(rm_candidate)
+ messages = ["Done removing %s key." %
kwargs['nick']]
+ except OSError:
+ messages = ["%s directory does not exist." %
rm_candidate]
+ return messages
def movekey(self, args):
@@ -244,7 +276,25 @@ class Actions(object):
def installed(self, args):
'''Lists the installed key directories'''
- pass
+ if args.seeds:
+ keydir = self.config.get_key(args.seeds + "-keydir")
+ else:
+ return ["Please specify a seed file."]
+ self.logger.debug("ACTIONS: installed; keysdir = %s" % keydir)
+ installed_keys = []
+ try:
+ for key in os.listdir(keydir):
+ seed_path = os.path.join(keydir, key)
+ gkey_path = os.path.join(seed_path, 'gkey.seeds')
+ try:
+ with open(gkey_path, 'r') as fileseed:
+ seed = load(fileseed)
+ except IOError:
+ return ["No seed file found in %s." % gkey_path, ""]
+ installed_keys.append(GKEY(**seed.values()[0]))
+ except OSError:
+ return ["%s keydir does not exist." % keydir, ""]
+ return ['Found Key/s:', installed_keys]
def user_confirm(self, message):
diff --git a/gkeys/cli.py b/gkeys/cli.py
index 7335ec4..3df3435 100644
--- a/gkeys/cli.py
+++ b/gkeys/cli.py
@@ -155,6 +155,5 @@ class Main(object):
print()
-
def output_failed(self, failed):
pass
diff --git a/gkeys/lib.py b/gkeys/lib.py
index c80cff6..3861012 100644
--- a/gkeys/lib.py
+++ b/gkeys/lib.py
@@ -96,17 +96,10 @@ class GkeysGPG(GPG):
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))
- fingerprints = gkey.fingerprint
results = []
- for fingerprint in fingerprints:
+ for fingerprint in gkey.fingerprint:
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')),
@@ -127,6 +120,12 @@ class GkeysGPG(GPG):
message += "\n result: %s" % (result.fingerprint)
message += "\n gkey..: %s" % (str(gkey.fingerprint))
logger.error(message)
+ # 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 []
results.append(result)
print("lib.add_key(), result =")
print(result.stderr_out)
@@ -203,6 +202,6 @@ class GkeysGPG(GPG):
'''
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 cfb2b98..008fe38 100644
--- a/gkeys/seed.py
+++ b/gkeys/seed.py
@@ -45,7 +45,7 @@ class Seeds(object):
seedlines = None
self.seeds = {}
try:
- with open(self.filename) as seedfile:
+ with open(self.filename, "r+") as seedfile:
seedlines = json.load(seedfile)
except IOError as err:
logger.debug("Seed: load; IOError occurred while loading file")
@@ -122,6 +122,7 @@ 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
@@ -133,6 +134,7 @@ class Seeds(object):
except KeyError:
return None
+
def _error(self, err):
'''Class error logging function'''
logger.error("Seed: Error processing seed file %s" % self.filename)
@@ -148,12 +150,13 @@ class Seeds(object):
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])
+ oldkey = self.nick_search(gkey.nick)
if oldkey:
self.delete(oldkey)
self.add(gkey.nick, gkey)