]>
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 | 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 | |
66 | class 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 |
81 | class 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 | ||
94 | class AdminAccountsBaseHandler(AdminBaseHandler): | |
27066195 | 95 | pass |
940227cb MT |
96 | |
97 | ||
98 | class 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 | ||
105 | class 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 | ||
115 | class 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 | ||
126 | class AdminMirrorsBaseHandler(AdminBaseHandler): | |
9068dba1 | 127 | pass |
940227cb MT |
128 | |
129 | ||
130 | class 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 | ||
138 | class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler): | |
139 | @tornado.web.authenticated | |
140 | def get(self): | |
141 | self.mirrors.check_all() | |
142 | self.redirect("/mirrors") | |
143 | ||
144 | ||
145 | class 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 | ||
197 | class AdminMirrorsEditHandler(AdminMirrorsCreateHandler): | |
198 | pass | |
199 | ||
200 | ||
201 | class 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 | ||
209 | class 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 | ||
219 | class AdminNewsBaseHandler(AdminBaseHandler): | |
220 | @property | |
221 | def news(self): | |
222 | return self.backend.news | |
223 | ||
224 | ||
225 | class 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 | ||
233 | class 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 | ||
242 | class AdminNewsEditHandler(AdminNewsCreateHandler): | |
243 | pass | |
60024cc8 MT |
244 | |
245 | ||
246 | class 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 | ||
258 | class 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 | ) |