]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/web/handlers.py
release: Cache blog post
[ipfire.org.git] / src / web / handlers.py
index 7c86d34c184e9a1a5c59be43d6165718d6ad07d8..364f3ed6374c11e0663613cdf625e0ec1b18a904 100644 (file)
@@ -1,36 +1,8 @@
-#!/usr/bin/python
-
-#import httplib
-import iso3166
-#import logging
-#import markdown2
-import operator
-import os
-#import random
-#import re
-#import socket
-#import time
-#import tornado.database
-#import tornado.locale
-import tornado.gen
-import tornado.web
-#import unicodedata
-
-from handlers_accounts import *
-from handlers_admin import *
-from handlers_base import *
-from handlers_boot import *
-from handlers_download import *
-from handlers_fireinfo import *
-from handlers_iuse import *
-from handlers_mirrors import *
-from handlers_news import *
-from handlers_nopaste import *
-from handlers_planet import *
-from handlers_rss import *
-from handlers_talk import *
-
-class LangCompatHandler(BaseHandler):
+#!/usr/bin/python3
+
+from . import base
+
+class LangCompatHandler(base.BaseHandler):
        """
                Redirect links in the old format to current site:
 
@@ -40,9 +12,7 @@ class LangCompatHandler(BaseHandler):
                self.redirect("/%s" % page)
 
 
-class IndexHandler(BaseHandler):
-       rss_url = "/news.rss"
-
+class IndexHandler(base.BaseHandler):
        """
                This handler displays the welcome page.
        """
@@ -50,110 +20,37 @@ class IndexHandler(BaseHandler):
                # Get the latest release.
                latest_release = self.releases.get_latest()
 
-               # Get a list of the most recent news items and put them on the page.            
-               latest_news = self.get_latest_news()
-
-               return self.render("index.html", latest_news=latest_news,
-                       latest_release=latest_release,
-                       fireinfo_country=self.fireinfo.get_random_country_penetration())
-
-       def get_latest_news(self, count=5):
-               latest_news = []
-
-               for news in self.news.get_latest(limit=count):
-                       latest_news.append(("news", news))
-
-               for post in self.planet.get_entries(limit=count):
-                       latest_news.append(("planet", post))
-
-               latest_news.sort(key=operator.itemgetter(1), reverse=True)
+               # Get a list of the most recent news items and put them on the page.
+               posts = self.backend.blog.get_newest(limit=4)
 
-               return latest_news[:count]
+               # Cache page for 5 minutes
+               self.set_expires(300)
 
+               return self.render("index.html", posts=posts,
+                       latest_release=latest_release)
 
-class GeoIPHandler(BaseHandler):
-       def get_address(self):
-               addr = self.get_argument("addr", None)
 
-               if not addr:
-                       addr = self.get_remote_ip()
+class NewsHandler(base.BaseHandler):
+       def get(self, post):
+               self.redirect("https://blog.ipfire.org/post/%s" % post, permanent=True)
 
-               return addr
 
-       def get(self):
-               addr = self.get_address()
-
-               peer = self.geoip.get_all(addr)
-               if peer:
-                       peer["country_name"] = self.geoip.get_country_name(peer.country)
-
-               mirrors = self.mirrors.get_for_location(peer)
-
-               self.render("geoip/index.html", addr=addr, peer=peer, mirrors=mirrors)
+class PlanetPostHandler(base.BaseHandler):
+       def get(self, post):
+               self.redirect("https://blog.ipfire.org/post/%s" % post, permanent=True)
 
 
-class DonateHandler(BaseHandler):
-       def get(self):
-               location = self.get_remote_location()
-
-               if location:
-                       country = location.country
-               else:
-                       country = None
-
-               self.render("donate.html", countries=iso3166.countries, country=country)
-
-       @tornado.gen.coroutine
-       def post(self):
-               # Get form inputs
-               args = {
-                       "amount"       : self.get_argument("amount"),
-                       "currency"     : self.get_argument("currency", "EUR"),
-                       "method"       : self.get_argument("method", None),
-
-                       # Is this a recurring donation?
-                       "recurring"    : self.get_argument("frequency") == "monthly",
-
-                       # Address
-                       "email"        : self.get_argument("email"),
-                       "title"        : self.get_argument("title"),
-                       "first_name"   : self.get_argument("first_name"),
-                       "last_name"    : self.get_argument("last_name"),
-                       "company_name" : self.get_argument("company_name", None),
-                       "street1"      : self.get_argument("street1"),
-                       "street2"      : self.get_argument("street2", None),
-                       "post_code"    : self.get_argument("post_code"),
-                       "city"         : self.get_argument("city"),
-                       "state"        : self.get_argument("state", None),
-                       "country_code" : self.get_argument("country_code"),
-               }
-
-               # Send request to Zeiterfassung
-               try:
-                       response = yield self.backend.zeiterfassung.send_request(
-                               "/api/v1/donations/create/ipfire-project", **args)
-
-               except Exception:
-                       raise # XXX handle any problems when Zeiterfassung is unreachable
-
-               # Redirect the user to the payment page
-               redirect_url = response.get("redirect_url")
-               if not redirect_url:
-                       raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
-
-               self.redirect(redirect_url)
-
-
-class DownloadHandler(BaseHandler):
-       def get(self):
-               release = self.releases.get_latest()
+class PlanetUserHandler(base.BaseHandler):
+       def get(self, user):
+               self.redirect("https://blog.ipfire.org/authors/%s" % user, permanent=True)
 
-               self.render("download.html", release=release)
 
-
-class StaticHandler(BaseHandler):
+class StaticHandler(base.BaseHandler):
        def initialize(self, template):
                self._template = template
 
        def get(self):
+               # Cache page for 60 minutes
+               self.set_expires(3600)
+
                self.render("static/%s" % self._template)