Don't base64 encode encrypted reports, it's not RFC 3156 compliant and some mailclients (e.g. K-9) have issues with that.
This commit is contained in:
parent
fff1c7aa25
commit
58070a1505
2 changed files with 24 additions and 3 deletions
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -1,5 +1,18 @@
|
||||||
# MultiSchleuder Changelog
|
# MultiSchleuder Changelog
|
||||||
|
|
||||||
|
<!-- BEGIN RELEASE v0.1.3 -->
|
||||||
|
## Version 0.1.3
|
||||||
|
|
||||||
|
Bugfix release
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
<!-- BEGIN CHANGES 0.1.3 -->
|
||||||
|
- RFC 3156 compliance: Don't base64-encode encrypted reports
|
||||||
|
<!-- END CHANGES 0.1.3 -->
|
||||||
|
|
||||||
|
<!-- END RELEASE v0.1.3 -->
|
||||||
|
|
||||||
<!-- BEGIN RELEASE v0.1.2 -->
|
<!-- BEGIN RELEASE v0.1.2 -->
|
||||||
## Version 0.1.2
|
## Version 0.1.2
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from typing import Dict, List, Optional, Set
|
from typing import Dict, List, Optional, Set
|
||||||
|
|
||||||
import abc
|
import abc
|
||||||
|
import email.encoders
|
||||||
import email.mime.base
|
import email.mime.base
|
||||||
import email.mime.application
|
import email.mime.application
|
||||||
import email.mime.multipart
|
import email.mime.multipart
|
||||||
|
@ -42,6 +43,7 @@ class Message(abc.ABC):
|
||||||
try:
|
try:
|
||||||
self._mime = self._encrypt_message(content)
|
self._mime = self._encrypt_message(content)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
logging.exception('Encryption failed; falling back to unencrypted message')
|
||||||
self._mime = email.mime.text.MIMEText(content, _subtype='plain', _charset='utf-8')
|
self._mime = email.mime.text.MIMEText(content, _subtype='plain', _charset='utf-8')
|
||||||
# Set all the email headers
|
# Set all the email headers
|
||||||
self._mime['From'] = self._from
|
self._mime['From'] = self._from
|
||||||
|
@ -69,15 +71,21 @@ class Message(abc.ABC):
|
||||||
del sessionkey
|
del sessionkey
|
||||||
# Build the MIME message
|
# Build the MIME message
|
||||||
# First the small "version" part ...
|
# First the small "version" part ...
|
||||||
mp1 = email.mime.application.MIMEApplication('Version: 1', _subtype='pgp-encrypted')
|
mp1 = email.mime.application.MIMEApplication('Version: 1',
|
||||||
|
_subtype='pgp-encrypted',
|
||||||
|
_encoder=email.encoders.encode_noop)
|
||||||
mp1['Content-Description'] = 'PGP/MIME version identification'
|
mp1['Content-Description'] = 'PGP/MIME version identification'
|
||||||
mp1['Content-Disposition'] = 'attachment'
|
mp1['Content-Disposition'] = 'attachment'
|
||||||
# ... then the actual encrypted payload ...
|
# ... then the actual encrypted payload ...
|
||||||
mp2 = email.mime.application.MIMEApplication(str(pgp), _subtype='octet-stream', name='encrypted.asc')
|
mp2 = email.mime.application.MIMEApplication(str(pgp),
|
||||||
|
_subtype='octet-stream',
|
||||||
|
_encoder=email.encoders.encode_noop,
|
||||||
|
name='encrypted.asc')
|
||||||
mp2['Content-Description'] = 'OpenPGP encrypted message'
|
mp2['Content-Description'] = 'OpenPGP encrypted message'
|
||||||
mp2['Content-Disposition'] = 'inline; filename="message.asc"'
|
mp2['Content-Disposition'] = 'inline; filename="message.asc"'
|
||||||
# ... and finally the root multipart container
|
# ... and finally the root multipart container
|
||||||
mp0 = email.mime.multipart.MIMEMultipart(_subtype='encrypted', protocol='application/pgp-encrypted')
|
mp0 = email.mime.multipart.MIMEMultipart(_subtype='encrypted',
|
||||||
|
protocol='application/pgp-encrypted')
|
||||||
mp0.attach(mp1)
|
mp0.attach(mp1)
|
||||||
mp0.attach(mp2)
|
mp0.attach(mp2)
|
||||||
return mp0
|
return mp0
|
||||||
|
|
Loading…
Reference in a new issue