]> git.ipfire.org Git - people/jschlag/pbs.git/blame - web/__init__.py
Unescape xsrf form HTML.
[people/jschlag/pbs.git] / web / __init__.py
CommitLineData
9137135a
MT
1#!/usr/bin/python
2
3import logging
4import os.path
5import tornado.httpserver
6import tornado.locale
7import tornado.options
8import tornado.web
9
10from handlers import *
11from ui_modules import *
12
13BASEDIR = os.path.join(os.path.dirname(__file__), "..", "data")
14
15# Enable logging
16tornado.options.parse_command_line()
17
18class Application(tornado.web.Application):
19 def __init__(self):
f6e6ff79
MT
20 self.__pakfire = None
21
9137135a 22 settings = dict(
9137135a 23 debug = True,
f6e6ff79 24 gzip = False,
9137135a
MT
25 login_url = "/login",
26 template_path = os.path.join(BASEDIR, "templates"),
27 ui_modules = {
f6e6ff79
MT
28 "Text" : TextModule,
29 "Modal" : ModalModule,
30
31 "Footer" : FooterModule,
32
33 # Logging
34 "Log" : LogModule,
35 "LogEntry" : LogEntryModule,
36 "LogEntryComment" : LogEntryCommentModule,
37
38 "BuildHeadline" : BuildHeadlineModule,
39 "BuildStateWarnings" : BuildStateWarningsModule,
40
41 "BugsTable" : BugsTableModule,
42 "BuildLog" : BuildLogModule,
43 "BuildOffset" : BuildOffsetModule,
44 "BuildTable" : BuildTableModule,
45 "CommitsTable" : CommitsTableModule,
46 "JobsTable" : JobsTableModule,
47 "JobsList" : JobsListModule,
48 "CommentsTable" : CommentsTableModule,
49 "FilesTable" : FilesTableModule,
50 "LogTable" : LogTableModule,
51 "LogFilesTable" : LogFilesTableModule,
52 "Maintainer" : MaintainerModule,
53 "PackagesTable" : PackagesTableModule,
54 "PackageTable2" : PackageTable2Module,
55 "PackageHeader" : PackageHeaderModule,
56 "PackageFilesTable" : PackageFilesTableModule,
57 "RepositoryTable" : RepositoryTableModule,
58 "RepoActionsTable" : RepoActionsTableModule,
59 "SourceTable" : SourceTableModule,
60 "UpdatesTable" : UpdatesTableModule,
61 "UsersTable" : UsersTableModule,
62 "WatchersSidebarTable" : WatchersSidebarTableModule,
9137135a
MT
63 },
64 xsrf_cookies = True,
65 )
66
67 # Load translations.
68 tornado.locale.load_gettext_translations(
69 os.path.join(BASEDIR, "translations"), "pakfire")
70
71 tornado.web.Application.__init__(self, **settings)
72
73 self.settings["static_path"] = static_path = os.path.join(BASEDIR, "static")
74 static_handlers = [
75 (r"/static/(.*)", tornado.web.StaticFileHandler, dict(path = static_path)),
76 (r"/(favicon\.ico)", tornado.web.StaticFileHandler, dict(path = static_path)),
77 (r"/(robots\.txt)", tornado.web.StaticFileHandler, dict(path = static_path)),
78 ]
79
80 self.add_handlers(r".*", [
81 # Entry site that lead the user to index
82 (r"/", IndexHandler),
83
f6e6ff79
MT
84 # Advanced options for logged in users.
85 (r"/advanced", AdvancedHandler),
86
9137135a
MT
87 # Handle all the users logins/logouts/registers and stuff.
88 (r"/login", LoginHandler),
89 (r"/logout", LogoutHandler),
90 (r"/register", RegisterHandler),
f6e6ff79
MT
91 (r"/password-recovery", PasswordRecoveryHandler),
92
93 # User profiles
9137135a
MT
94 (r"/users", UsersHandler),
95 (r"/users/comments", UsersCommentsHandler),
f6e6ff79
MT
96 (r"/user/impersonate", UserImpersonateHandler),
97 (r"/user/(\w+)/passwd", UserPasswdHandler),
98 (r"/user/(\w+)/delete", UserDeleteHandler),
99 (r"/user/(\w+)/edit", UserEditHandler),
100 (r"/user/(\w+)/activate", ActivationHandler),
9137135a 101 (r"/user/(\w+)", UserHandler),
9137135a 102 (r"/profile", UserHandler),
f6e6ff79 103 (r"/profile/builds", UsersBuildsHandler),
9137135a
MT
104
105 # Packages
106 (r"/packages", PackageListHandler),
f6e6ff79
MT
107 (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", PackageDetailHandler),
108 (r"/package/([\w\-\+]+)/properties", PackagePropertiesHandler),
9137135a
MT
109 (r"/package/([\w\-\+]+)", PackageNameHandler),
110
111 # Files
112 (r"/file/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", FileDetailHandler),
113
114 # Builds
f6e6ff79 115 (r"/builds", BuildsHandler),
9137135a 116 (r"/builds/filter", BuildFilterHandler),
f6e6ff79 117 (r"/builds/queue", BuildQueueHandler),
9137135a 118 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", BuildDetailHandler),
f6e6ff79
MT
119 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/bugs", BuildBugsHandler),
120 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/manage", BuildManageHandler),
121 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/comment", BuildDetailCommentHandler),
122 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/priority", BuildPriorityHandler),
123 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/state", BuildStateHandler),
124 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/watch", BuildWatchersAddHandler),
125 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/watchers", BuildWatchersHandler),
126 (r"/build/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/delete", BuildDeleteHandler),
127
128 # Jobs
129 (r"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", JobDetailHandler),
130 (r"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/abort", JobAbortHandler),
131 (r"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/buildroot", JobBuildrootHandler),
132 (r"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/schedule", JobScheduleHandler),
9137135a
MT
133
134 # Builders
135 (r"/builders", BuilderListHandler),
136 (r"/builder/new", BuilderNewHandler),
f6e6ff79
MT
137 (r"/builder/([A-Za-z0-9\-\.]+)/enable", BuilderEnableHander),
138 (r"/builder/([A-Za-z0-9\-\.]+)/disable", BuilderDisableHander),
139 (r"/builder/([A-Za-z0-9\-\.]+)/delete", BuilderDeleteHandler),
140 (r"/builder/([A-Za-z0-9\-\.]+)/edit", BuilderEditHandler),
141 (r"/builder/([A-Za-z0-9\-\.]+)/renew", BuilderRenewPassphraseHandler),
9137135a
MT
142 (r"/builder/([A-Za-z0-9\-\.]+)", BuilderDetailHandler),
143
9137135a 144 # Distributions
f6e6ff79
MT
145 (r"/distros", DistributionListHandler),
146 (r"/distro/([A-Za-z0-9\-\.]+)", DistributionDetailHandler),
147
148 # XXX THOSE URLS ARE DEPRECATED
9137135a
MT
149 (r"/distribution/delete/([A-Za-z0-9\-\.]+)", DistributionDetailHandler),
150 (r"/distribution/edit/([A-Za-z0-9\-\.]+)", DistributionEditHandler),
f6e6ff79
MT
151
152 (r"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)",
153 RepositoryDetailHandler),
154 (r"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)\.repo",
155 RepositoryConfHandler),
156 (r"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)/mirrorlist",
157 RepositoryMirrorlistHandler),
158 (r"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)/edit",
159 RepositoryEditHandler),
160
161 (r"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)",
162 DistroSourceDetailHandler),
163 (r"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)/commits",
164 DistroSourceCommitsHandler),
165 (r"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)/([\w]{40})",
166 DistroSourceCommitDetailHandler),
167 (r"/distro/([A-Za-z0-9\-\.]+)/source/([A-Za-z0-9\-\.]+)/([\w]{40})/reset",
168 DistroSourceCommitResetHandler),
169
170 (r"/distro/([A-Za-z0-9\-\.]+)/update/create",
171 DistroUpdateCreateHandler),
172 (r"/distro/([A-Za-z0-9\-\.]+)/update/(\d+)/(\d+)",
173 DistroUpdateDetailHandler),
174
175 # Updates
176 (r"/updates", UpdatesHandler),
177
178 # Mirrors
179 (r"/mirrors", MirrorListHandler),
180 (r"/mirror/new", MirrorNewHandler),
181 (r"/mirror/([A-Za-z0-9\-\.]+)/delete", MirrorDeleteHandler),
182 (r"/mirror/([A-Za-z0-9\-\.]+)/edit", MirrorEditHandler),
183 (r"/mirror/([A-Za-z0-9\-\.]+)", MirrorDetailHandler),
184
185 # Key management
186 (r"/keys", KeysListHandler),
187 (r"/key/import", KeysImportHandler),
188 (r"/key/([A-Z0-9]+)", KeysDownloadHandler),
189 (r"/key/([A-Z0-9]+)/delete", KeysDeleteHandler),
190
191 # Statistics
192 (r"/statistics", StatisticsMainHandler),
9137135a
MT
193
194 # Documents
195 (r"/documents", DocsIndexHandler),
196 (r"/documents/builds", DocsBuildsHandler),
197 (r"/documents/users", DocsUsersHandler),
f6e6ff79 198 (r"/documents/what-is-the-pakfire-build-service", DocsWhatsthisHandler),
9137135a
MT
199
200 # Search
201 (r"/search", SearchHandler),
202
f6e6ff79
MT
203 # Uploads
204 (r"/uploads", UploadsHandler),
9137135a
MT
205
206 # Log
207 (r"/log", LogHandler),
9137135a 208
f6e6ff79
MT
209 ] + static_handlers + [
210
211 # Everything else is catched by the 404 handler.
212 (r"/.*", Error404Handler),
213 ])
9137135a
MT
214
215 logging.info("Successfully initialied application")
216
f6e6ff79
MT
217 @property
218 def pakfire(self):
219 if self.__pakfire is None:
220 self.__pakfire = backend.Pakfire()
221
222 return self.__pakfire
223
9137135a
MT
224 def __del__(self):
225 logging.info("Shutting down application")
226
227 @property
228 def ioloop(self):
229 return tornado.ioloop.IOLoop.instance()
230
231 def shutdown(self, *args):
232 logging.debug("Caught shutdown signal")
233 self.ioloop.stop()
234
235 def run(self, port=80):
236 logging.debug("Going to background")
237
9137135a
MT
238 http_server = tornado.httpserver.HTTPServer(self, xheaders=True)
239
240 # If we are not running in debug mode, we can actually run multiple
241 # frontends to get best performance out of our service.
242 if not self.settings["debug"]:
243 http_server.bind(port)
244 http_server.start(num_processes=4)
245 else:
246 http_server.listen(port)
247
f6e6ff79
MT
248 # All requests should be done after 60 seconds or they will be killed.
249 self.ioloop.set_blocking_log_threshold(60)
250
9137135a
MT
251 self.ioloop.start()
252
253 def reload(self):
254 logging.debug("Caught reload signal")