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