]>
Commit | Line | Data |
---|---|---|
81675874 | 1 | #/usr/bin/python |
2 | ||
feb02477 | 3 | import logging |
81675874 | 4 | import os.path |
8ccd2ff0 MT |
5 | import simplejson |
6 | ||
feb02477 | 7 | import tornado.httpserver |
81675874 | 8 | import tornado.locale |
9 | import tornado.options | |
10 | import tornado.web | |
11 | ||
feb02477 MT |
12 | import datastore |
13 | ||
8ccd2ff0 MT |
14 | from handlers import * |
15 | from ui_modules import * | |
81675874 | 16 | |
17 | BASEDIR = os.path.join(os.path.dirname(__file__), "..") | |
18 | ||
19 | tornado.locale.load_translations(os.path.join(BASEDIR, "translations")) | |
81675874 | 20 | |
21 | class 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() |