]>
gitweb.pimeys.fr Git - scripts-20-100.git/blob - clearmime.py
3 # Copyright 2008 Lenny Domnitser <http://domnit.org/>
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or (at
8 # your option) any later version.
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 __author__
= 'Lenny Domnitser'
25 TEMPLATE
= '''-----BEGIN PGP SIGNED MESSAGE-----
27 NotDashEscaped: You need GnuPG to verify this message
32 def _clarify(message
, messagetext
):
33 if message
.get_content_type() == 'multipart/signed':
34 if message
.get_param('protocol') == 'application/pgp-signature':
35 hashname
= message
.get_param('micalg').upper()
36 assert hashname
.startswith('PGP-')
37 hashname
= hashname
.replace('PGP-', '', 1)
38 textmess
, sigmess
= message
.get_payload()
39 assert sigmess
.get_content_type() == 'application/pgp-signature'
40 #text = textmess.as_string() - not byte-for-byte accurate
41 text
= messagetext
.split('\n--%s\n' % message
.get_boundary(), 2)[1]
42 sig
= sigmess
.get_payload()
43 assert isinstance(sig
, str)
44 # Setting content-type to application/octet instead of text/plain
45 # to maintain CRLF endings. Using replace_header instead of
46 # set_type because replace_header clears parameters.
47 message
.replace_header('Content-Type', 'application/octet')
48 clearsign
= TEMPLATE
% locals()
49 clearsign
= clearsign
.replace(
50 '\r\n', '\n').replace('\r', '\n').replace('\n', '\r\n')
51 message
.set_payload(clearsign
)
52 elif message
.is_multipart():
53 for message
in message
.get_payload():
54 _clarify(message
, messagetext
)
57 def clarify(messagetext
):
58 '''given a string containing a MIME message, returns a string
59 where PGP/MIME messages are replaced with clearsigned messages.'''
61 message
= email
.message_from_string(messagetext
)
62 _clarify(message
, messagetext
)
63 return message
.as_string()
66 if __name__
== '__main__':
68 sys
.stdout
.write(clarify(sys
.stdin
.read()))