]> git.ipfire.org Git - ipfire.org.git/blob - www/webapp/handlers_admin.py
Remove obsolete pakfire CGI scripts.
[ipfire.org.git] / www / webapp / handlers_admin.py
1 #!/usr/bin/python
2
3 import tornado.web
4
5 import matplotlib
6 matplotlib.use("Agg")
7
8 import matplotlib.pyplot as plt
9 import matplotlib.dates
10
11 from handlers_base import *
12
13 import backend
14
15 class AdminBaseHandler(BaseHandler):
16 @property
17 def accounts(self):
18 return backend.Accounts()
19
20 @property
21 def planet(self):
22 return backend.Planet()
23
24 @property
25 def downloads(self):
26 return backend.Downloads()
27
28 def get_current_user(self):
29 return self.get_secure_cookie("account")
30
31
32 class AdminLoginHandler(AdminBaseHandler):
33 def get(self):
34 self.render("admin-login.html")
35
36 def post(self):
37 account = self.accounts.search(self.get_argument("name"))
38 if not account:
39 raise tornado.web.HTTPError(403)
40
41 if account.check_password(self.get_argument("password")):
42 self.set_secure_cookie("account", account.uid)
43 else:
44 raise tornado.web.HTTPError(403)
45
46 self.redirect("/")
47
48
49 class AdminLogoutHandler(AdminBaseHandler):
50 def get(self):
51 self.clear_cookie("account")
52 self.redirect("/")
53
54
55 class AdminIndexHandler(AdminBaseHandler):
56 @tornado.web.authenticated
57 def get(self):
58 self.render("admin-index.html")
59
60
61 class AdminApiPlanetRenderMarkupHandler(AdminBaseHandler):
62 @tornado.web.authenticated
63 def post(self):
64 text = self.get_argument("text", "")
65
66 # Render markup
67 output = {
68 "html" : self.planet.render(text),
69 }
70 self.write(output)
71 self.finish()
72
73
74 class AdminPlanetHandler(AdminBaseHandler):
75 @tornado.web.authenticated
76 def get(self):
77 entries = self.planet.get_entries(limit=100)
78
79 self.render("admin-planet.html", entries=entries)
80
81
82 class AdminPlanetComposeHandler(AdminBaseHandler):
83 @tornado.web.authenticated
84 def get(self, id=None):
85 entry = backend.PlanetEntry()
86
87 if id:
88 entry = self.planet.get_entry_by_id(id)
89
90 self.render("admin-planet-compose.html", entry=entry)
91
92 @tornado.web.authenticated
93 def post(self, id=None):
94 id = self.get_argument("id", id)
95
96 entry = backend.PlanetEntry()
97
98 if id:
99 entry = self.planet.get_entry_by_id(id)
100
101 entry.set("title", self.get_argument("title"))
102 entry.set("markdown", self.get_argument("markdown"))
103 entry.set("author_id", self.current_user)
104
105 if id:
106 self.planet.update_entry(entry)
107 else:
108 self.planet.save_entry(entry)
109
110 self.redirect("/planet")
111
112
113 class AdminPlanetEditHandler(AdminPlanetComposeHandler):
114 pass
115
116
117 class AdminAccountsBaseHandler(AdminBaseHandler):
118 pass
119
120
121 class AdminAccountsHandler(AdminAccountsBaseHandler):
122 @tornado.web.authenticated
123 def get(self):
124 accounts = self.accounts.list()
125 self.render("admin-accounts.html", accounts=accounts)
126
127
128 class AdminAccountsEditHandler(AdminAccountsBaseHandler):
129 @tornado.web.authenticated
130 def get(self, id):
131 account = self.accounts.search(id)
132 if not account:
133 raise tornado.web.HTTPError(404)
134
135 self.render("admin-accounts-edit.html", account=account)
136
137
138 class AdminAccountsDeleteHandler(AdminAccountsBaseHandler):
139 @tornado.web.authenticated
140 def get(self, id):
141 account = self.accounts.search(id)
142 if not account:
143 raise tornado.web.HTTPError(404)
144
145 self.accounts.delete(id)
146 self.redirect("/accounts")
147
148
149 class AdminMirrorsBaseHandler(AdminBaseHandler):
150 @property
151 def mirrors(self):
152 return backend.Mirrors()
153
154
155 class AdminMirrorsHandler(AdminMirrorsBaseHandler):
156 @tornado.web.authenticated
157 def get(self):
158 mirrors = self.mirrors.list()
159
160 self.render("admin-mirrors.html", mirrors=mirrors)
161
162
163 class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler):
164 @tornado.web.authenticated
165 def get(self):
166 self.mirrors.check_all()
167 self.redirect("/mirrors")
168
169
170 class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler):
171 @tornado.web.authenticated
172 def get(self, id=None):
173 if id:
174 mirror = self.db.get("SELECT * FROM mirrors WHERE id = '%s'", int(id))
175 else:
176 mirror = tornado.database.Row(
177 id="",
178 hostname="",
179 owner="",
180 location="",
181 path="/",
182 releases="Y",
183 pakfire2="Y",
184 pakfire3="Y",
185 disabled="N"
186 )
187
188 self.render("admin-mirrors-create.html", mirror=mirror)
189
190 @tornado.web.authenticated
191 def post(self, id=None):
192 args = tornado.database.Row()
193 for key in ("id", "hostname", "owner", "location", "path", "releases",
194 "pakfire2", "pakfire3", "disabled"):
195 args[key] = self.get_argument(key, "")
196
197 if args.id:
198 if not self.mirrors.get(args.id):
199 raise tornado.web.HTTPError(404)
200
201 #self.db.execute("""UPDATE mirrors SET
202 # hostname = %s, owner = %s, location = %s, path = %s, mirror = %s,
203 # pakfire2 = %s, pakfire3 = %s, disabled = %s
204 # WHERE id = %s""", args.hostname, args.owner, args.location,
205 # args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled,
206 # args.id)
207 self.db.update("mirrors", args.id, **args)
208
209 else:
210 #self.db.execute("""INSERT INTO
211 # mirrors(hostname, owner, location, path, mirror, pakfire2, pakfire3, disabled)
212 # VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", args.hostname, args.owner,
213 # args.location, args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled)
214 self.db.insert("mirrors", **args)
215
216 # Update database information
217 self.mirrors.check_all()
218
219 self.redirect("/mirrors")
220
221
222 class AdminMirrorsEditHandler(AdminMirrorsCreateHandler):
223 pass
224
225
226 class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler):
227 @tornado.web.authenticated
228 def get(self, id):
229 self.db.execute("DELETE FROM mirrors WHERE id=%s", id)
230 self.db.execute("DELETE FROM mirror_files WHERE mirror=%s", id)
231 self.redirect("/mirrors")
232
233
234 class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler):
235 @tornado.web.authenticated
236 def get(self, id):
237 mirror = self.mirrors.get(id)
238 if not mirror:
239 raise tornado.web.HTTPError(404)
240
241 self.render("admin-mirrors-details.html", mirror=mirror)
242
243
244 class AdminNewsBaseHandler(AdminBaseHandler):
245 @property
246 def news(self):
247 return self.backend.news
248
249
250 class AdminNewsHandler(AdminNewsBaseHandler):
251 @tornado.web.authenticated
252 def get(self):
253 news = self.news.list()
254
255 self.render("admin-news.html", news=news)
256
257
258 class AdminNewsCreateHandler(AdminNewsBaseHandler):
259 @tornado.web.authenticated
260 def get(self, id=None):
261 # if XXX
262
263
264 self.render("admin-news-create.html", news=news)
265
266
267 class AdminNewsEditHandler(AdminNewsCreateHandler):
268 pass
269
270
271 class AdminDownloadsHandler(AdminBaseHandler):
272 @tornado.web.authenticated
273 def get(self):
274 self.render("admin-downloads.html",
275 downloads_total = self.downloads.total,
276 downloads_today = self.downloads.today,
277 downloads_yesterday = self.downloads.yesterday,
278 downloads_locations_today = self.downloads.get_countries("today"),
279 downloads_locations_total = self.downloads.get_countries(),
280 )
281
282
283 class AdminDownloadsMirrorsHandler(AdminBaseHandler):
284 @tornado.web.authenticated
285 def get(self):
286 self.render("admin-downloads-mirrors.html",
287 mirror_load_total = self.downloads.get_mirror_load(),
288 mirror_load_today = self.downloads.get_mirror_load("today"),
289 )
290
291
292 class AdminDownloadsGraphHandler(AdminBaseHandler):
293 @tornado.web.authenticated
294 def get(self):
295 x = []
296 y = []
297 for row in self.downloads.daily_map:
298 x.append(matplotlib.dates.date2num(row.date))
299 y.append(row.downloads)
300
301 print x, y
302
303 # Create output image.
304 fig = plt.figure()
305
306 # Plot the data.
307 plot = fig.add_subplot(111)
308 plot.plot(x, y)
309
310 fig.savefig("nice-image.svg")