]> git.ipfire.org Git - ipfire.org.git/blob - webapp/handlers.py
81ed22bfd0693c9c0bf1f67c05fc0e62cd95adb2
[ipfire.org.git] / webapp / handlers.py
1 #!/usr/bin/python
2
3 #import httplib
4 #import logging
5 #import markdown2
6 import operator
7 import os
8 #import random
9 #import re
10 #import socket
11 #import time
12 #import tornado.database
13 #import tornado.locale
14 import tornado.web
15 #import unicodedata
16
17 import backend
18
19 from handlers_accounts import *
20 from handlers_admin import *
21 from handlers_base import *
22 from handlers_boot import *
23 from handlers_download import *
24 from handlers_fireinfo import *
25 from handlers_iuse import *
26 from handlers_mirrors import *
27 from handlers_news import *
28 from handlers_nopaste import *
29 from handlers_planet import *
30 from handlers_rss import *
31 from handlers_talk import *
32
33 class RootHandler(BaseHandler):
34 """
35 This handler redirects any request directly to /.
36
37 It can be used to be compatible with some ancient index urls.
38 """
39 def get(self, *args):
40 self.redirect("/")
41
42
43 class LangCompatHandler(BaseHandler):
44 """
45 Redirect links in the old format to current site:
46
47 E.g. /en/index -> /index
48 """
49 def get(self, lang, page):
50 self.redirect("/%s" % page)
51
52
53 class IndexHandler(BaseHandler):
54 rss_url = "/news.rss"
55
56 """
57 This handler displays the welcome page.
58 """
59 def get(self):
60 # Get the latest release.
61 latest_release = self.releases.get_latest()
62
63 # Get a list of the most recent news items and put them on the page.
64 latest_news = self.get_latest_news()
65
66 return self.render("index.html", latest_news=latest_news,
67 latest_release=latest_release)
68
69 def get_latest_news(self, count=5):
70 latest_news = []
71
72 for news in self.news.get_latest(limit=count):
73 latest_news.append(("news", news))
74
75 for post in self.planet.get_entries(limit=count):
76 latest_news.append(("planet", post))
77
78 latest_news.sort(key=operator.itemgetter(1), reverse=True)
79
80 return latest_news[:count]
81
82
83 class StaticHandler(BaseHandler):
84 """
85 This handler shows the files that are in plain html format.
86 """
87 @property
88 def static_path(self):
89 return os.path.join(self.application.settings["template_path"], "static")
90
91 @property
92 def static_files(self):
93 for dir, subdirs, files in os.walk(self.static_path):
94 dir = dir[len(self.static_path) + 1:]
95 for file in files:
96 if not file.endswith(".html"):
97 continue
98 yield os.path.join(dir, file)
99
100 def get(self, name=None):
101 name = "%s.html" % name
102
103 if not name in self.static_files:
104 raise tornado.web.HTTPError(404)
105
106 self.render("static/%s" % name, lang=self.locale.code[:2])
107
108
109 class GeoIPHandler(BaseHandler):
110 def get_address(self):
111 addr = self.get_argument("addr", None)
112
113 if not addr:
114 addr = self.get_remote_ip()
115
116 return addr
117
118 def get(self):
119 addr = self.get_address()
120
121 peer = self.geoip.get_all(addr)
122 if peer:
123 peer["country_name"] = self.geoip.get_country_name(peer.country)
124
125 mirrors = self.mirrors.get_for_location(peer)
126
127 self.render("geoip/index.html", addr=addr, peer=peer, mirrors=mirrors)
128
129
130 class DonateHandler(BaseHandler):
131 def get(self):
132 self.render("donate.html")
133
134
135 class DownloadHandler(BaseHandler):
136 def get(self):
137 release = self.releases.get_latest()
138
139 self.render("download.html", release=release)