def testLoadKeys(self): self.assertEqual({}, gpg.load_keys([])) keys = gpg.load_keys([THOMAS_FINGERPRINT]) self.assertEqual(1, len(keys)) key = keys[THOMAS_FINGERPRINT] self.assertEqual(THOMAS_FINGERPRINT, key.fingerprint) self.assertEqual("Thomas Leonard <*****@*****.**>", key.name)
def testLoadKeys(self): self.assertEqual({}, gpg.load_keys([])) keys = gpg.load_keys([THOMAS_FINGERPRINT]) self.assertEqual(1, len(keys)) key = keys[THOMAS_FINGERPRINT] self.assertEqual(THOMAS_FINGERPRINT, key.fingerprint) self.assertEqual('Thomas Leonard <*****@*****.**>', key.name)
def update_keys(): # Remember which ones are open expanded_elements = set() def add_row(tv, path, unused = None): if len(path) == 1: domain = self.trusted_keys[path][0] expanded_elements.add(domain) tv.map_expanded_rows(add_row, None) self.trusted_keys.clear() domains = {} keys = gpg.load_keys(list(trust.trust_db.keys.keys())) for fingerprint in keys: for domain in trust.trust_db.keys[fingerprint]: if domain not in domains: domains[domain] = set() domains[domain].add(keys[fingerprint]) for domain in sorted(domains): iter = self.trusted_keys.append(None, [domain, None]) for key in domains[domain]: self.trusted_keys.append(iter, [key.name, key]) def may_expand(model, path, iter, unused): if len(path) == 1: if model[iter][0] in expanded_elements: tv.expand_row(path, False) self.trusted_keys.foreach(may_expand, None)
def update_keys(): # Remember which ones are open expanded_elements = set() def add_row(tv, path): if len(path) == 1: domain = self.trusted_keys[path][0] expanded_elements.add(domain) tv.map_expanded_rows(add_row) self.trusted_keys.clear() domains = {} keys = gpg.load_keys(trust.trust_db.keys.keys()) for fingerprint in keys: for domain in trust.trust_db.keys[fingerprint]: if domain not in domains: domains[domain] = set() domains[domain].add(keys[fingerprint]) for domain in sorted(domains): iter = self.trusted_keys.append(None, [domain, None]) for key in domains[domain]: self.trusted_keys.append(iter, [key.name, key]) def may_expand(model, path, iter): if len(path) == 1: if model[iter][0] in expanded_elements: tv.expand_row(path, False) self.trusted_keys.foreach(may_expand)
def write_summary(self, topdir): sig_cache.save() names = [] keys = gpg.load_keys(self.users.keys() + aliases.keys()) top_users = [] for fingerprint, user in self.users.iteritems(): user.key = keys[fingerprint] try: # 0launch <= 0.45 doesn't returns names in unicode unicode(user.key.name) except: user.key.name = codecs.decode(user.key.name, 'utf-8') names.append((user.key.name, fingerprint)) for name, fingerprint in sorted(names): user = self.users[fingerprint] user_dir = ensure_dirs(os.path.join(topdir, 'users', fingerprint)) user_keys = [fingerprint] + reverse_aliases.get(fingerprint, []) user_xml = user.as_xml([keys[k] for k in user_keys]) write_if_changed(user_xml, os.path.join(user_dir, 'user.xml')) top_users.append((user.get_karma(), user)) users_xml = export_users(reversed(sorted(top_users))) write_if_changed(users_xml, os.path.join(topdir, 'top-users.xml')) for domain, feeds in self.sites.iteritems(): site = ET.Element('site') site.attrib["name"] = domain feeds_elem = ET.SubElement(site, "feeds") sorted_feeds = sorted([(feed.get_name().lower(), feed) for feed in feeds]) for name, feed in sorted_feeds: make_feed_element(feeds_elem, feed, self.active[feed]) site_xml = ET.ElementTree(site) write_if_changed(site_xml, os.path.join(topdir, 'sites', 'site-%s.xml' % domain)) top_sites = [(len(feeds), domain, feeds) for domain, feeds in self.sites.iteritems()] sites_xml = export_sites(reversed(sorted(top_sites))) write_if_changed(sites_xml, os.path.join(topdir, 'top-sites.xml')) for feed, metadata in self.feeds: for signer in metadata.findall("signer"): if "user" in signer.attrib: fingerprint = signer.attrib["user"] user = self.users[fingerprint] signer.attrib["name"] = user.key.get_short_name() metadata_xml = ET.ElementTree(metadata) feed_dir = get_feed_dir(feed.url) write_if_changed(metadata_xml, os.path.join(topdir, feed_dir, 'metadata.xml'))
def get_secret_keys(): child = subprocess.Popen(('gpg', '--list-secret-keys', '--with-colons', '--with-fingerprint'), stdout = subprocess.PIPE) stdout, _ = child.communicate() status = child.wait() if status: raise Exception("GPG failed with exit code %d" % status) # First, collect fingerprints for available secret keys keys = [] for line in stdout.split('\n'): line = line.split(':') if line[0] == 'fpr': keys.append([line[9], None]) # When listing secret keys, the identity show may not be the primary identity as selected by # the user or shown when verifying a signature. However, the primary identity can be obtained # by listing the accompanying public key. loaded_keys = gpg.load_keys([k[0] for k in keys]) for key in keys: key[1] = loaded_keys[key[0]].name return keys