1 |
commit: 8afad8720eea5e69c9247fe207c9cd8e20a2a0e6 |
2 |
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Jan 9 21:04:04 2015 +0000 |
4 |
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Apr 20 17:49:44 2015 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/gentoo-keys.git/commit/?id=8afad872 |
7 |
|
8 |
gkeys: remove-key refactoring |
9 |
|
10 |
Update the remove-key action to use the proper installed db. |
11 |
Populate the del_key, del_keydir functions in lib.py |
12 |
|
13 |
gkeys/gkeys/actions.py | 27 +++++++++++++-------------- |
14 |
gkeys/gkeys/lib.py | 35 +++++++++++++++++++++++++++++------ |
15 |
2 files changed, 42 insertions(+), 20 deletions(-) |
16 |
|
17 |
diff --git a/gkeys/gkeys/actions.py b/gkeys/gkeys/actions.py |
18 |
index cfe69ee..22d660f 100644 |
19 |
--- a/gkeys/gkeys/actions.py |
20 |
+++ b/gkeys/gkeys/actions.py |
21 |
@@ -25,7 +25,6 @@ else: |
22 |
|
23 |
from collections import defaultdict |
24 |
from json import load |
25 |
-from shutil import rmtree |
26 |
|
27 |
from gkeys.lib import GkeysGPG |
28 |
from gkeys.seedhandler import SeedHandler |
29 |
@@ -551,7 +550,7 @@ class Actions(object): |
30 |
keyresults = seeds.list(**kwargs) |
31 |
self.output('', '\n Removing keys...') |
32 |
success = True |
33 |
- print(keyresults) |
34 |
+ #print(keyresults) |
35 |
for gkey in sorted(keyresults): |
36 |
if kwargs['nick'] != '*' and kwargs['nick'] not in gkey.nick: |
37 |
messages.append(_unicode("%s does not seem to be a valid key.") |
38 |
@@ -569,22 +568,22 @@ class Actions(object): |
39 |
if ans in ["no", "n"]: |
40 |
messages.append("Key removal aborted... Nothing to be done.") |
41 |
else: |
42 |
- ## This next code is total crap now |
43 |
- ## re-write it from scratch |
44 |
- ## there could be multiple keys installed in one keyring |
45 |
- ## this code just rm's everything. |
46 |
keyring = self.config.get_key('keyring') |
47 |
catdir = os.path.join(keyring, args.category) |
48 |
- rm_candidate = os.path.join(catdir, gkey.nick) |
49 |
self.logger.debug(_unicode("ACTIONS: removekey; catdir = %s") |
50 |
% catdir) |
51 |
- if args.category: |
52 |
- try: |
53 |
- rmtree(rm_candidate) |
54 |
- messages.append(_unicode("Done removing %s key.") % kwargs['nick']) |
55 |
- except OSError: |
56 |
- messages.append(_unicode("%s directory does not exist.") % rm_candidate) |
57 |
- success = False |
58 |
+ self.gpg = GkeysGPG(self.config, catdir, self.logger) |
59 |
+ if len(gkey.keys) == 1 or args.keys == gkey.keys: |
60 |
+ success, msgs = self.gpg.del_keydir(gkey) |
61 |
+ messages.extend(msgs) |
62 |
+ elif args.keys: |
63 |
+ for key in args.keys: |
64 |
+ success, msgs = self.gpg.del_key(gkey, key) |
65 |
+ msgs.extend(msgs) |
66 |
+ else: |
67 |
+ for key in gkey.keys: |
68 |
+ success, msgs = self.gpg.del_key(gkey, key) |
69 |
+ msgs.extend(msgs) |
70 |
return (success, messages) |
71 |
|
72 |
|
73 |
|
74 |
diff --git a/gkeys/gkeys/lib.py b/gkeys/gkeys/lib.py |
75 |
index 9687c24..3eb267c 100644 |
76 |
--- a/gkeys/gkeys/lib.py |
77 |
+++ b/gkeys/gkeys/lib.py |
78 |
@@ -19,9 +19,10 @@ with gentoo-keys specific convienience functions. |
79 |
# for py 2.6 compatibility |
80 |
from __future__ import print_function |
81 |
|
82 |
- |
83 |
+import os |
84 |
from os.path import abspath, pardir |
85 |
from os.path import join as pjoin |
86 |
+from shutil import rmtree |
87 |
|
88 |
from pyGPG.gpg import GPG |
89 |
from gkeys.checks import KeyChecks |
90 |
@@ -165,18 +166,40 @@ class GkeysGPG(GPG): |
91 |
return results |
92 |
|
93 |
|
94 |
- def del_key(self, gkey, keydir): |
95 |
- '''Delete the specified key in the specified keydir |
96 |
+ def del_key(self, gkey, key): |
97 |
+ '''Delete the specified key |
98 |
|
99 |
@param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint) |
100 |
+ @param key: Fingerprint of the primary key to delete |
101 |
''' |
102 |
- return [] |
103 |
+ self.set_keydir(gkey.keydir, 'del-key', reset=True) |
104 |
+ self.set_keyring('pubring.gpg', 'del-key', reset=False) |
105 |
+ self.set_keyseedfile(refresh=True) |
106 |
+ self.logger.debug("LIB: del_key, gkey: %s" % str(gkey)) |
107 |
+ self.logger.debug("LIB: del_key, key: %s" % key) |
108 |
+ self.logger.debug("** Calling runGPG with: 'gpg %s --delete-keys' for: %s" |
109 |
+ % (' '.join(self.config.get_key('tasks', 'delete-keys')), str(gkey))) |
110 |
+ result = self.runGPG(task='delete-keys', inputfile=key) |
111 |
+ self.logger.info('GPG return code: ' + str(result.returncode)) |
112 |
+ self.update_gkey(gkey, save=True) |
113 |
+ return (False, []) |
114 |
|
115 |
|
116 |
- def del_keydir(self, keydir): |
117 |
+ def del_keydir(self, gkey): |
118 |
'''Delete the specified keydir |
119 |
+ |
120 |
+ @param gkey: GKEY namedtuple with (name, nick, keydir, fingerprint) |
121 |
''' |
122 |
- return [] |
123 |
+ rm_candidate = os.path.join(self.basedir, gkey.keydir) |
124 |
+ success = False |
125 |
+ messages = [] |
126 |
+ try: |
127 |
+ rmtree(rm_candidate) |
128 |
+ messages.append("Done removing %s key." % gkey.nick) |
129 |
+ success = True |
130 |
+ except OSError: |
131 |
+ messages.append("%s directory does not exist or is a symbolic link." % rm_candidate) |
132 |
+ return (success, messages) |
133 |
|
134 |
|
135 |
def refresh_key(self, gkey): |