aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-12-01 01:42:13 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2022-12-01 01:42:13 +0100
commit8980f0a3fb54ccad1ba446a485e9b2f60f544040 (patch)
tree6cc13968010376777d6e03cb20581b6482ef5e89
parentSpecify default sorting. (diff)
downloadmu4web-8980f0a3fb54ccad1ba446a485e9b2f60f544040.tar.gz
mu4web-8980f0a3fb54ccad1ba446a485e9b2f60f544040.tar.xz
Add ability to get raw message.
-rw-r--r--mu4web/main.py14
-rw-r--r--mu4web/mu.py21
2 files changed, 25 insertions, 10 deletions
diff --git a/mu4web/main.py b/mu4web/main.py
index 2e42edc..ba424ee 100644
--- a/mu4web/main.py
+++ b/mu4web/main.py
@@ -180,8 +180,6 @@ def page_base(title: Optional[str] = None,
def response_for(id: str, username: Optional[str] = None) -> str:
- # TODO option to show raw message
-
mail = cast(EmailMessage, get_mail(id))
headers = {}
@@ -241,6 +239,8 @@ def response_for(id: str, username: Optional[str] = None) -> str:
('hr',),
('main', body),
('hr',),
+ ('a', {'href': '/raw?' + urlencode({'id': id})},
+ 'Råa bitar'),
('ul', tree),
]
html_str = render_document(page_base(title=title,
@@ -453,6 +453,16 @@ def attachement_response(attachement: EmailMessage):
return response
+@app.route('/raw')
+@login_required
+def raw_message():
+ msg_id = request.args.get('id')
+ filename = mu.find_file(msg_id)
+ if not filename:
+ return 'No message with that id', 404
+ return flask.send_file(filename, mimetype='message/rfc822')
+
+
@app.route('/part')
@login_required
def attachement_part_page():
diff --git a/mu4web/mu.py b/mu4web/mu.py
index 094db6a..09861af 100644
--- a/mu4web/mu.py
+++ b/mu4web/mu.py
@@ -19,22 +19,27 @@ from typing import (
parser = BytesParser(policy=email.policy.default)
-def get_mail(id: str) -> email.message.Message:
- """
- Lookup email by Message-ID.
-
- [Raises]
- MuError
- """
+def find_file(id: str) -> Optional[str]:
cmd = subprocess.run(['mu', 'find', '-u', f'i:{id}',
'--fields', 'l'],
stdout=PIPE)
filename = cmd.stdout.decode('UTF-8').strip()
+ if cmd.returncode == 4:
+ return None
if cmd.returncode != 0:
raise MuError(cmd.returncode)
+ return filename
- with open(filename, "rb") as f:
+
+def get_mail(id: str) -> email.message.Message:
+ """
+ Lookup email by Message-ID.
+
+ [Raises]
+ MuError
+ """
+ with open(find_file(id), "rb") as f:
mail = parser.parse(f)
return mail