]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/handlers_admin.py
Add job that updates the file database from the main mirror.
[people/shoehn/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 import backend
10
11 class AdminBaseHandler(BaseHandler):
12 @property
13 def accounts(self):
14 return backend.Accounts()
15
16 @property
17 def planet(self):
18 return backend.Planet()
19
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
59 self.write(self.planet.render(text))
60 self.finish()
61
62
63 class AdminPlanetHandler(AdminBaseHandler):
64 @tornado.web.authenticated
65 def get(self):
66 entries = self.planet.get_entries(limit=100)
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):
74 entry = backend.PlanetEntry()
75
76 if id:
77 entry = self.planet.get_entry_by_id(id)
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)
84
85 entry = backend.PlanetEntry()
86
87 if id:
88 entry = self.planet.get_entry_by_id(id)
89
90 entry.set("title", self.get_argument("title"))
91 entry.set("markdown", self.get_argument("markdown"))
92 entry.set("author_id", self.current_user)
93
94 if id:
95 self.planet.update_entry(entry)
96 else:
97 self.planet.save_entry(entry)
98
99 self.redirect("/planet")
100
101
102 class AdminPlanetEditHandler(AdminPlanetComposeHandler):
103 pass
104
105
106 class AdminAccountsBaseHandler(AdminBaseHandler):
107 pass
108
109
110 class AdminAccountsHandler(AdminAccountsBaseHandler):
111 @tornado.web.authenticated
112 def get(self):
113 accounts = self.accounts.list()
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):
139 @property
140 def mirrors(self):
141 return backend.Mirrors()
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