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