5 Gentoo-keys - actions.py
7 Primary api interface module
9 @copyright: 2012 by Brian Dolbec <dol-sen@gentoo.org>
10 @license: GNU GPL2, see COPYING for details.
13 from __future__ import print_function
16 from gkeys.seedhandler import SeedHandler
17 from gkeys.lib import GkeysGPG
18 from gkeys.seed import Seeds
21 Avialable_Actions = ['listseed', 'addseed', 'removeseed', 'moveseed', 'listkey',
22 'addkey', 'removekey', 'movekey', 'installed']
25 class Actions(object):
26 '''Primary api actions'''
28 def __init__(self, config, output=None, logger=None):
35 def load_seeds(self, filename):
37 self.logger.error("ACTIONS: load_seeds; no filename to load: "
40 filepath = self.config.get_key(filename + "-seedfile")
41 self.logger.debug("ACTIONS: load_seeds; seeds filepath to load: "
48 def listseed(self, args):
49 '''Action listseed method'''
50 handler = SeedHandler(self.logger)
51 kwargs = handler.build_gkeydict(args)
52 self.logger.debug("ACTIONS: listseed; kwargs: %s" % str(kwargs))
54 self.seeds = self.load_seeds(args.seeds)
56 results = self.seeds.list(**kwargs)
61 def addseed(self, args):
62 '''Action addseed method'''
63 handler = SeedHandler(self.logger)
64 gkey = handler.new(args)
65 gkeys = self.listseed(args)
67 self.logger.debug("ACTIONS: addkey; now adding gkey: %s" % str(gkey))
68 success = self.seeds.add(gkey)
70 success = self.seeds.save()
71 return ["Successfully Added new seed: %s" % str(success), gkey]
73 messages = ["Matching seeds found in seeds file",
74 "Aborting... \nMatching seeds:"]
75 messages.extend(gkeys)
79 def removeseed(self, args):
80 '''Action removeseed method'''
81 handler = SeedHandler(self.logger)
82 searchkey = handler.new(args, needkeyid=False, checkintegrity=False)
83 self.logger.debug("ACTIONS: removeseed; gkey: %s" % str(searchkey))
84 gkeys = self.listseed(args)
86 return ["Failed to Removed seed: No gkeys returned from listseed()",
89 self.logger.debug("ACTIONS: removeseed; now deleting gkey: %s" % str(gkeys[0]))
90 success = self.seeds.delete(gkeys[0])
92 success = self.seeds.save()
93 return ["Successfully Removed seed: %s" % str(success),
96 messages = ["Too many seeds found to remove"]
97 messages.extend(gkeys)
99 return ["Failed to Remove seed:", searchkey,
100 "No matching seed found"]
103 def moveseed(self, args):
104 '''Action moveseed method'''
105 handler = SeedHandler(self.logger)
106 searchkey = handler.new(args, needkeyid=False, checkintegrity=False)
107 self.logger.debug("ACTIONS: moveseed; gkey: %s" % str(searchkey))
109 self.seeds = self.load_seeds(args.seeds)
110 kwargs = handler.build_gkeydict(args)
111 sourcekeys = self.seeds.list(**kwargs)
112 dest = self.load_seeds(args.destination)
113 destkeys = dest.list(**kwargs)
115 if len(sourcekeys) == 1 and destkeys == []:
116 self.logger.debug("ACTIONS: moveseed; now adding destination gkey: %s"
117 % str(sourcekeys[0]))
118 success = dest.add(sourcekeys[0])
119 self.logger.debug("ACTIONS: moveseed; success: %s" %str(success))
120 self.logger.debug("ACTIONS: moveseed; now deleting sourcekey: %s" % str(sourcekeys[0]))
121 success = self.seeds.delete(sourcekeys[0])
123 success = dest.save()
124 self.logger.debug("ACTIONS: moveseed; destination saved... %s" %str(success))
125 success = self.seeds.save()
126 messages.extend(["Successfully Moved %s seed: %s"
127 % (args.seeds, str(success)), sourcekeys[0]])
129 elif len(sourcekeys):
130 messages = ["Too many seeds found to move"]
131 messages.extend(sourcekeys)
133 messages.append("Failed to Move seed:")
134 messages.append(searchkey)
135 messages.append('\n')
136 messages.append("Source seeds found...")
137 messages.extend(sourcekeys or ["None\n"])
138 messages.append("Destination seeds found...")
139 messages.extend(destkeys or ["None\n"])
143 def listkey(self, args):
144 '''Action listskey method'''
145 self.seeds = self.load_seeds(args.seeds)
147 handler = SeedHandler(self.logger)
148 kwargs = handler.build_gkeydict(args)
149 # get the desired seed
150 keyresults = self.seeds.list(**kwargs)
151 if keyresults and not args.nick == '*' and self.output:
152 self.output(keyresults, "\n Found GKEY seeds:")
153 elif keyresults and self.output:
154 self.output(['all'], "\n Installed seeds:")
156 self.logger.info("ACTIONS: listkey; "
157 "Matching seed entry not found")
159 return {"Search failed for: %s" % args.nick: False}
161 return {"Search failed for: %s" % args.name: False}
163 return {"Search failed for search term": False}
166 keydir = self.config.get_key(args.seeds + "-keydir")
167 self.logger.debug("ACTIONS: listkey; keysdir = %s" % keydir)
168 self.gpg = GkeysGPG(self.config, keydir)
171 print(" GPG output:")
172 for key in keyresults:
173 if not key.keydir and not args.nick == '*':
174 self.logger.debug("ACTIONS: listkey; NO keydir... Ignoring")
175 return {"Failed: No keyid's found for %s" % key.name : ''}
176 self.logger.debug("ACTIONS: listkey; listing keydir:"
178 results[key.name] = self.gpg.list_keys(key.keydir)
179 if self.config.options['print_results']:
180 print(results[key.name].output)
181 self.logger.debug("data output:\n" +
182 str(results[key.name].output))
183 #for result in results[key.name].status.data:
184 #print("key desired:", key.name, ", keydir listed:",
186 #self.logger.debug("data record: " + str(result))
189 return {'done': True}
191 return {"No keydirs to list": False}
194 def addkey(self, args):
195 '''Action addkey method'''
196 handler = SeedHandler(self.logger)
197 kwargs = handler.build_gkeydict(args)
198 self.logger.debug("ACTIONS: listseed; kwargs: %s" % str(kwargs))
199 self.seeds = self.load_seeds(args.seeds)
201 # get the desired seed
202 keyresults = self.seeds.list(**kwargs)
203 if keyresults and not args.nick == '*' and self.output:
204 self.output(keyresults, "\n Found GKEY seeds:")
205 elif keyresults and self.output:
206 self.output(['all'], "\n Installing seeds:")
208 self.logger.info("ACTIONS: addkey; "
209 "Matching seed entry not found")
211 return {"Search failed for: %s" % args.nick: False}
213 return {"Search failed for: %s" % args.name: False}
215 return {"Search failed for search term": False}
218 keydir = self.config.get_key(args.seeds + "-keydir")
219 self.logger.debug("ACTIONS: addkey; keysdir = %s" % keydir)
220 self.gpg = GkeysGPG(self.config, keydir)
223 for key in keyresults:
224 if not key.keyid and not key.longkeyid and not args.nick == '*':
225 self.logger.debug("ACTIONS: addkey; NO key id's to add... Ignoring")
226 return {"Failed: No keyid's found for %s" % key.name : ''}
227 elif not key.keyid and not key.longkeyid:
228 print("No keyid's found for:", key.nick, key.name, "Skipping...")
231 self.logger.debug("ACTIONS: addkey; adding key:")
232 self.logger.debug("ACTIONS: " + str(key))
233 results[key.name] = self.gpg.add_key(key)
234 for result in results[key.name]:
235 self.logger.debug("ACTIONS: addkey; result.failed = " +
237 if self.config.options['print_results']:
238 for result in results[key.name]:
239 print("key desired:", key.name, ", key added:",
240 result.username, ", succeeded:",
241 not result.failed, ", keyid:", result.keyid,
242 ", fingerprint:", result.fingerprint)
243 self.logger.debug("stderr_out: " + str(result.stderr_out))
246 if failed and self.output:
247 self.output(failed, "\n Failed to install:")
248 return {'Completed': True}
249 return {"No seeds to search or install": False}
252 def removekey(self, args):
253 '''Action removekey method'''
257 def movekey(self, args):
258 '''Action movekey method'''
262 def installed(self, args):
263 '''Action installed method.
264 lists the installed key directories'''
268 def user_confirm(self, message):
269 '''Get input from the user to confirm to proceed
270 with the desired action
272 @param message: string, user promt message to display
273 @return boolean: confirmation to proceed or abort