1
# gozerplugs/plugs/pgp.py
5
__author__ = "Wijnand 'tehmaze' Modderman - http://tehmaze.com"
8
from gozerbot.generic import rlog
9
from gozerbot.commands import cmnds
10
from gozerbot.examples import examples
11
from gozerbot.pgp import pgp, NoGPGException
12
from gozerbot.plughelp import plughelp
15
plughelp.add('pgp', 'pgp utilities')
17
re_keyid = re.compile('^[0-9a-f]+$', re.I)
18
re_keyfinger = re.compile('.*Key fingerprint = ([0-9A-F\s]+)', re.I | re.M)
19
re_keypub = re.compile('pub\s+(\d+)(.)/([0-9A-F]+).+([-\d]{10})', re.M)
20
re_keyuid = re.compile('^uid\s+(.*)', re.M)
22
def handle_pgpfingerprint(bot, ievent):
23
""" return fingerprint """
25
return ievent.missing('<key id>')
26
if not re_keyid.match(ievent.args[0]):
27
return ievent.reply('invalid key id')
29
(data, returncode) = pgp._gpg('--fingerprint', ievent.args[0])
30
except NoGPGException:
31
ievent.reply('no gnupg installed')
34
test_keypub = re_keypub.search(data)
36
bits = int(test_keypub.group(1))
37
keytype = test_keypub.group(2)
44
date = test_keypub.group(4).strip()
45
results.append('%d bits %s key, created %s' % (bits, keytype, date))
46
test_keyfinger = re_keyfinger.search(data)
48
results.append('fingerprint %s' % \
49
test_keyfinger.group(1).strip().replace(' ', ''))
50
test_keyuid = re_keyuid.findall(data)
52
results.append('user ids: %s' % ' .. '.join([x.strip() for x in \
55
return ievent.reply('no results')
56
ievent.reply(', '.join(results))
58
cmnds.add('pgp-fingerprint', handle_pgpfingerprint, 'USER')
59
examples.add('pgp-fingerprint', 'shows the fingerprint information of a \
60
key id', 'pgp-fingerprint C5C9C2B2')
62
def handle_ppglist(bot, ievent):
63
""" lists pgp keys """
65
(data, returncode) = pgp._gpg('--fingerprint')
66
except NoGPGException:
67
ievent.reply('no gnupg installed')
69
pubkeys = re_keypub.findall(data)
71
pubkeys = [x[2] for x in pubkeys]
73
ievent.reply('installed public keys: %s' % ' .. '.join(pubkeys))
75
ievent.reply('no public keys installed')
77
cmnds.add('pgp-list', handle_ppglist, 'OPER')
78
examples.add('pgp-list', 'show list of registered pgp keys', 'pgp-list')
80
def handle_pgpremove(bot, ievent):
81
""" remove pgp key """
83
return ievent.missing('<key id>')
84
if len(ievent.args[0]) < 8 or not re_keyid.match(ievent.args[0]):
85
return ievent.reply('invalid key id')
86
if pgp.remove(ievent.args[0]):
89
ievent.reply('failed')
91
cmnds.add('pgp-remove', handle_pgpremove, 'OPER')
92
examples.add('pgp-remove', 'remove a regitered pgp key', 'pgp-remove F9EBC3D8')