From 5613b94b13bb62d3ee8557fb677b7dfe2e49ac51 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 15 Oct 2018 18:30:31 +0100 Subject: [PATCH] Implement backend logic for newsletter subscriptions Signed-off-by: Michael Tremer --- Makefile.am | 6 ++++ src/templates/base.html | 4 +-- src/templates/newsletter/subscribed.html | 19 ++++++++++++ src/web/__init__.py | 4 +++ src/web/handlers_base.py | 1 + src/web/newsletter.py | 39 ++++++++++++++++++++++++ 6 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/templates/newsletter/subscribed.html create mode 100644 src/web/newsletter.py diff --git a/Makefile.am b/Makefile.am index 64034e9d..c8fa2e1c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -85,6 +85,7 @@ web_PYTHON = \ src/web/handlers_mirrors.py \ src/web/handlers_nopaste.py \ src/web/location.py \ + src/web/newsletter.py \ src/web/people.py \ src/web/ui_modules.py @@ -146,6 +147,11 @@ templates_modules_DATA = \ templates_modulesdir = $(templatesdir)/modules +templates_newsletter_DATA = \ + src/templates/newsletter/subscribed.html + +templates_newsletterdir = $(templatesdir)/newsletter + templates_people_DATA = \ src/templates/people/base.html \ src/templates/people/calls.html \ diff --git a/src/templates/base.html b/src/templates/base.html index 48fbbf05..a4d190de 100644 --- a/src/templates/base.html +++ b/src/templates/base.html @@ -54,12 +54,12 @@
{{ _("Subscribe to our Newsletter") }}
-
+ {% raw xsrf_form_html() %} - diff --git a/src/templates/newsletter/subscribed.html b/src/templates/newsletter/subscribed.html new file mode 100644 index 00000000..6db5fc07 --- /dev/null +++ b/src/templates/newsletter/subscribed.html @@ -0,0 +1,19 @@ +{% extends "../base.html" %} + +{% block title %}{{ _("Successfully subscribed") }}{% end block %} + +{% block content %} +
+
+
+
+ + +

+ {{ _("You have been successfully subscribed to our newsletter") }} +

+
+
+
+
+{% end block %} diff --git a/src/web/__init__.py b/src/web/__init__.py index 7e5953c5..b11f2446 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -16,6 +16,7 @@ from . import auth from . import blog from . import download from . import location +from . import newsletter from . import people from . import ui_modules @@ -101,6 +102,9 @@ class Application(tornado.web.Application): (r"/donate", DonateHandler), (r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }), + # Newsletter + (r"/newsletter/subscribe", newsletter.SubscribeHandler), + # RSS feed (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), diff --git a/src/web/handlers_base.py b/src/web/handlers_base.py index bcb31c16..49e2b3d3 100644 --- a/src/web/handlers_base.py +++ b/src/web/handlers_base.py @@ -40,6 +40,7 @@ class BaseHandler(tornado.web.RequestHandler): now = datetime.date.today() ns.update({ + "debug" : self.application.settings.get("debug", False), "format_size" : util.format_size, "format_time" : util.format_time, "hostname" : self.hostname, diff --git a/src/web/newsletter.py b/src/web/newsletter.py new file mode 100644 index 00000000..a88b7a87 --- /dev/null +++ b/src/web/newsletter.py @@ -0,0 +1,39 @@ +#!/usr/bin/python3 + +import email.mime.text +import logging +import tornado.gen +import tornado.process + +from . import handlers_base as base + +class SubscribeHandler(base.BaseHandler): + @tornado.gen.coroutine + def post(self): + address = self.get_argument("email") + + # Create an email with us as sender + m = email.mime.text.MIMEText("") + m.add_header("To", "ipfire-announce-join@lists.ipfire.org") + m.add_header("From", address) + m.add_header("Sender", "no-reply@ipfire.org") + m.add_header("Subject", "Subscribe") + + logging.debug("Sending email:\n%s" % m.as_string()) + + # Call sendmail + p = tornado.process.Subprocess(["sendmail", "-t"], + stdin=tornado.process.Subprocess.STREAM) + + # Pipe the email into sendmail + yield tornado.gen.Task(p.stdin.write, m.as_bytes()) + + # Close standard input + p.stdin.close() + + # Wait until sendmail is done + ret = yield p.wait_for_exit() + + logging.info("%s has subscribed to the newsletter" % address) + + self.render("newsletter/subscribed.html", address=address) -- 2.39.2