diff --git a/process/templates/process/show.html b/process/templates/process/show.html index 829bfa871529ae7c9f30394d42673e4cfedc0f39..98448524757a7598c1487fe523ded01d7415de22 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 6bdc542b8a02fa1d68cca3c8e5daca1239e99a3b..dcfa1b54423739cb4e4ddaf5b11dc056e86d90c8 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 4e1e10980cd7c761fa630f1dd03aef5508fe274d..463f522eaf3d6a8f738a44b1714c910e9c670427 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 +