1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/parsers/pgp_keys.py Mon Nov 11 23:20:54 2013 +0100
1.3 @@ -0,0 +1,117 @@
1.4 +# -*- coding: iso-8859-1 -*-
1.5 +"""
1.6 + MoinMoin - pgp_keys (MoinShare)
1.7 +
1.8 + @copyright: 2012, 2013 by Paul Boddie <paul@boddie.org.uk>
1.9 + @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.10 +"""
1.11 +
1.12 +from MoinMessage import GPG, MoinMessageError
1.13 +from MoinMessageSupport import get_homedir
1.14 +from MoinSupport import parseAttributes, escattr
1.15 +
1.16 +Dependencies = ["pages"]
1.17 +
1.18 +# Parser support.
1.19 +
1.20 +class Parser:
1.21 +
1.22 + "Display data in application/pgp-keys format."
1.23 +
1.24 + Dependencies = Dependencies
1.25 + extensions = []
1.26 +
1.27 + # Input content types understood by this parser.
1.28 +
1.29 + input_mimetypes = ["application/pgp-keys"]
1.30 +
1.31 + # Output content types preferred by this parser.
1.32 +
1.33 + output_mimetypes = ["text/html"]
1.34 +
1.35 + def __init__(self, raw, request, **kw):
1.36 +
1.37 + """
1.38 + Initialise the parser with the given 'raw' data, 'request' and any
1.39 + keyword arguments that may have been supplied.
1.40 + """
1.41 +
1.42 + self.raw = raw
1.43 + self.request = request
1.44 + self.attrs = parseAttributes(kw.get("format_args", ""), False)
1.45 +
1.46 + def format(self, fmt, write=None):
1.47 +
1.48 + """
1.49 + Format a table using the given formatter 'fmt'. If the 'write' parameter
1.50 + is specified, use it to write output; otherwise, write output using the
1.51 + request.
1.52 + """
1.53 +
1.54 + (write or self.request.write)(fmt.text(self.raw))
1.55 +
1.56 + # Extra API methods.
1.57 +
1.58 + def formatForOutputType(self, mimetype, write=None):
1.59 +
1.60 + """
1.61 + Format a table for the given 'mimetype'. If the 'write' parameter is
1.62 + specified, use it to write output; otherwise, write output using the
1.63 + request.
1.64 + """
1.65 +
1.66 + request = self.request
1.67 + write = write or request.write
1.68 + fmt = request.html_formatter
1.69 + _ = request.getText
1.70 +
1.71 + if not mimetype == "text/html":
1.72 + return
1.73 +
1.74 + homedir = get_homedir(request)
1.75 + if not homedir:
1.76 + return
1.77 +
1.78 + gpg = GPG(homedir)
1.79 +
1.80 + write(fmt.text(_("This message contains one or more keys.")))
1.81 +
1.82 + write(fmt.rawHTML('<table class="moinshare-pgp-keys" summary="%s">' % escattr(_("A table of keys"))))
1.83 + write(fmt.rawHTML("<thead>"))
1.84 + write(fmt.table_row(on=1))
1.85 + write(fmt.rawHTML("<th>")); write(fmt.text(_("Known"))); write(fmt.rawHTML("</th>"))
1.86 + write(fmt.rawHTML("<th>")); write(fmt.text(_("Identity"))); write(fmt.rawHTML("</th>"))
1.87 + write(fmt.rawHTML("<th>")); write(fmt.text(_("Fingerprint"))); write(fmt.rawHTML("</th>"))
1.88 + write(fmt.table_row(on=0))
1.89 + write(fmt.rawHTML("</thead>"))
1.90 +
1.91 + write(fmt.rawHTML("<tbody>"))
1.92 +
1.93 + for key in gpg.getKeysFromString(self.raw):
1.94 + write(fmt.table_row(on=1))
1.95 + write(fmt.table_cell(on=1))
1.96 + try:
1.97 + gpg.listKeys(key["keyid"])
1.98 + write(fmt.icon("(./)"))
1.99 + write(fmt.text(_("Known")))
1.100 + except MoinMessageError:
1.101 + pass
1.102 + write(fmt.table_cell(on=0))
1.103 + write(fmt.table_cell(on=1))
1.104 + write(fmt.text(key["userid"]))
1.105 + write(fmt.table_cell(on=0))
1.106 + write(fmt.table_cell(on=1))
1.107 + write(fmt.text(key["fingerprint"]))
1.108 + write(fmt.table_cell(on=0))
1.109 + write(fmt.table_row(on=0))
1.110 +
1.111 + write(fmt.rawHTML("</tbody></table>"))
1.112 +
1.113 + # Class methods.
1.114 +
1.115 + def getOutputTypes(self):
1.116 + return self.output_mimetypes
1.117 +
1.118 + getOutputTypes = classmethod(getOutputTypes)
1.119 +
1.120 +# vim: tabstop=4 expandtab shiftwidth=4