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