]> git.ipfire.org Git - ipfire.org.git/blob - www/webapp/handlers_admin.py
Add netboot feature.
[ipfire.org.git] / www / webapp / handlers_admin.py
1 #!/usr/bin/python
2
3 # XXX most of this is broken
4
5 import tornado.web
6
7 from handlers_base import *
8
9
10 class AdminBaseHandler(BaseHandler):
11 def get_current_user(self):
12 return self.get_secure_cookie("account")
13
14
15 class AdminLoginHandler(AdminBaseHandler):
16 def get(self):
17 self.render("admin-login.html")
18
19 def post(self):
20 account = self.accounts.search(self.get_argument("name"))
21 if not account:
22 raise tornado.web.HTTPError(403)
23
24 if account.check_password(self.get_argument("password")):
25 self.set_secure_cookie("account", account.uid)
26 else:
27 raise tornado.web.HTTPError(403)
28
29 self.redirect("/")
30
31
32 class AdminLogoutHandler(AdminBaseHandler):
33 def get(self):
34 self.clear_cookie("account")
35 self.redirect("/")
36
37
38 class AdminIndexHandler(AdminBaseHandler):
39 @tornado.web.authenticated
40 def get(self):
41 self.render("admin-index.html")
42
43
44 class AdminApiPlanetRenderMarkupHandler(AdminBaseHandler):
45 @tornado.web.authenticated
46 def get(self):
47 text = self.get_argument("text", "")
48
49 # Render markup
50 self.write(markdown2.markdown(text))
51 self.finish()
52
53
54 class AdminPlanetHandler(AdminBaseHandler):
55 @tornado.web.authenticated
56 def get(self):
57 entries = self.backend.db.planet.query("SELECT * FROM planet ORDER BY published DESC")
58
59 for entry in entries:
60 entry.author = self.backend.accounts.search(entry.author_id)
61
62 self.render("admin-planet.html", entries=entries)
63
64
65 class AdminPlanetComposeHandler(AdminBaseHandler):
66 @tornado.web.authenticated
67 def get(self, id=None):
68 if id:
69 entry = self.backend.db.planet.get("SELECT * FROM planet WHERE id = '%s'", int(id))
70 else:
71 entry = tornado.database.Row(id="", title="", markdown="")
72
73 self.render("admin-planet-compose.html", entry=entry)
74
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)
81
82 if id:
83 entry = self.backend.db.planet.get("SELECT * FROM planet WHERE id = %s", id)
84 if not entry:
85 raise tornado.web.HTTPError(404)
86
87 self.backend.db.planet.execute("UPDATE planet SET title = %s, markdown = %s "
88 "WHERE id = %s", title, markdown, id)
89
90 slug = entry.slug
91
92 else:
93 slug = unicodedata.normalize("NFKD", title).encode("ascii", "ignore")
94 slug = re.sub(r"[^\w]+", " ", slug)
95 slug = "-".join(slug.lower().strip().split())
96
97 if not slug:
98 slug = "entry"
99
100 while True:
101 e = self.backend.db.planet.get("SELECT * FROM planet WHERE slug = %s", slug)
102 if not e:
103 break
104 slug += "-"
105
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)
108
109 self.redirect("/planet")
110
111
112 class AdminPlanetEditHandler(AdminPlanetComposeHandler):
113 pass
114
115
116 class AdminAccountsBaseHandler(AdminBaseHandler):
117 @property
118 def accounts(self):
119 return self.backend.accounts
120
121
122 class AdminAccountsHandler(AdminAccountsBaseHandler):
123 @tornado.web.authenticated
124 def get(self):
125 accounts = self.backend.accounts.list()
126 self.render("admin-accounts.html", accounts=accounts)
127
128
129 class AdminAccountsEditHandler(AdminAccountsBaseHandler):
130 @tornado.web.authenticated
131 def get(self, id):
132 account = self.accounts.search(id)
133 if not account:
134 raise tornado.web.HTTPError(404)
135
136 self.render("admin-accounts-edit.html", account=account)
137
138
139 class AdminAccountsDeleteHandler(AdminAccountsBaseHandler):
140 @tornado.web.authenticated
141 def get(self, id):
142 account = self.accounts.search(id)
143 if not account:
144 raise tornado.web.HTTPError(404)
145
146 self.accounts.delete(id)
147 self.redirect("/accounts")
148
149
150 class AdminMirrorsBaseHandler(AdminBaseHandler):
151 @property
152 def db(self):
153 return self.backend.db.mirrors
154
155 @property
156 def mirrors(self):
157 return self.backend.mirrors
158
159
160 class AdminMirrorsHandler(AdminMirrorsBaseHandler):
161 @tornado.web.authenticated
162 def get(self):
163 mirrors = self.mirrors.list()
164
165 self.render("admin-mirrors.html", mirrors=mirrors)
166
167
168 class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler):
169 @tornado.web.authenticated
170 def get(self):
171 self.mirrors.check_all()
172 self.redirect("/mirrors")
173
174
175 class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler):
176 @tornado.web.authenticated
177 def get(self, id=None):
178 if id:
179 mirror = self.db.get("SELECT * FROM mirrors WHERE id = '%s'", int(id))
180 else:
181 mirror = tornado.database.Row(
182 id="",
183 hostname="",
184 owner="",
185 location="",
186 path="/",
187 releases="Y",
188 pakfire2="Y",
189 pakfire3="Y",
190 disabled="N"
191 )
192
193 self.render("admin-mirrors-create.html", mirror=mirror)
194
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, "")
201
202 if args.id:
203 if not self.mirrors.get(args.id):
204 raise tornado.web.HTTPError(404)
205
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,
211 # args.id)
212 self.db.update("mirrors", args.id, **args)
213
214 else:
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)
220
221 # Update database information
222 self.mirrors.check_all()
223
224 self.redirect("/mirrors")
225
226
227 class AdminMirrorsEditHandler(AdminMirrorsCreateHandler):
228 pass
229
230
231 class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler):
232 @tornado.web.authenticated
233 def get(self, id):
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")
237
238
239 class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler):
240 @tornado.web.authenticated
241 def get(self, id):
242 mirror = self.mirrors.get(id)
243 if not mirror:
244 raise tornado.web.HTTPError(404)
245
246 self.render("admin-mirrors-details.html", mirror=mirror)
247
248
249 class AdminNewsBaseHandler(AdminBaseHandler):
250 @property
251 def news(self):
252 return self.backend.news
253
254
255 class AdminNewsHandler(AdminNewsBaseHandler):
256 @tornado.web.authenticated
257 def get(self):
258 news = self.news.list()
259
260 self.render("admin-news.html", news=news)
261
262
263 class AdminNewsCreateHandler(AdminNewsBaseHandler):
264 @tornado.web.authenticated
265 def get(self, id=None):
266 # if XXX
267
268
269 self.render("admin-news-create.html", news=news)
270
271
272 class AdminNewsEditHandler(AdminNewsCreateHandler):
273 pass