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
+