]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - www/webapp/__init__.py
Create a global webapp database connection and create a config class.
[people/shoehn/ipfire.org.git] / www / webapp / __init__.py
CommitLineData
81675874 1#/usr/bin/python
2
feb02477 3import logging
81675874 4import os.path
8ccd2ff0
MT
5import simplejson
6
feb02477 7import tornado.httpserver
81675874 8import tornado.locale
9import tornado.options
10import tornado.web
11
feb02477
MT
12import datastore
13
8ccd2ff0
MT
14from handlers import *
15from ui_modules import *
81675874 16
17BASEDIR = os.path.join(os.path.dirname(__file__), "..")
18
19tornado.locale.load_translations(os.path.join(BASEDIR, "translations"))
81675874 20
21class Application(tornado.web.Application):
22 def __init__(self):
81675874 23 settings = dict(
24 cookie_secret = "aXBmaXJlY29va2llc2VjcmV0Cg==",
25 #debug = True,
26 gzip = True,
d0d074e0 27 login_url = "/login",
81675874 28 template_path = os.path.join(BASEDIR, "templates"),
29 ui_modules = {
30 "Build" : BuildModule,
31 "Menu" : MenuModule,
32 "MenuItem" : MenuItemModule,
33 "NewsItem" : NewsItemModule,
d0d074e0 34 "PlanetEntry" : PlanetEntryModule,
81675874 35 "ReleaseItem" : ReleaseItemModule,
36 "SidebarBanner" : SidebarBannerModule,
37 "SidebarItem" : SidebarItemModule,
38 "SidebarRelease" : SidebarReleaseModule,
39 },
40 xsrf_cookies = True,
41 )
5cf160e0 42
ae0228e1
MT
43 tornado.web.Application.__init__(self, **settings)
44
feb02477 45 self.ds = datastore.DataStore(self)
4cb3de1c 46
ae0228e1
MT
47 self.settings["static_path"] = static_path = os.path.join(BASEDIR, "static")
48 static_handlers = [
49 (r"/static/(.*)", tornado.web.StaticFileHandler, dict(path = static_path)),
50 (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
51 (r"/(robots\.txt)", tornado.web.StaticFileHandler, dict(path = static_path)),
52 ]
53
d4dc517c 54 self.add_handlers(r"(dev|www)\.ipfire\.(at|org)", [
81675874 55 # Entry sites that lead the user to index
56 (r"/", MainHandler),
57 (r"/[A-Za-z]{2}/?", MainHandler),
58 #
59 (r"/[A-Za-z]{2}/index", IndexHandler),
60 (r"/[A-Za-z]{2}/news", NewsHandler),
61 (r"/[A-Za-z]{2}/builds", BuildHandler),
81675874 62 # Download sites
63 (r"/[A-Za-z]{2}/downloads?", DownloadHandler),
64 (r"/[A-Za-z]{2}/downloads?/all", DownloadAllHandler),
65 (r"/[A-Za-z]{2}/downloads?/development", DownloadDevelopmentHandler),
3add293a 66 (r"/[A-Za-z]{2}/downloads?/mirrors", DownloadMirrorHandler),
81675874 67 (r"/[A-Za-z]{2}/downloads?/torrents", DownloadTorrentHandler),
e48d9ae6
MT
68 # RSS feed
69 (r"/([A-Za-z]{2})/news.rss", RSSHandler),
70 (r"/data/feeds/main-([A-Za-z]{2}).rss", RSSHandler),
81675874 71 # Always the last rule
72 (r"/[A-Za-z]{2}/(.*)", StaticHandler),
ae0228e1 73 ] + static_handlers)
81675874 74
5cf160e0 75 # download.ipfire.org
ae0228e1 76 self.add_handlers(r"download\.ipfire\.org", [
3add293a
MT
77 (r"/", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org/" }),
78 (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
79 (r"/(.*)", DownloadFileHandler),
80 ])
5cf160e0 81
d0d074e0
MT
82 # planet.ipfire.org
83 self.add_handlers(r"planet\.ipfire\.org", [
84 (r"/", MainHandler),
85 (r"/[A-Za-z]{2}/?", MainHandler),
86 (r"/[A-Za-z]{2}/index", PlanetMainHandler),
87 (r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler),
88 (r"/user/([a-z0-9]+)", PlanetUserHandler),
89 ] + static_handlers)
90
5cf160e0 91 # source.ipfire.org
ae0228e1 92 self.add_handlers(r"source\.ipfire\.org", [
5cf160e0 93 (r"/", MainHandler),
fdb59cb9 94 (r"/[A-Za-z]{2}/?", MainHandler),
e2b0b0e4 95 (r"/[A-Za-z]{2}/index", SourceHandler),
7c1dc100 96 (r"(/source.*|/toolchains/.*)", SourceDownloadHandler),
ae0228e1 97 ] + static_handlers)
5cf160e0
MT
98
99 # torrent.ipfire.org
ae0228e1 100 self.add_handlers(r"torrent\.ipfire\.org", [
5cf160e0 101 (r"/", MainHandler),
fdb59cb9 102 (r"/[A-Za-z]{2}/?", MainHandler),
5cf160e0 103 (r"/[A-Za-z]{2}/index", DownloadTorrentHandler),
ae0228e1 104 ] + static_handlers)
5cf160e0
MT
105
106 # tracker.ipfire.org
ae0228e1 107 self.add_handlers(r"tracker\.ipfire\.org", [
5cf160e0 108 (r"/", MainHandler),
fdb59cb9 109 (r"/[A-Za-z]{2}/?", MainHandler),
5cf160e0 110 (r"/[A-Za-z]{2}/index", DownloadTorrentHandler),
43d991f6 111 (r"/a.*", TrackerAnnounceHandler),
e2afbd6a 112 (r"/scrape", TrackerScrapeHandler),
ae0228e1
MT
113 ] + static_handlers)
114
d0d074e0
MT
115 # admin.ipfire.org
116 self.add_handlers(r"admin\.ipfire\.org", [
117 (r"/", AdminIndexHandler),
118 (r"/login", AuthLoginHandler),
119 (r"/logout", AuthLogoutHandler),
120 # Accounts
121 (r"/accounts", AdminAccountsHandler),
122 (r"/accounts/edit/([0-9]+)", AdminAccountsEditHandler),
123 # Planet
124 (r"/planet", AdminPlanetHandler),
125 (r"/planet/compose", AdminPlanetComposeHandler),
126 (r"/planet/edit/([0-9]+)", AdminPlanetEditHandler),
127 # API
128 (r"/api/planet/render", AdminApiPlanetRenderMarkupHandler)
129 ] + static_handlers)
130
ae0228e1 131 # ipfire.org
3add293a 132 self.add_handlers(r".*", [
ae0228e1 133 (r".*", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org" })
5cf160e0 134 ])
3add293a 135
feb02477
MT
136 logging.info("Successfully initialied application")
137
138 self.__running = True
139
3add293a 140 def __del__(self):
feb02477
MT
141 logging.info("Shutting down application")
142
143 @property
144 def db(self):
145 return self.ds.db
146
147 @property
148 def ioloop(self):
149 return tornado.ioloop.IOLoop.instance()
150
151 def stop(self, *args):
152 logging.debug("Caught shutdown signal")
153 self.ioloop.stop()
154
155 self.__running = False
156
157 def run(self, port=8001):
158 logging.debug("Going to background")
159
160 http_server = tornado.httpserver.HTTPServer(self, xheaders=True)
161 http_server.listen(port)
162
163 self.ioloop.start()
164
165 while self.__running:
166 time.sleep(1)
167
168 self.ds.trigger()
169
170 def reload(self):
171 logging.debug("Caught reload signal")
172
173 self.ds.reload()