]> git.ipfire.org Git - ipfire.org.git/blame - src/web/handlers.py
Drop Bootstrap Notes
[ipfire.org.git] / src / web / handlers.py
CommitLineData
81675874 1#!/usr/bin/python
2
940227cb 3#import httplib
47113f9e 4import iso3166
940227cb
MT
5#import logging
6#import markdown2
60b0917c 7import operator
81675874 8import os
940227cb
MT
9#import random
10#import re
11#import socket
12#import time
13#import tornado.database
14#import tornado.locale
2c361abc 15import tornado.gen
81675874 16import tornado.web
940227cb 17#import unicodedata
81675874 18
2cd9af74 19from handlers_accounts import *
940227cb
MT
20from handlers_admin import *
21from handlers_base import *
8e2e1261 22from handlers_boot import *
940227cb 23from handlers_download import *
66862195 24from handlers_fireinfo import *
c37ec602 25from handlers_iuse import *
940227cb
MT
26from handlers_mirrors import *
27from handlers_news import *
60024cc8 28from handlers_nopaste import *
940227cb 29from handlers_planet import *
de683d7c 30from handlers_rss import *
66862195 31from handlers_talk import *
d0d074e0 32
940227cb
MT
33class LangCompatHandler(BaseHandler):
34 """
35 Redirect links in the old format to current site:
81675874 36
940227cb
MT
37 E.g. /en/index -> /index
38 """
39 def get(self, lang, page):
40 self.redirect("/%s" % page)
81675874 41
feb02477 42
940227cb 43class IndexHandler(BaseHandler):
de683d7c
MT
44 rss_url = "/news.rss"
45
940227cb
MT
46 """
47 This handler displays the welcome page.
48 """
feb02477 49 def get(self):
7771acea
MT
50 # Get the latest release.
51 latest_release = self.releases.get_latest()
60b0917c
MT
52
53 # Get a list of the most recent news items and put them on the page.
54 latest_news = self.get_latest_news()
feb02477 55
bb3da2b5 56 return self.render("index.html", latest_news=latest_news,
e400e37d
MT
57 latest_release=latest_release,
58 fireinfo_country=self.fireinfo.get_random_country_penetration())
60b0917c
MT
59
60 def get_latest_news(self, count=5):
61 latest_news = []
62
2cb93d13 63 for news in self.news.get_latest(limit=count):
60b0917c
MT
64 latest_news.append(("news", news))
65
66 for post in self.planet.get_entries(limit=count):
67 latest_news.append(("planet", post))
68
69 latest_news.sort(key=operator.itemgetter(1), reverse=True)
70
71 return latest_news[:count]
3add293a
MT
72
73
9068dba1
MT
74class GeoIPHandler(BaseHandler):
75 def get_address(self):
76 addr = self.get_argument("addr", None)
77
78 if not addr:
79 addr = self.get_remote_ip()
80
81 return addr
82
83 def get(self):
84 addr = self.get_address()
85
86 peer = self.geoip.get_all(addr)
87 if peer:
88 peer["country_name"] = self.geoip.get_country_name(peer.country)
89
5488a9f4
MT
90 mirrors = self.mirrors.get_for_location(peer)
91
92 self.render("geoip/index.html", addr=addr, peer=peer, mirrors=mirrors)
e64ce07e
MT
93
94
95class DonateHandler(BaseHandler):
96 def get(self):
47113f9e
MT
97 location = self.get_remote_location()
98
99 if location:
100 country = location.country
101 else:
102 country = None
103
104 self.render("donate.html", countries=iso3166.countries, country=country)
60b0917c 105
2c361abc
MT
106 @tornado.gen.coroutine
107 def post(self):
108 # Get form inputs
109 args = {
110 "amount" : self.get_argument("amount"),
111 "currency" : self.get_argument("currency", "EUR"),
112 "method" : self.get_argument("method", None),
113
114 # Is this a recurring donation?
115 "recurring" : self.get_argument("frequency") == "monthly",
116
117 # XXX Missing inputs
118 "email" : "john.doe@example.com",
119 "first_name" : "John",
120 "last_name" : "Doe",
121 "street1" : "Street 1",
122 "street2" : "Street 2",
123 "post_code" : "POST CODE",
124 "city" : "City",
125 "state" : "State",
126 "country_code" : "DE",
127 }
128
129 # Send request to Zeiterfassung
130 try:
131 response = yield self.backend.zeiterfassung.send_request(
132 "/api/v1/donations/create/ipfire-project", **args)
133
134 except Exception:
135 raise # XXX handle any problems when Zeiterfassung is unreachable
136
137 # Redirect the user to the payment page
138 redirect_url = response.get("redirect_url")
139 if not redirect_url:
140 raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
141
142 self.redirect(redirect_url)
143
60b0917c
MT
144
145class DownloadHandler(BaseHandler):
146 def get(self):
147 release = self.releases.get_latest()
148
149 self.render("download.html", release=release)
45592df5
MT
150
151
152class StaticHandler(BaseHandler):
153 def initialize(self, template):
154 self._template = template
155
156 def get(self):
157 self.render("static/%s" % self._template)