3 # XXX most of this is broken
7 from handlers_base
import *
10 class AdminBaseHandler(BaseHandler
):
11 def get_current_user(self
):
12 return self
.get_secure_cookie("account")
15 class AdminLoginHandler(AdminBaseHandler
):
17 self
.render("admin-login.html")
20 account
= self
.accounts
.search(self
.get_argument("name"))
22 raise tornado
.web
.HTTPError(403)
24 if account
.check_password(self
.get_argument("password")):
25 self
.set_secure_cookie("account", account
.uid
)
27 raise tornado
.web
.HTTPError(403)
32 class AdminLogoutHandler(AdminBaseHandler
):
34 self
.clear_cookie("account")
38 class AdminIndexHandler(AdminBaseHandler
):
39 @tornado.web
.authenticated
41 self
.render("admin-index.html")
44 class AdminApiPlanetRenderMarkupHandler(AdminBaseHandler
):
45 @tornado.web
.authenticated
47 text
= self
.get_argument("text", "")
50 self
.write(markdown2
.markdown(text
))
54 class AdminPlanetHandler(AdminBaseHandler
):
55 @tornado.web
.authenticated
57 entries
= self
.backend
.db
.planet
.query("SELECT * FROM planet ORDER BY published DESC")
60 entry
.author
= self
.backend
.accounts
.search(entry
.author_id
)
62 self
.render("admin-planet.html", entries
=entries
)
65 class AdminPlanetComposeHandler(AdminBaseHandler
):
66 @tornado.web
.authenticated
67 def get(self
, id=None):
69 entry
= self
.backend
.db
.planet
.get("SELECT * FROM planet WHERE id = '%s'", int(id))
71 entry
= tornado
.database
.Row(id="", title
="", markdown
="")
73 self
.render("admin-planet-compose.html", entry
=entry
)
75 @tornado.web
.authenticated
76 def post(self
, id=None):
77 id = self
.get_argument("id", id)
78 title
= self
.get_argument("title")
79 markdown
= self
.get_argument("markdown")
80 author
= self
.backend
.accounts
.search(self
.current_user
)
83 entry
= self
.backend
.db
.planet
.get("SELECT * FROM planet WHERE id = %s", id)
85 raise tornado
.web
.HTTPError(404)
87 self
.backend
.db
.planet
.execute("UPDATE planet SET title = %s, markdown = %s "
88 "WHERE id = %s", title
, markdown
, id)
93 slug
= unicodedata
.normalize("NFKD", title
).encode("ascii", "ignore")
94 slug
= re
.sub(r
"[^\w]+", " ", slug
)
95 slug
= "-".join(slug
.lower().strip().split())
101 e
= self
.backend
.db
.planet
.get("SELECT * FROM planet WHERE slug = %s", slug
)
106 self
.backend
.db
.planet
.execute("INSERT INTO planet(author_id, title, slug, markdown, published) "
107 "VALUES(%s, %s, %s, %s, UTC_TIMESTAMP())", author
.uid
, title
, slug
, markdown
)
109 self
.redirect("/planet")
112 class AdminPlanetEditHandler(AdminPlanetComposeHandler
):
116 class AdminAccountsBaseHandler(AdminBaseHandler
):
119 return self
.backend
.accounts
122 class AdminAccountsHandler(AdminAccountsBaseHandler
):
123 @tornado.web
.authenticated
125 accounts
= self
.backend
.accounts
.list()
126 self
.render("admin-accounts.html", accounts
=accounts
)
129 class AdminAccountsEditHandler(AdminAccountsBaseHandler
):
130 @tornado.web
.authenticated
132 account
= self
.accounts
.search(id)
134 raise tornado
.web
.HTTPError(404)
136 self
.render("admin-accounts-edit.html", account
=account
)
139 class AdminAccountsDeleteHandler(AdminAccountsBaseHandler
):
140 @tornado.web
.authenticated
142 account
= self
.accounts
.search(id)
144 raise tornado
.web
.HTTPError(404)
146 self
.accounts
.delete(id)
147 self
.redirect("/accounts")
150 class AdminMirrorsBaseHandler(AdminBaseHandler
):
153 return self
.backend
.db
.mirrors
157 return self
.backend
.mirrors
160 class AdminMirrorsHandler(AdminMirrorsBaseHandler
):
161 @tornado.web
.authenticated
163 mirrors
= self
.mirrors
.list()
165 self
.render("admin-mirrors.html", mirrors
=mirrors
)
168 class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler
):
169 @tornado.web
.authenticated
171 self
.mirrors
.check_all()
172 self
.redirect("/mirrors")
175 class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler
):
176 @tornado.web
.authenticated
177 def get(self
, id=None):
179 mirror
= self
.db
.get("SELECT * FROM mirrors WHERE id = '%s'", int(id))
181 mirror
= tornado
.database
.Row(
193 self
.render("admin-mirrors-create.html", mirror
=mirror
)
195 @tornado.web
.authenticated
196 def post(self
, id=None):
197 args
= tornado
.database
.Row()
198 for key
in ("id", "hostname", "owner", "location", "path", "releases",
199 "pakfire2", "pakfire3", "disabled"):
200 args
[key
] = self
.get_argument(key
, "")
203 if not self
.mirrors
.get(args
.id):
204 raise tornado
.web
.HTTPError(404)
206 #self.db.execute("""UPDATE mirrors SET
207 # hostname = %s, owner = %s, location = %s, path = %s, mirror = %s,
208 # pakfire2 = %s, pakfire3 = %s, disabled = %s
209 # WHERE id = %s""", args.hostname, args.owner, args.location,
210 # args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled,
212 self
.db
.update("mirrors", args
.id, **args
)
215 #self.db.execute("""INSERT INTO
216 # mirrors(hostname, owner, location, path, mirror, pakfire2, pakfire3, disabled)
217 # VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", args.hostname, args.owner,
218 # args.location, args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled)
219 self
.db
.insert("mirrors", **args
)
221 # Update database information
222 self
.mirrors
.check_all()
224 self
.redirect("/mirrors")
227 class AdminMirrorsEditHandler(AdminMirrorsCreateHandler
):
231 class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler
):
232 @tornado.web
.authenticated
234 self
.db
.execute("DELETE FROM mirrors WHERE id=%s", id)
235 self
.db
.execute("DELETE FROM mirror_files WHERE mirror=%s", id)
236 self
.redirect("/mirrors")
239 class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler
):
240 @tornado.web
.authenticated
242 mirror
= self
.mirrors
.get(id)
244 raise tornado
.web
.HTTPError(404)
246 self
.render("admin-mirrors-details.html", mirror
=mirror
)
249 class AdminNewsBaseHandler(AdminBaseHandler
):
252 return self
.backend
.news
255 class AdminNewsHandler(AdminNewsBaseHandler
):
256 @tornado.web
.authenticated
258 news
= self
.news
.list()
260 self
.render("admin-news.html", news
=news
)
263 class AdminNewsCreateHandler(AdminNewsBaseHandler
):
264 @tornado.web
.authenticated
265 def get(self
, id=None):
269 self
.render("admin-news-create.html", news
=news
)
272 class AdminNewsEditHandler(AdminNewsCreateHandler
):