]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/__init__.py
Add planet functionality.
[people/shoehn/ipfire.org.git] / www / webapp / __init__.py
1 #/usr/bin/python
2
3 import os.path
4 import simplejson
5
6 simplejson._default_decoder = simplejson.JSONDecoder(encoding="latin-1")
7
8 import tornado.locale
9 import tornado.options
10 import tornado.web
11
12 from db import HashDatabase, UserDatabase
13 from handlers import *
14 from ui_modules import *
15
16 BASEDIR = os.path.join(os.path.dirname(__file__), "..")
17
18 tornado.locale.load_translations(os.path.join(BASEDIR, "translations"))
19 tornado.options.enable_pretty_logging()
20
21 class Application(tornado.web.Application):
22 def __init__(self):
23 settings = dict(
24 cookie_secret = "aXBmaXJlY29va2llc2VjcmV0Cg==",
25 #debug = True,
26 gzip = True,
27 login_url = "/login",
28 template_path = os.path.join(BASEDIR, "templates"),
29 ui_modules = {
30 "Build" : BuildModule,
31 "Menu" : MenuModule,
32 "MenuItem" : MenuItemModule,
33 "NewsItem" : NewsItemModule,
34 "PlanetEntry" : PlanetEntryModule,
35 "ReleaseItem" : ReleaseItemModule,
36 "SidebarBanner" : SidebarBannerModule,
37 "SidebarItem" : SidebarItemModule,
38 "SidebarRelease" : SidebarReleaseModule,
39 },
40 xsrf_cookies = True,
41 )
42
43 tornado.web.Application.__init__(self, **settings)
44
45 # Initialize database connections
46 self.hash_db = HashDatabase()
47 self.planet_db = tornado.database.Connection("172.28.1.150", "planet", user="planet")
48 self.user_db = UserDatabase()
49
50 self.settings["static_path"] = static_path = os.path.join(BASEDIR, "static")
51 static_handlers = [
52 (r"/static/(.*)", tornado.web.StaticFileHandler, dict(path = static_path)),
53 (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
54 (r"/(robots\.txt)", tornado.web.StaticFileHandler, dict(path = static_path)),
55 ]
56
57 self.add_handlers(r"(dev|www)\.ipfire\.(at|org)", [
58 # Entry sites that lead the user to index
59 (r"/", MainHandler),
60 (r"/[A-Za-z]{2}/?", MainHandler),
61 #
62 (r"/[A-Za-z]{2}/index", IndexHandler),
63 (r"/[A-Za-z]{2}/news", NewsHandler),
64 (r"/[A-Za-z]{2}/builds", BuildHandler),
65 (r"/[A-Za-z]{2}/translations?", TranslationHandler),
66 # Download sites
67 (r"/[A-Za-z]{2}/downloads?", DownloadHandler),
68 (r"/[A-Za-z]{2}/downloads?/all", DownloadAllHandler),
69 (r"/[A-Za-z]{2}/downloads?/development", DownloadDevelopmentHandler),
70 (r"/[A-Za-z]{2}/downloads?/mirrors", DownloadMirrorHandler),
71 (r"/[A-Za-z]{2}/downloads?/torrents", DownloadTorrentHandler),
72 # RSS feed
73 (r"/([A-Za-z]{2})/news.rss", RSSHandler),
74 (r"/data/feeds/main-([A-Za-z]{2}).rss", RSSHandler),
75 # API
76 (r"/api/cluster_info", ApiClusterInfoHandler),
77 # Always the last rule
78 (r"/[A-Za-z]{2}/(.*)", StaticHandler),
79 ] + static_handlers)
80
81 # download.ipfire.org
82 self.add_handlers(r"download\.ipfire\.org", [
83 (r"/", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org/" }),
84 (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
85 (r"/(.*)", DownloadFileHandler),
86 ])
87
88 # planet.ipfire.org
89 self.add_handlers(r"planet\.ipfire\.org", [
90 (r"/", MainHandler),
91 (r"/[A-Za-z]{2}/?", MainHandler),
92 (r"/[A-Za-z]{2}/index", PlanetMainHandler),
93 (r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler),
94 (r"/user/([a-z0-9]+)", PlanetUserHandler),
95 ] + static_handlers)
96
97 # source.ipfire.org
98 self.add_handlers(r"source\.ipfire\.org", [
99 (r"/", MainHandler),
100 (r"/[A-Za-z]{2}/?", MainHandler),
101 (r"/[A-Za-z]{2}/index", SourceHandler),
102 (r"(/source.*|/toolchains/.*)", SourceDownloadHandler),
103 ] + static_handlers)
104
105 # torrent.ipfire.org
106 self.add_handlers(r"torrent\.ipfire\.org", [
107 (r"/", MainHandler),
108 (r"/[A-Za-z]{2}/?", MainHandler),
109 (r"/[A-Za-z]{2}/index", DownloadTorrentHandler),
110 ] + static_handlers)
111
112 # tracker.ipfire.org
113 self.add_handlers(r"tracker\.ipfire\.org", [
114 (r"/", MainHandler),
115 (r"/[A-Za-z]{2}/?", MainHandler),
116 (r"/[A-Za-z]{2}/index", DownloadTorrentHandler),
117 ] + static_handlers)
118
119 # admin.ipfire.org
120 self.add_handlers(r"admin\.ipfire\.org", [
121 (r"/", AdminIndexHandler),
122 (r"/login", AuthLoginHandler),
123 (r"/logout", AuthLogoutHandler),
124 # Accounts
125 (r"/accounts", AdminAccountsHandler),
126 (r"/accounts/edit/([0-9]+)", AdminAccountsEditHandler),
127 # Planet
128 (r"/planet", AdminPlanetHandler),
129 (r"/planet/compose", AdminPlanetComposeHandler),
130 (r"/planet/edit/([0-9]+)", AdminPlanetEditHandler),
131 # API
132 (r"/api/planet/render", AdminApiPlanetRenderMarkupHandler)
133 ] + static_handlers)
134
135 # ipfire.org
136 self.add_handlers(r".*", [
137 (r".*", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org" })
138 ])
139
140 def __del__(self):
141 from mirrors import mirrors
142 mirrors.stop()