diff options
author | blackbird <blackbird@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2007-05-25 08:45:15 +0000 |
---|---|---|
committer | blackbird <blackbird@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2007-05-25 08:45:15 +0000 |
commit | 4e15bbdaf3d0fc8ad5282b809fbb719972b0efc4 (patch) | |
tree | 635b7b0bce74c49bc39ea08b1e0c1d71666bad00 /sandbox/py-rest-doc/sphinx/web/application.py | |
parent | 060c7a673f7ddc459b233390927e19401350b20c (diff) | |
download | docutils-4e15bbdaf3d0fc8ad5282b809fbb719972b0efc4.tar.gz |
added user control panel
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@5138 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'sandbox/py-rest-doc/sphinx/web/application.py')
-rw-r--r-- | sandbox/py-rest-doc/sphinx/web/application.py | 92 |
1 files changed, 83 insertions, 9 deletions
diff --git a/sandbox/py-rest-doc/sphinx/web/application.py b/sandbox/py-rest-doc/sphinx/web/application.py index 0b6d9f349..8427da365 100644 --- a/sandbox/py-rest-doc/sphinx/web/application.py +++ b/sandbox/py-rest-doc/sphinx/web/application.py @@ -210,6 +210,11 @@ class DocumentationApplication(object): """ Get some administration pages. """ + is_master_admin = False + is_logged_in = req.user is not None + if is_logged_in: + is_master_admin = 'master' in self.userdb.privileges[req.user] + if page == 'login': if req.user is not None: return RedirectResponse('admin/') @@ -226,7 +231,7 @@ class DocumentationApplication(object): return Response(render_template(req, 'admin/login.html', { 'login_failed': login_failed })) - elif req.user is None: + elif not is_logged_in: return RedirectResponse('admin/login/') elif page == 'logout': req.logout() @@ -251,11 +256,6 @@ class DocumentationApplication(object): details_for = page[18:] + '.rst' or None to_delete = set() edit_detail = None - for item in req.form.getlist('delete'): - try: - to_delete.add(int(item)) - except ValueError: - pass if 'edit' in req.args: try: @@ -264,6 +264,11 @@ class DocumentationApplication(object): pass if req.method == 'POST': + for item in req.form.getlist('delete'): + try: + to_delete.add(int(item)) + except ValueError: + pass if req.form.get('cancel'): return RedirectResponse('admin/') elif req.form.get('confirmated'): @@ -275,7 +280,7 @@ class DocumentationApplication(object): return RedirectResponse('admin/' + page) elif req.form.get('aborted'): return RedirectResponse('admin/' + page) - elif req.form.get('edit'): + elif req.form.get('edit') and not to_delete: try: edit_detail = Comment.get(int(req.args['edit'])) except ValueError: @@ -300,10 +305,79 @@ class DocumentationApplication(object): 'ask_confirmation': req.method == 'POST' and to_delete, 'edit_detail': edit_detail })) + elif page == 'manage_users' and is_master_admin: + add_user_mode = False + user_privileges = {} + users = sorted((user, []) for user in self.userdb.users) + to_delete = set() + generated_user = generated_password = None + + if req.method == 'POST': + for item in req.form.getlist('delete'): + try: + to_delete.add(item) + except ValueError: + pass + for name, item in req.form.iteritems(): + if name.startswith('privileges-'): + user_privileges[name[11:]] = [x.strip() for x + in item.split(',')] + if req.form.get('cancel'): + return RedirectResponse('admin/') + elif req.form.get('add_user'): + username = req.form.get('username') + if username: + generated_password = self.userdb.add_user(username) + self.userdb.save() + generated_user = username + else: + add_user_mode = True + elif req.form.get('aborted'): + return RedirectResponse('admin/manage_users/') + + users = {} + for user in self.userdb.users: + if not user in user_privileges: + users[user] = sorted(self.userdb.privileges[user]) + else: + users[user] = user_privileges[user] + + new_users = users.copy() + for user in to_delete: + new_users.pop(user, None) + + self_destruction = not req.user in new_users or \ + 'master' not in new_users[req.user] + + if req.method == 'POST' and (not to_delete or + (to_delete and req.form.get('confirmated'))) and \ + req.form.get('update'): + old_users = self.userdb.users.copy() + for user in old_users: + if user not in new_users: + del self.userdb.users[user] + else: + self.userdb.privileges[user].clear() + self.userdb.privileges[user].update(new_users[user]) + self.userdb.save() + return RedirectResponse('admin/manage_users/') + + return Response(render_template(req, 'admin/manage_users.html', { + 'users': users, + 'add_user_mode': add_user_mode, + 'to_delete': to_delete, + 'ask_confirmation': req.method == 'POST' and to_delete \ + and not self_destruction, + 'generated_user': generated_user, + 'generated_password': generated_password, + 'self_destruction': self_destruction + })) elif page == '': - return Response(render_template(req, 'admin/index.html')) + return Response(render_template(req, 'admin/index.html', { + 'is_master_admin': is_master_admin + })) else: - raise ValueError() + raise RedirectResponse('admin/') pretty_type = { 'data': 'module data', |