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)

Reply via email to