]>
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): | |
66862195 | 11 | pass |
940227cb MT |
12 | |
13 | ||
14 | class AdminIndexHandler(AdminBaseHandler): | |
15 | @tornado.web.authenticated | |
16 | def get(self): | |
17 | self.render("admin-index.html") | |
18 | ||
19 | ||
20 | class 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 | ||
32 | class 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 | ||
40 | class 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 | author = self.accounts.find(self.current_user) |
940227cb | 61 | |
67ab72b8 | 62 | entry = self.planet.create(title=title, markdown=markdown, |
3066ac8d | 63 | author=author, status=status) |
940227cb | 64 | |
67ab72b8 | 65 | self.redirect("/planet") |
00af5cf1 | 66 | |
67ab72b8 MT |
67 | |
68 | class AdminPlanetEditHandler(AdminPlanetComposeHandler): | |
69 | @tornado.web.authenticated | |
70 | def post(self, slug): | |
71 | entry = self.planet.get_entry_by_slug(slug) | |
72 | if not entry: | |
73 | raise tornado.web.HTTPError(404) | |
74 | ||
75 | entry.title = self.get_argument("title") | |
76 | entry.markdown = self.get_argument("markdown") | |
67ab72b8 MT |
77 | |
78 | entry.status = self.get_argument("status", "draft") | |
940227cb MT |
79 | |
80 | self.redirect("/planet") | |
81 | ||
82 | ||
67ab72b8 MT |
83 | class AdminPlanetPublishHandler(AdminBaseHandler): |
84 | @tornado.web.authenticated | |
85 | def get(self, slug): | |
86 | entry = self.planet.get_entry_by_slug(slug) | |
87 | if not entry: | |
88 | raise tornado.web.HTTPError(404) | |
89 | ||
90 | entry.status = "published" | |
91 | entry.published = datetime.datetime.utcnow() | |
92 | ||
93 | self.redirect("/planet") | |
940227cb MT |
94 | |
95 | ||
96 | class AdminAccountsBaseHandler(AdminBaseHandler): | |
27066195 | 97 | pass |
940227cb MT |
98 | |
99 | ||
100 | class AdminAccountsHandler(AdminAccountsBaseHandler): | |
101 | @tornado.web.authenticated | |
102 | def get(self): | |
27066195 | 103 | accounts = self.accounts.list() |
940227cb MT |
104 | self.render("admin-accounts.html", accounts=accounts) |
105 | ||
106 | ||
107 | class AdminAccountsEditHandler(AdminAccountsBaseHandler): | |
108 | @tornado.web.authenticated | |
109 | def get(self, id): | |
110 | account = self.accounts.search(id) | |
111 | if not account: | |
112 | raise tornado.web.HTTPError(404) | |
113 | ||
114 | self.render("admin-accounts-edit.html", account=account) | |
115 | ||
116 | ||
117 | class AdminAccountsDeleteHandler(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.accounts.delete(id) | |
125 | self.redirect("/accounts") | |
126 | ||
127 | ||
128 | class AdminMirrorsBaseHandler(AdminBaseHandler): | |
9068dba1 | 129 | pass |
940227cb MT |
130 | |
131 | ||
132 | class AdminMirrorsHandler(AdminMirrorsBaseHandler): | |
133 | @tornado.web.authenticated | |
134 | def get(self): | |
9068dba1 | 135 | mirrors = self.mirrors.get_all() |
940227cb MT |
136 | |
137 | self.render("admin-mirrors.html", mirrors=mirrors) | |
138 | ||
139 | ||
140 | class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler): | |
141 | @tornado.web.authenticated | |
142 | def get(self): | |
143 | self.mirrors.check_all() | |
144 | self.redirect("/mirrors") | |
145 | ||
146 | ||
147 | class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler): | |
148 | @tornado.web.authenticated | |
149 | def get(self, id=None): | |
150 | if id: | |
9068dba1 | 151 | mirror = self.db.get("SELECT * FROM mirrors WHERE id = %s", id) |
940227cb MT |
152 | else: |
153 | mirror = tornado.database.Row( | |
154 | id="", | |
155 | hostname="", | |
156 | owner="", | |
157 | location="", | |
158 | path="/", | |
159 | releases="Y", | |
160 | pakfire2="Y", | |
161 | pakfire3="Y", | |
162 | disabled="N" | |
163 | ) | |
164 | ||
165 | self.render("admin-mirrors-create.html", mirror=mirror) | |
166 | ||
167 | @tornado.web.authenticated | |
168 | def post(self, id=None): | |
169 | args = tornado.database.Row() | |
170 | for key in ("id", "hostname", "owner", "location", "path", "releases", | |
171 | "pakfire2", "pakfire3", "disabled"): | |
172 | args[key] = self.get_argument(key, "") | |
173 | ||
174 | if args.id: | |
175 | if not self.mirrors.get(args.id): | |
176 | raise tornado.web.HTTPError(404) | |
177 | ||
178 | #self.db.execute("""UPDATE mirrors SET | |
179 | # hostname = %s, owner = %s, location = %s, path = %s, mirror = %s, | |
180 | # pakfire2 = %s, pakfire3 = %s, disabled = %s | |
181 | # WHERE id = %s""", args.hostname, args.owner, args.location, | |
182 | # args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled, | |
183 | # args.id) | |
184 | self.db.update("mirrors", args.id, **args) | |
185 | ||
186 | else: | |
187 | #self.db.execute("""INSERT INTO | |
188 | # mirrors(hostname, owner, location, path, mirror, pakfire2, pakfire3, disabled) | |
189 | # VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", args.hostname, args.owner, | |
190 | # args.location, args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled) | |
191 | self.db.insert("mirrors", **args) | |
192 | ||
193 | # Update database information | |
194 | self.mirrors.check_all() | |
195 | ||
196 | self.redirect("/mirrors") | |
197 | ||
198 | ||
199 | class AdminMirrorsEditHandler(AdminMirrorsCreateHandler): | |
200 | pass | |
201 | ||
202 | ||
203 | class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler): | |
204 | @tornado.web.authenticated | |
205 | def get(self, id): | |
206 | self.db.execute("DELETE FROM mirrors WHERE id=%s", id) | |
207 | self.db.execute("DELETE FROM mirror_files WHERE mirror=%s", id) | |
208 | self.redirect("/mirrors") | |
209 | ||
210 | ||
211 | class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler): | |
212 | @tornado.web.authenticated | |
213 | def get(self, id): | |
214 | mirror = self.mirrors.get(id) | |
215 | if not mirror: | |
216 | raise tornado.web.HTTPError(404) | |
217 | ||
218 | self.render("admin-mirrors-details.html", mirror=mirror) | |
219 | ||
220 | ||
221 | class AdminNewsBaseHandler(AdminBaseHandler): | |
222 | @property | |
223 | def news(self): | |
224 | return self.backend.news | |
225 | ||
226 | ||
227 | class AdminNewsHandler(AdminNewsBaseHandler): | |
228 | @tornado.web.authenticated | |
229 | def get(self): | |
9068dba1 | 230 | news = self.news.get_all() |
940227cb MT |
231 | |
232 | self.render("admin-news.html", news=news) | |
233 | ||
234 | ||
235 | class AdminNewsCreateHandler(AdminNewsBaseHandler): | |
236 | @tornado.web.authenticated | |
237 | def get(self, id=None): | |
238 | # if XXX | |
239 | ||
240 | ||
241 | self.render("admin-news-create.html", news=news) | |
242 | ||
243 | ||
244 | class AdminNewsEditHandler(AdminNewsCreateHandler): | |
245 | pass | |
60024cc8 MT |
246 | |
247 | ||
248 | class AdminDownloadsHandler(AdminBaseHandler): | |
249 | @tornado.web.authenticated | |
250 | def get(self): | |
251 | self.render("admin-downloads.html", | |
252 | downloads_total = self.downloads.total, | |
253 | downloads_today = self.downloads.today, | |
254 | downloads_yesterday = self.downloads.yesterday, | |
255 | downloads_locations_today = self.downloads.get_countries("today"), | |
256 | downloads_locations_total = self.downloads.get_countries(), | |
257 | ) | |
258 | ||
259 | ||
260 | class AdminDownloadsMirrorsHandler(AdminBaseHandler): | |
261 | @tornado.web.authenticated | |
262 | def get(self): | |
263 | self.render("admin-downloads-mirrors.html", | |
264 | mirror_load_total = self.downloads.get_mirror_load(), | |
265 | mirror_load_today = self.downloads.get_mirror_load("today"), | |
266 | ) |