]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_admin.py
adjust touch target on mobile Feature page
[people/shoehn/ipfire.org.git] / webapp / handlers_admin.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
67ab72b8 3import datetime
940227cb
MT
4import tornado.web
5
6from handlers_base import *
7
27066195 8import backend
940227cb
MT
9
10class AdminBaseHandler(BaseHandler):
66862195 11 pass
940227cb
MT
12
13
14class AdminIndexHandler(AdminBaseHandler):
15 @tornado.web.authenticated
16 def get(self):
17 self.render("admin-index.html")
18
19
20class AdminApiPlanetRenderMarkupHandler(AdminBaseHandler):
21 @tornado.web.authenticated
0e824faf 22 def post(self):
940227cb
MT
23 text = self.get_argument("text", "")
24
25 # Render markup
0e824faf
MT
26 output = {
27 "html" : self.planet.render(text),
28 }
67ab72b8 29 self.finish(output)
940227cb
MT
30
31
32class AdminPlanetHandler(AdminBaseHandler):
33 @tornado.web.authenticated
34 def get(self):
66862195 35 entries = self.planet.get_entries(status=None, limit=50)
940227cb
MT
36
37 self.render("admin-planet.html", entries=entries)
38
39
40class AdminPlanetComposeHandler(AdminBaseHandler):
41 @tornado.web.authenticated
67ab72b8
MT
42 def get(self, slug=None):
43 entry = None
27066195 44
67ab72b8
MT
45 if slug:
46 entry = self.planet.get_entry_by_slug(slug)
47 if not entry:
48 raise tornado.web.HTTPError(404)
940227cb
MT
49
50 self.render("admin-planet-compose.html", entry=entry)
51
52 @tornado.web.authenticated
67ab72b8
MT
53 def post(self):
54 title = self.get_argument("title")
55 markdown = self.get_argument("markdown")
940227cb 56
67ab72b8 57 status = self.get_argument("status", "draft")
864437e2 58 assert status in ("draft", "published")
940227cb 59
67ab72b8 60 entry = self.planet.create(title=title, markdown=markdown,
e0cafd59 61 author=self.current_user, status=status)
940227cb 62
67ab72b8 63 self.redirect("/planet")
00af5cf1 64
67ab72b8
MT
65
66class AdminPlanetEditHandler(AdminPlanetComposeHandler):
67 @tornado.web.authenticated
68 def post(self, slug):
69 entry = self.planet.get_entry_by_slug(slug)
70 if not entry:
71 raise tornado.web.HTTPError(404)
72
73 entry.title = self.get_argument("title")
74 entry.markdown = self.get_argument("markdown")
67ab72b8
MT
75
76 entry.status = self.get_argument("status", "draft")
940227cb
MT
77
78 self.redirect("/planet")
79
80
67ab72b8
MT
81class AdminPlanetPublishHandler(AdminBaseHandler):
82 @tornado.web.authenticated
83 def get(self, slug):
84 entry = self.planet.get_entry_by_slug(slug)
85 if not entry:
86 raise tornado.web.HTTPError(404)
87
88 entry.status = "published"
89 entry.published = datetime.datetime.utcnow()
90
91 self.redirect("/planet")
940227cb
MT
92
93
94class AdminAccountsBaseHandler(AdminBaseHandler):
27066195 95 pass
940227cb
MT
96
97
98class AdminAccountsHandler(AdminAccountsBaseHandler):
99 @tornado.web.authenticated
100 def get(self):
27066195 101 accounts = self.accounts.list()
940227cb
MT
102 self.render("admin-accounts.html", accounts=accounts)
103
104
105class AdminAccountsEditHandler(AdminAccountsBaseHandler):
106 @tornado.web.authenticated
107 def get(self, id):
108 account = self.accounts.search(id)
109 if not account:
110 raise tornado.web.HTTPError(404)
111
112 self.render("admin-accounts-edit.html", account=account)
113
114
115class AdminAccountsDeleteHandler(AdminAccountsBaseHandler):
116 @tornado.web.authenticated
117 def get(self, id):
118 account = self.accounts.search(id)
119 if not account:
120 raise tornado.web.HTTPError(404)
121
122 self.accounts.delete(id)
123 self.redirect("/accounts")
124
125
126class AdminMirrorsBaseHandler(AdminBaseHandler):
9068dba1 127 pass
940227cb
MT
128
129
130class AdminMirrorsHandler(AdminMirrorsBaseHandler):
131 @tornado.web.authenticated
132 def get(self):
9068dba1 133 mirrors = self.mirrors.get_all()
940227cb
MT
134
135 self.render("admin-mirrors.html", mirrors=mirrors)
136
137
138class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler):
139 @tornado.web.authenticated
140 def get(self):
141 self.mirrors.check_all()
142 self.redirect("/mirrors")
143
144
145class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler):
146 @tornado.web.authenticated
147 def get(self, id=None):
148 if id:
9068dba1 149 mirror = self.db.get("SELECT * FROM mirrors WHERE id = %s", id)
940227cb
MT
150 else:
151 mirror = tornado.database.Row(
152 id="",
153 hostname="",
154 owner="",
155 location="",
156 path="/",
157 releases="Y",
158 pakfire2="Y",
159 pakfire3="Y",
160 disabled="N"
161 )
162
163 self.render("admin-mirrors-create.html", mirror=mirror)
164
165 @tornado.web.authenticated
166 def post(self, id=None):
167 args = tornado.database.Row()
168 for key in ("id", "hostname", "owner", "location", "path", "releases",
169 "pakfire2", "pakfire3", "disabled"):
170 args[key] = self.get_argument(key, "")
171
172 if args.id:
173 if not self.mirrors.get(args.id):
174 raise tornado.web.HTTPError(404)
175
176 #self.db.execute("""UPDATE mirrors SET
177 # hostname = %s, owner = %s, location = %s, path = %s, mirror = %s,
178 # pakfire2 = %s, pakfire3 = %s, disabled = %s
179 # WHERE id = %s""", args.hostname, args.owner, args.location,
180 # args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled,
181 # args.id)
182 self.db.update("mirrors", args.id, **args)
183
184 else:
185 #self.db.execute("""INSERT INTO
186 # mirrors(hostname, owner, location, path, mirror, pakfire2, pakfire3, disabled)
187 # VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", args.hostname, args.owner,
188 # args.location, args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled)
189 self.db.insert("mirrors", **args)
190
191 # Update database information
192 self.mirrors.check_all()
193
194 self.redirect("/mirrors")
195
196
197class AdminMirrorsEditHandler(AdminMirrorsCreateHandler):
198 pass
199
200
201class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler):
202 @tornado.web.authenticated
203 def get(self, id):
204 self.db.execute("DELETE FROM mirrors WHERE id=%s", id)
205 self.db.execute("DELETE FROM mirror_files WHERE mirror=%s", id)
206 self.redirect("/mirrors")
207
208
209class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler):
210 @tornado.web.authenticated
211 def get(self, id):
212 mirror = self.mirrors.get(id)
213 if not mirror:
214 raise tornado.web.HTTPError(404)
215
216 self.render("admin-mirrors-details.html", mirror=mirror)
217
218
219class AdminNewsBaseHandler(AdminBaseHandler):
220 @property
221 def news(self):
222 return self.backend.news
223
224
225class AdminNewsHandler(AdminNewsBaseHandler):
226 @tornado.web.authenticated
227 def get(self):
9068dba1 228 news = self.news.get_all()
940227cb
MT
229
230 self.render("admin-news.html", news=news)
231
232
233class AdminNewsCreateHandler(AdminNewsBaseHandler):
234 @tornado.web.authenticated
235 def get(self, id=None):
236 # if XXX
237
238
239 self.render("admin-news-create.html", news=news)
240
241
242class AdminNewsEditHandler(AdminNewsCreateHandler):
243 pass
60024cc8
MT
244
245
246class AdminDownloadsHandler(AdminBaseHandler):
247 @tornado.web.authenticated
248 def get(self):
249 self.render("admin-downloads.html",
250 downloads_total = self.downloads.total,
251 downloads_today = self.downloads.today,
252 downloads_yesterday = self.downloads.yesterday,
253 downloads_locations_today = self.downloads.get_countries("today"),
254 downloads_locations_total = self.downloads.get_countries(),
255 )
256
257
258class AdminDownloadsMirrorsHandler(AdminBaseHandler):
259 @tornado.web.authenticated
260 def get(self):
261 self.render("admin-downloads-mirrors.html",
262 mirror_load_total = self.downloads.get_mirror_load(),
263 mirror_load_today = self.downloads.get_mirror_load("today"),
264 )