From 8afad8720eea5e69c9247fe207c9cd8e20a2a0e6 Mon Sep 17 00:00:00 2001 From: Brian Dolbec Date: Fri, 9 Jan 2015 13:04:04 -0800 Subject: gkeys: remove-key refactoring Update the remove-key action to use the proper installed db. Populate the del_key, del_keydir functions in lib.py --- gkeys/gkeys/actions.py | 27 +++++++++++++-------------- gkeys/gkeys/lib.py | 35 +++++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/gkeys/gkeys/actions.py b/gkeys/gkeys/actions.py index cfe69ee..22d660f 100644 --- a/gkeys/gkeys/actions.py +++ b/gkeys/gkeys/actions.py @@ -25,7 +25,6 @@ else: from collections import defaultdict from json import load -from shutil import rmtree from gkeys.lib import GkeysGPG from gkeys.seedhandler import SeedHandler @@ -551,7 +550,7 @@ class Actions(object): keyresults = seeds.list(**kwargs) self.output('', '\n Removing keys...') success = True - print(keyresults) + #print(keyresults) for gkey in sorted(keyresults): if kwargs['nick'] != '*' and kwargs['nick'] not in gkey.nick: messages.append(_unicode("%s does not seem to be a valid key.") @@ -569,22 +568,22 @@ class Actions(object): if ans in ["no", "n"]: messages.append("Key removal aborted... Nothing to be done.") else: - ## This next code is total crap now - ## re-write it from scratch - ## there could be multiple keys installed in one keyring - ## this code just rm's everything. keyring = self.config.get_key('keyring') catdir = os.path.join(keyring, args.category) - rm_candidate = os.path.join(catdir, gkey.nick) self.logger.debug(_unicode("ACTIONS: removekey; catdir = %s") % catdir) - if args.category: - try: - rmtree(rm_candidate) - messages.append(_unicode("Done removing %s key.") % kwargs['nick']) - except OSError: - messages.append(_unicode("%s directory does not exist.") % rm_candidate) - success = False + self.gpg = GkeysGPG(self.config, catdir, self.logger) + if len(gkey.keys) == 1 or args.keys == gkey.keys: + success, msgs = self.gpg.del_keydir(gkey) + messages.extend(msgs) + elif args.keys: + for key in args.keys: + success, msgs = self.gpg.del_key(gkey, key) + msgs.extend(msgs) + else: + for key in gkey.keys: + success, msgs = self.gpg.del_key(gkey, key) + msgs.extend(msgs) return (success, messages) diff --git a/gkeys/gkeys/lib.py b/gkeys/gkeys/lib.py index 9687c24..3eb267c 100644 --- a/gkeys/gkeys/lib.py +++ b/gkeys/gkeys/lib.py @@ -19,9 +19,10 @@ with gentoo-keys specific convienience functions. # for py 2.6 compatibility from __future__ import print_function - +import os from os.path import abspath, pardir from os.path import join as pjoin +from shutil import rmtree from pyGPG.gpg import GPG from gkeys.checks import KeyChecks @@ -165,18 +166,40 @@ class GkeysGPG(GPG): return results - def del_key(self, gkey, keydir): - '''Delete the specified key in the specified keydir + def del_key(self, gkey, key): + '''Delete the specified key @param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint) + @param key: Fingerprint of the primary key to delete ''' - return [] + self.set_keydir(gkey.keydir, 'del-key', reset=True) + self.set_keyring('pubring.gpg', 'del-key', reset=False) + self.set_keyseedfile(refresh=True) + self.logger.debug("LIB: del_key, gkey: %s" % str(gkey)) + self.logger.debug("LIB: del_key, key: %s" % key) + self.logger.debug("** Calling runGPG with: 'gpg %s --delete-keys' for: %s" + % (' '.join(self.config.get_key('tasks', 'delete-keys')), str(gkey))) + result = self.runGPG(task='delete-keys', inputfile=key) + self.logger.info('GPG return code: ' + str(result.returncode)) + self.update_gkey(gkey, save=True) + return (False, []) - def del_keydir(self, keydir): + def del_keydir(self, gkey): '''Delete the specified keydir + + @param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint) ''' - return [] + rm_candidate = os.path.join(self.basedir, gkey.keydir) + success = False + messages = [] + try: + rmtree(rm_candidate) + messages.append("Done removing %s key." % gkey.nick) + success = True + except OSError: + messages.append("%s directory does not exist or is a symbolic link." % rm_candidate) + return (success, messages) def refresh_key(self, gkey): -- cgit v1.2.3-65-gdbad