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