]> git.ipfire.org Git - ipfire.org.git/commitdiff
Implement backend logic for newsletter subscriptions
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Oct 2018 17:30:31 +0000 (18:30 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Oct 2018 17:30:31 +0000 (18:30 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/base.html
src/templates/newsletter/subscribed.html [new file with mode: 0644]
src/web/__init__.py
src/web/handlers_base.py
src/web/newsletter.py [new file with mode: 0644]

index 64034e9dc67ba894bf20aa35ec2b85c2c9b00dbd..c8fa2e1c4bdd68087419d79eeb8ea4dc8de63fca 100644 (file)
@@ -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 \
index 48fbbf05469048c5b84bb1d30ca6e77865495c9d..a4d190de6f45bea0cf133ec681fd344aa44a0b20 100644 (file)
                                                        <div class="col-12 col-lg-4 mb-4">
                                                                <h6>{{ _("Subscribe to our Newsletter") }}</h6>
 
-                                                               <form method="POST" action="/subscribe">
+                                                               <form method="POST" action="https://{{ "dev" if debug else "www" }}.ipfire.org/newsletter/subscribe">
                                                                        {% raw xsrf_form_html() %}
 
                                                                        <label class="sr-only" for="email">{{ _("Email Address") }}</label>
 
-                                                                       <input type="text" class="form-control mb-2 mr-sm-2" id="email"
+                                                                       <input type="email" class="form-control mb-2 mr-sm-2" id="email" name="email"
                                                                                placeholder="{{ _("Your Email Address") }}">
 
                                                                        <button type="submit" class="btn btn-primary btn-block mb-2">{{ _("Subscribe") }}</button>
diff --git a/src/templates/newsletter/subscribed.html b/src/templates/newsletter/subscribed.html
new file mode 100644 (file)
index 0000000..6db5fc0
--- /dev/null
@@ -0,0 +1,19 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Successfully subscribed") }}{% end block %}
+
+{% block content %}
+       <div class="row justify-content-center my-5">
+               <div class="col-12 col-md-6">
+                       <div class="card bg-success text-white p-md-5">
+                               <div class="card-body text-center">
+                                       <span class="fas fa-check fa-5x my-4"></span>
+
+                                       <p class="lead">
+                                               {{ _("You have been successfully subscribed to our newsletter") }}
+                                       </p>
+                               </div>
+                       </div>
+               </div>
+       </div>
+{% end block %}
index 7e5953c5256deb872f2de8abb885e49cf1ed51ce..b11f24466e7c3a2b7cf75d2039c3dfb579a055c2 100644 (file)
@@ -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" }),
 
index bcb31c16d64cf71d32725f5199d324f963309cea..49e2b3d3e921df17a20f16ec22207f0bfeec282e 100644 (file)
@@ -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 (file)
index 0000000..a88b7a8
--- /dev/null
@@ -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)