comparison rhodecode/controllers/admin/users.py @ 2031:82a88013a3fd

merge 1.3 into stable
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 26 Feb 2012 17:25:09 +0200
parents bf263968da47 89efedac4e6c
children dc2584ba5fbc
comparison
equal deleted inserted replaced
2005:ab0e122b38a7 2031:82a88013a3fd
5 5
6 Users crud controller for pylons 6 Users crud controller for pylons
7 7
8 :created_on: Apr 4, 2010 8 :created_on: Apr 4, 2010
9 :author: marcink 9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details. 11 :license: GPLv3, see COPYING for more details.
12 """ 12 """
13 # This program is free software: you can redistribute it and/or modify 13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by 14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or 15 # the Free Software Foundation, either version 3 of the License, or
27 import traceback 27 import traceback
28 import formencode 28 import formencode
29 29
30 from formencode import htmlfill 30 from formencode import htmlfill
31 from pylons import request, session, tmpl_context as c, url, config 31 from pylons import request, session, tmpl_context as c, url, config
32 from pylons.controllers.util import abort, redirect 32 from pylons.controllers.util import redirect
33 from pylons.i18n.translation import _ 33 from pylons.i18n.translation import _
34 34
35 from rhodecode.lib.exceptions import DefaultUserException, \ 35 from rhodecode.lib.exceptions import DefaultUserException, \
36 UserOwnsReposException 36 UserOwnsReposException
37 from rhodecode.lib import helpers as h 37 from rhodecode.lib import helpers as h
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator 38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
39 from rhodecode.lib.base import BaseController, render 39 from rhodecode.lib.base import BaseController, render
40 40
41 from rhodecode.model.db import User, RepoToPerm, UserToPerm, Permission 41 from rhodecode.model.db import User, Permission
42 from rhodecode.model.forms import UserForm 42 from rhodecode.model.forms import UserForm
43 from rhodecode.model.user import UserModel 43 from rhodecode.model.user import UserModel
44 from rhodecode.model.meta import Session
44 45
45 log = logging.getLogger(__name__) 46 log = logging.getLogger(__name__)
46 47
47 48
48 class UsersController(BaseController): 49 class UsersController(BaseController):
69 def create(self): 70 def create(self):
70 """POST /users: Create a new item""" 71 """POST /users: Create a new item"""
71 # url('users') 72 # url('users')
72 73
73 user_model = UserModel() 74 user_model = UserModel()
74 login_form = UserForm()() 75 user_form = UserForm()()
75 try: 76 try:
76 form_result = login_form.to_python(dict(request.POST)) 77 form_result = user_form.to_python(dict(request.POST))
77 user_model.create(form_result) 78 user_model.create(form_result)
78 h.flash(_('created user %s') % form_result['username'], 79 h.flash(_('created user %s') % form_result['username'],
79 category='success') 80 category='success')
81 Session.commit()
80 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) 82 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
81 except formencode.Invalid, errors: 83 except formencode.Invalid, errors:
82 return htmlfill.render( 84 return htmlfill.render(
83 render('admin/users/user_add.html'), 85 render('admin/users/user_add.html'),
84 defaults=errors.value, 86 defaults=errors.value,
112 form_result = {} 114 form_result = {}
113 try: 115 try:
114 form_result = _form.to_python(dict(request.POST)) 116 form_result = _form.to_python(dict(request.POST))
115 user_model.update(id, form_result) 117 user_model.update(id, form_result)
116 h.flash(_('User updated successfully'), category='success') 118 h.flash(_('User updated successfully'), category='success')
117 119 Session.commit()
118 except formencode.Invalid, errors: 120 except formencode.Invalid, errors:
119 e = errors.error_dict or {} 121 e = errors.error_dict or {}
120 perm = Permission.get_by_key('hg.create.repository') 122 perm = Permission.get_by_key('hg.create.repository')
121 e.update({'create_repo_perm': UserToPerm.has_perm(id, perm)}) 123 e.update({'create_repo_perm': user_model.has_perm(id, perm)})
122 return htmlfill.render( 124 return htmlfill.render(
123 render('admin/users/user_edit.html'), 125 render('admin/users/user_edit.html'),
124 defaults=errors.value, 126 defaults=errors.value,
125 errors=e, 127 errors=e,
126 prefix_error=False, 128 prefix_error=False,
142 # url('user', id=ID) 144 # url('user', id=ID)
143 user_model = UserModel() 145 user_model = UserModel()
144 try: 146 try:
145 user_model.delete(id) 147 user_model.delete(id)
146 h.flash(_('successfully deleted user'), category='success') 148 h.flash(_('successfully deleted user'), category='success')
149 Session.commit()
147 except (UserOwnsReposException, DefaultUserException), e: 150 except (UserOwnsReposException, DefaultUserException), e:
148 h.flash(str(e), category='warning') 151 h.flash(str(e), category='warning')
149 except Exception: 152 except Exception:
150 h.flash(_('An error occurred during deletion of user'), 153 h.flash(_('An error occurred during deletion of user'),
151 category='error') 154 category='error')
156 # url('user', id=ID) 159 # url('user', id=ID)
157 160
158 def edit(self, id, format='html'): 161 def edit(self, id, format='html'):
159 """GET /users/id/edit: Form to edit an existing item""" 162 """GET /users/id/edit: Form to edit an existing item"""
160 # url('edit_user', id=ID) 163 # url('edit_user', id=ID)
161 user_model = UserModel() 164 c.user = User.get(id)
162 c.user = user_model.get(id)
163 if not c.user: 165 if not c.user:
164 return redirect(url('users')) 166 return redirect(url('users'))
165 if c.user.username == 'default': 167 if c.user.username == 'default':
166 h.flash(_("You can't edit this user"), category='warning') 168 h.flash(_("You can't edit this user"), category='warning')
167 return redirect(url('users')) 169 return redirect(url('users'))
168 c.user.permissions = {} 170 c.user.permissions = {}
169 c.granted_permissions = user_model.fill_perms(c.user)\ 171 c.granted_permissions = UserModel().fill_perms(c.user)\
170 .permissions['global'] 172 .permissions['global']
171 173
172 defaults = c.user.get_dict() 174 defaults = c.user.get_dict()
173 perm = Permission.get_by_key('hg.create.repository') 175 perm = Permission.get_by_key('hg.create.repository')
174 defaults.update({'create_repo_perm': UserToPerm.has_perm(id, perm)}) 176 defaults.update({'create_repo_perm': UserModel().has_perm(id, perm)})
175 177
176 return htmlfill.render( 178 return htmlfill.render(
177 render('admin/users/user_edit.html'), 179 render('admin/users/user_edit.html'),
178 defaults=defaults, 180 defaults=defaults,
179 encoding="UTF-8", 181 encoding="UTF-8",
183 def update_perm(self, id): 185 def update_perm(self, id):
184 """PUT /users_perm/id: Update an existing item""" 186 """PUT /users_perm/id: Update an existing item"""
185 # url('user_perm', id=ID, method='put') 187 # url('user_perm', id=ID, method='put')
186 188
187 grant_perm = request.POST.get('create_repo_perm', False) 189 grant_perm = request.POST.get('create_repo_perm', False)
190 user_model = UserModel()
188 191
189 if grant_perm: 192 if grant_perm:
190 perm = Permission.get_by_key('hg.create.none') 193 perm = Permission.get_by_key('hg.create.none')
191 UserToPerm.revoke_perm(id, perm) 194 user_model.revoke_perm(id, perm)
192 195
193 perm = Permission.get_by_key('hg.create.repository') 196 perm = Permission.get_by_key('hg.create.repository')
194 UserToPerm.grant_perm(id, perm) 197 user_model.grant_perm(id, perm)
195 h.flash(_("Granted 'repository create' permission to user"), 198 h.flash(_("Granted 'repository create' permission to user"),
196 category='success') 199 category='success')
197 200 Session.commit()
198 else: 201 else:
199 perm = Permission.get_by_key('hg.create.repository') 202 perm = Permission.get_by_key('hg.create.repository')
200 UserToPerm.revoke_perm(id, perm) 203 user_model.revoke_perm(id, perm)
201 204
202 perm = Permission.get_by_key('hg.create.none') 205 perm = Permission.get_by_key('hg.create.none')
203 UserToPerm.grant_perm(id, perm) 206 user_model.grant_perm(id, perm)
204 h.flash(_("Revoked 'repository create' permission to user"), 207 h.flash(_("Revoked 'repository create' permission to user"),
205 category='success') 208 category='success')
206 209 Session.commit()
207 return redirect(url('edit_user', id=id)) 210 return redirect(url('edit_user', id=id))