From 0113b6cdcd35fdec3be405219abc196180e8884a Mon Sep 17 00:00:00 2001 From: Enrico Zini Date: Sat, 4 Jun 2016 15:00:05 +0200 Subject: [PATCH] Added an option to download all signed statements in a mbox --- process/templates/process/show.html | 1 + process/urls.py | 1 + process/views.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/process/templates/process/show.html b/process/templates/process/show.html index 829bfa87..98448524 100644 --- a/process/templates/process/show.html +++ b/process/templates/process/show.html @@ -117,6 +117,7 @@ {% else %} (no mail archive yet) {% endif %} + (signed statements mbox) diff --git a/process/urls.py b/process/urls.py index 6bdc542b..dcfa1b54 100644 --- a/process/urls.py +++ b/process/urls.py @@ -25,4 +25,5 @@ urlpatterns = [ url(r'^(?P\d+)/mailbox/download$', views.MailArchive.as_view(), name="process_mailbox_download"), # TODO: test url(r'^(?P\d+)/mailbox$', views.DisplayMailArchive.as_view(), name="process_mailbox_show"), # TODO: test url(r'^(?P\d+)/update_keycheck$', views.UpdateKeycheck.as_view(), name="process_update_keycheck"), # TODO: test + url(r'^(?P\d+)/download_statements$', views.DownloadStatements.as_view(), name="process_download_statements"), # TODO: test ] diff --git a/process/views.py b/process/views.py index 4e1e1098..463f522e 100644 --- a/process/views.py +++ b/process/views.py @@ -420,3 +420,32 @@ class UpdateKeycheck(RequirementMixin, View): key.update_key() key.update_check_sigs() return redirect(self.requirement.get_absolute_url()) + + +class DownloadStatements(VisitProcessMixin, View): + def get(self, request, *args, **kw): + import mailbox + import email.utils + import tempfile + import time + with tempfile.NamedTemporaryFile(mode="wb+") as outfile: + mbox = mailbox.mbox(path=outfile.name, create=True) + + for req in self.process.requirements.all(): + for stm in req.statements.all(): + msg = mailbox.Message() + msg["From"] = email.utils.formataddr((stm.uploaded_by.fullname, stm.uploaded_by.email)) + msg["Subject"] = "Signed statement for " + req.get_type_display() + msg["Date"] = email.utils.formatdate(time.mktime(stm.uploaded_time.timetuple())) + msg.set_payload(stm.statement, "utf-8") + mbox.add(msg) + + mbox.close() + + outfile.seek(0) + data = outfile.read() + + res = http.HttpResponse(data, content_type="text/plain") + res["Content-Disposition"] = "attachment; filename={}.mbox".format(self.person.lookup_key) + return res + -- GitLab