]> git.ipfire.org Git - ipfire.org.git/blame - webapp/__init__.py
Drop fancybox
[ipfire.org.git] / webapp / __init__.py
CommitLineData
81675874 1#/usr/bin/python
2
feb02477 3import logging
e6d36e0a 4import multiprocessing
81675874 5import os.path
8ccd2ff0 6import simplejson
feb02477 7import tornado.httpserver
81675874 8import tornado.locale
81675874 9import tornado.web
10
18e60079
MT
11from tornado.options import options
12
940227cb 13import backend
feb02477 14
8ccd2ff0
MT
15from handlers import *
16from ui_modules import *
81675874 17
18BASEDIR = os.path.join(os.path.dirname(__file__), "..")
19
81675874 20class Application(tornado.web.Application):
9068dba1 21 def __init__(self, **kwargs):
a6dc0bad
MT
22 self.__backend = None
23
81675874 24 settings = dict(
18e60079 25 debug = options.debug,
d0d074e0 26 login_url = "/login",
81675874 27 template_path = os.path.join(BASEDIR, "templates"),
cc3b928d
MT
28 ui_methods = {
29 "format_month_name" : self.format_month_name,
30 },
81675874 31 ui_modules = {
9068dba1
MT
32 "Advertisement" : AdvertisementModule,
33 "DonationBox" : DonationBoxModule,
e00c06b9 34 "DonationButton" : DonationButtonModule,
60b0917c 35 "DonationInputBox" : DonationInputBoxModule,
9068dba1 36 "DownloadButton" : DownloadButtonModule,
66862195 37 "LanguageName" : LanguageNameModule,
9068dba1
MT
38 "Map" : MapModule,
39 "Menu" : MenuModule,
40 "MirrorItem" : MirrorItemModule,
41 "MirrorsTable" : MirrorsTableModule,
42 "NetBootMenuConfig" : NetBootMenuConfigModule,
43 "NetBootMenuHeader" : NetBootMenuHeaderModule,
44 "NetBootMenuSeparator" : NetBootMenuSeparatorModule,
45 "NewsItem" : NewsItemModule,
46 "NewsLine" : NewsLineModule,
47 "NewsTable" : NewsTableModule,
48 "NewsYearNavigation" : NewsYearNavigationModule,
d88b8f41 49 "PlanetAuthorBox" : PlanetAuthorBoxModule,
9068dba1 50 "PlanetEntry" : PlanetEntryModule,
fa7e1a0a 51 "PlanetSearchBox" : PlanetSearchBoxModule,
66862195 52 "ProgressBar" : ProgressBarModule,
9068dba1
MT
53 "ReleaseItem" : ReleaseItemModule,
54 "SidebarBanner" : SidebarBannerModule,
55 "SidebarRelease" : SidebarReleaseModule,
66862195
MT
56 "FireinfoDeviceTable" : FireinfoDeviceTableModule,
57 "FireinfoDeviceAndGroupsTable" : FireinfoDeviceAndGroupsTableModule,
58 "FireinfoGeoTable" : FireinfoGeoTableModule,
5ac74b02 59 "TalkContact" : TalkContactModule,
66862195 60 "TalkCallLog" : TalkCallLogModule,
77431b9c 61 "TalkLines" : TalkLinesModule,
66862195 62 "TalkOngoingCalls" : TalkOngoingCallsModule,
81675874 63 },
64 xsrf_cookies = True,
65 )
9068dba1 66 settings.update(kwargs)
5cf160e0 67
ae0228e1
MT
68 tornado.web.Application.__init__(self, **settings)
69
70 self.settings["static_path"] = static_path = os.path.join(BASEDIR, "static")
71 static_handlers = [
72 (r"/static/(.*)", tornado.web.StaticFileHandler, dict(path = static_path)),
73 (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
74 (r"/(robots\.txt)", tornado.web.StaticFileHandler, dict(path = static_path)),
75 ]
76
66862195
MT
77 authentication_handlers = [
78 (r"/login", LoginHandler),
79 (r"/logout", LogoutHandler),
80 ]
81
d4dc517c 82 self.add_handlers(r"(dev|www)\.ipfire\.(at|org)", [
940227cb
MT
83 # Entry site that lead the user to index
84 (r"/", IndexHandler),
85 (r"/index\.?(s?html?)?", RootHandler),
86
87 # Handle news items
940227cb 88 (r"/news", NewsIndexHandler),
7771acea 89 (r"/news/year/([0-9]*)", NewsYearHandler),
940227cb 90 (r"/news/(.*)", NewsItemHandler),
940227cb 91
81675874 92 # Download sites
60b0917c
MT
93 (r"/download", DownloadHandler),
94 (r"/downloads", tornado.web.RedirectHandler, { "url" : "/download" }),
940227cb 95
8d48f4ef
MT
96 # Handle old pages that have moved elsewhere
97 (r"/screenshots", tornado.web.RedirectHandler, { "url" : "/about" }),
60024cc8 98 (r"/about", tornado.web.RedirectHandler, { "url" : "/features" }),
c801ee56 99 (r"/features/.*", tornado.web.RedirectHandler, { "url" : "/features" }),
60b0917c 100 (r"/getinvolved", tornado.web.RedirectHandler, { "url" : "/get-involved" }),
60024cc8 101
e64ce07e
MT
102 # Donate
103 (r"/donate", DonateHandler),
104 (r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }),
8d48f4ef 105
f11f1807
MT
106 # Old imprint
107 (r"/imprint", tornado.web.RedirectHandler, { "url" : "/legal" }),
108
de683d7c 109 # RSS feed
bcc3ed4d 110 (r"/news.rss", RSSNewsHandler),
de683d7c
MT
111
112 # Redirection for bookmarks, etc.
940227cb
MT
113 (r"/(de|en)/(.*)", LangCompatHandler)
114
115 ] + static_handlers + [
81675874 116 # Always the last rule
940227cb
MT
117 (r"/(.*)", StaticHandler),
118 ])
119
940227cb 120 # downloads.ipfire.org
80594ae3 121 self.add_handlers(r"downloads?(\.dev)?\.ipfire\.org", [
940227cb
MT
122 (r"/", DownloadsIndexHandler),
123 (r"/latest", DownloadsLatestHandler),
9068dba1
MT
124 (r"/release/(\d)", DownloadsReleaseHandler),
125 (r"/release/([\w\.\-]*)", DownloadsReleaseHandler),
940227cb
MT
126 (r"/older", DownloadsOlderHandler),
127 (r"/development", DownloadsDevelopmentHandler),
128 (r"/mirrors", tornado.web.RedirectHandler, { "url" : "http://mirrors.ipfire.org/" }),
129 (r"/source", tornado.web.RedirectHandler, { "url" : "http://source.ipfire.org/" }),
60024cc8 130 (r"/download-splash", DownloadSplashHandler),
54af860e 131 ] + static_handlers + [
edd297c4 132 (r"/(iso|torrent)/(.*)", DownloadCompatHandler),
54af860e
MT
133 (r"/(.*)", DownloadFileHandler),
134 ])
940227cb
MT
135
136 # mirrors.ipfire.org
8fceca0a 137 self.add_handlers(r"mirrors(\.dev)?\.ipfire\.org", [
940227cb 138 (r"/", MirrorIndexHandler),
9068dba1 139 (r"/mirror/(.*)", MirrorItemHandler),
940227cb
MT
140 ] + static_handlers)
141
d0d074e0 142 # planet.ipfire.org
7cad1818 143 self.add_handlers(r"planet(\.dev)?\.ipfire\.org", [
940227cb 144 (r"/", PlanetMainHandler),
d88b8f41 145 (r"/hottest", PlanetHotEntriesHandler),
d0d074e0 146 (r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler),
27066195 147 (r"/user/([a-z0-9_-]+)", PlanetUserHandler),
2bdd073f 148 (r"/search", PlanetSearchHandler),
cc3b928d 149 (r"/year/(\d+)", PlanetYearHandler),
bcc3ed4d
MT
150
151 # RSS
152 (r"/rss", RSSPlanetAllHandler),
153 (r"/user/([a-z0-9_-]+)/rss", RSSPlanetUserHandler),
20ccd136 154 (r"/news.rss", tornado.web.RedirectHandler, { "url" : "/rss" }),
d0d074e0
MT
155 ] + static_handlers)
156
66862195 157 # fireinfo.ipfire.org
8fceca0a 158 self.add_handlers(r"fireinfo(\.dev)?\.ipfire\.org", [
66862195
MT
159 (r"/", FireinfoIndexHandler),
160 (r"/device/driver/(.*)", FireinfoDeviceDriverDetail),
161 (r"/device/vendors", FireinfoDeviceVendorsHandler),
162 (r"/device/(pci|usb)/([0-9a-f]{4})", FireinfoDeviceVendorHandler),
163 (r"/device/(pci|usb)/([0-9a-f]{4})/([0-9a-f]{4})", FireinfoDeviceModelHandler),
164
165 # Show profiles
166 (r"/profile/random", FireinfoRandomProfileHandler),
167 (r"/profile/([a-z0-9]{40})", FireinfoProfileDetailHandler),
91a446f0 168
30852a9e 169 # Send profiles.
66862195
MT
170 (r"/send/([a-z0-9]+)", FireinfoProfileSendHandler),
171
172 # Stats handlers
173 (r"/statistics", FireinfoStatsHandler),
174 (r"/statistics/processors", FireinfoStatsProcessorsHandler),
175 (r"/statistics/processors/(arm|x86)", FireinfoStatsProcessorDetailHandler),
176 (r"/statistics/geo-locations", FireinfoStatsGeoHandler),
177 (r"/statistics/languages", FireinfoStatsLanguagesHandler),
178 (r"/statistics/memory", FireinfoStatsMemoryHandler),
179 (r"/statistics/networking", FireinfoStatsNetworkingHandler),
180 (r"/statistics/releases", FireinfoStatsReleasesHandler),
181 (r"/statistics/virtualization", FireinfoStatsVirtualHandler),
182
183 # Compat handlers
184 (r"/stats", tornado.web.RedirectHandler, { "url" : "/statistics" }),
185 (r"/stats/cpus", tornado.web.RedirectHandler, { "url" : "/statistics/processors" }),
186 (r"/stats/geo", tornado.web.RedirectHandler, { "url" : "/statistics/geo-locations" }),
187 (r"/stats/network", tornado.web.RedirectHandler, { "url" : "/statistics/networking" }),
188 (r"/stats/oses", tornado.web.RedirectHandler, { "url" : "/statistics/releases" }),
189 (r"/stats/virtual", tornado.web.RedirectHandler, { "url" : "/statistics/virtualization" }),
190 (r"/vendor/(pci|usb)/([0-9a-f]{4})", FireinfoDeviceVendorCompatHandler),
191 (r"/model/(pci|usb)/([0-9a-f]{4})/([0-9a-f]{4})", FireinfoDeviceModelCompatHandler),
ae0228e1 192 ] + static_handlers)
5cf160e0 193
c37ec602 194 # i-use.ipfire.org
8fceca0a 195 self.add_handlers(r"i-use(\.dev)?\.ipfire\.org", [
c37ec602
MT
196 (r"/profile/([a-f0-9]{40})/([0-9]+).png", IUseImage),
197 ])
198
8e2e1261
MT
199 # boot.ipfire.org
200 BOOT_STATIC_PATH = os.path.join(self.settings["static_path"], "netboot")
8fceca0a 201 self.add_handlers(r"boot(\.dev)?\.ipfire\.org", [
8e2e1261
MT
202 (r"/", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org/download" }),
203
204 # Configurations
37b5c0cf 205 (r"/premenu.cfg", PremenuCfgHandler),
8e2e1261
MT
206 (r"/menu.gpxe", MenuGPXEHandler),
207 (r"/menu.cfg", MenuCfgHandler),
8e2e1261
MT
208
209 # Static files
37b5c0cf 210 (r"/(boot\.png|pxelinux\.0|menu\.c32|vesamenu\.c32)",
8e2e1261
MT
211 tornado.web.StaticFileHandler, { "path" : BOOT_STATIC_PATH }),
212 ])
213
60024cc8 214 # nopaste.ipfire.org
8fceca0a 215 self.add_handlers(r"nopaste(\.dev)?\.ipfire\.org", [
66862195
MT
216 (r"/", NopasteCreateHandler),
217 (r"/raw/(.*)", NopasteRawHandler),
218 (r"/view/(.*)", NopasteViewHandler),
219 ] + authentication_handlers + static_handlers)
60024cc8 220
9068dba1 221 # geoip.ipfire.org
8fceca0a 222 self.add_handlers(r"geoip(\.dev)?\.ipfire\.org", [
9068dba1
MT
223 (r"/", GeoIPHandler),
224 ] + static_handlers)
225
66862195
MT
226 # talk.ipfire.org
227 self.add_handlers(r"talk(\.dev)?\.ipfire\.org", [
228 (r"/", TalkIndexHandler),
66862195 229 (r"/conferences", TalkConferencesHandler),
66862195 230 (r"/diagnosis", TalkDiagnosisHandler),
40818cf2 231 (r"/hangup/(.*)", TalkHangupChannelHandler),
66862195
MT
232 (r"/phonebook/(\w+)", TalkPhonebookAccountHandler),
233 (r"/phonebook", TalkPhonebookHandler),
234 (r"/profile", TalkProfileHandler),
66862195
MT
235 ] + authentication_handlers + static_handlers)
236
2cd9af74
MT
237 # accounts.ipfire.org
238 self.add_handlers(r"accounts(\.dev)?\.ipfire\.org", [
239 (r"/avatar/(\w+)\.jpg", AccountsAvatarHandler),
240 ] + static_handlers)
241
d0d074e0 242 # admin.ipfire.org
7cad1818 243 self.add_handlers(r"admin(\.dev)?\.ipfire\.org", [
d0d074e0 244 (r"/", AdminIndexHandler),
d0d074e0
MT
245 # Accounts
246 (r"/accounts", AdminAccountsHandler),
940227cb
MT
247 #(r"/accounts/delete/([0-9]+)", AdminAccountsDeleteHandler),
248 #(r"/accounts/edit/([0-9]+)", AdminAccountsEditHandler),
d0d074e0
MT
249 # Planet
250 (r"/planet", AdminPlanetHandler),
251 (r"/planet/compose", AdminPlanetComposeHandler),
67ab72b8
MT
252 (r"/planet/edit/(.*)", AdminPlanetEditHandler),
253 (r"/planet/publish/(.*)", AdminPlanetPublishHandler),
940227cb
MT
254 # Mirrors
255 (r"/mirrors", AdminMirrorsHandler),
256 (r"/mirrors/create", AdminMirrorsCreateHandler),
257 (r"/mirrors/delete/([0-9]+)", AdminMirrorsDeleteHandler),
258 (r"/mirrors/edit/([0-9]+)", AdminMirrorsEditHandler),
259 (r"/mirrors/details/([0-9]+)", AdminMirrorsDetailsHandler),
260 (r"/mirrors/update", AdminMirrorsUpdateHandler),
71e1ece7 261 # Fireinfo
66862195 262 (r"/fireinfo", AdminFireinfoHandler),
60024cc8
MT
263 # Downloads
264 (r"/downloads", AdminDownloadsHandler),
265 (r"/downloads/mirrors", AdminDownloadsMirrorsHandler),
d0d074e0
MT
266 # API
267 (r"/api/planet/render", AdminApiPlanetRenderMarkupHandler)
66862195 268 ] + authentication_handlers + static_handlers)
d0d074e0 269
ae0228e1 270 # ipfire.org
3add293a 271 self.add_handlers(r".*", [
ae0228e1 272 (r".*", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org" })
5cf160e0 273 ])
3add293a 274
feb02477
MT
275 logging.info("Successfully initialied application")
276
277 self.__running = True
278
3add293a 279 def __del__(self):
feb02477
MT
280 logging.info("Shutting down application")
281
a6dc0bad
MT
282 @property
283 def backend(self):
284 if self.__backend is None:
9068dba1
MT
285 configfile = self.settings.get("configfile", None)
286 if not configfile:
287 raise RuntimeException("Could not find configuration file")
288
2cd9af74
MT
289 self.__backend = backend.Backend(configfile=configfile,
290 debug=self.settings.get("debug", False))
a6dc0bad
MT
291
292 return self.__backend
293
feb02477
MT
294 @property
295 def ioloop(self):
296 return tornado.ioloop.IOLoop.instance()
297
940227cb 298 def shutdown(self, *args):
feb02477
MT
299 logging.debug("Caught shutdown signal")
300 self.ioloop.stop()
301
302 self.__running = False
303
304 def run(self, port=8001):
305 logging.debug("Going to background")
306
307 http_server = tornado.httpserver.HTTPServer(self, xheaders=True)
feb02477 308
e48a74ea 309 num_processes = multiprocessing.cpu_count()
cef37a4a 310
940227cb
MT
311 # If we are not running in debug mode, we can actually run multiple
312 # frontends to get best performance out of our service.
313 if not self.settings["debug"]:
314 http_server.bind(port)
cef37a4a 315 http_server.start(num_processes=num_processes)
940227cb
MT
316 else:
317 http_server.listen(port)
6aa3b1ec 318
de683d7c
MT
319 # All requests should be done after 30 seconds or they will be killed.
320 self.ioloop.set_blocking_log_threshold(30)
feb02477 321
940227cb 322 self.ioloop.start()
feb02477
MT
323
324 def reload(self):
325 logging.debug("Caught reload signal")
cc3b928d
MT
326
327 def format_month_name(self, handler, month):
328 _ = handler.locale.translate
329
330 if month == 1:
331 return _("January")
332 elif month == 2:
333 return _("February")
334 elif month == 3:
335 return _("March")
336 elif month == 4:
337 return _("April")
338 elif month == 5:
339 return _("May")
340 elif month == 6:
341 return _("June")
342 elif month == 7:
343 return _("July")
344 elif month == 8:
345 return _("August")
346 elif month == 9:
347 return _("September")
348 elif month == 10:
349 return _("October")
350 elif month == 11:
351 return _("November")
352 elif month == 12:
353 return _("December")
354
355 return month