comparison pylons_app/controllers/repos.py @ 331:fdf9f6ee5217

Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 29 Jun 2010 20:45:03 +0200
parents d303aacb3349
children 4402f4041696
comparison
equal deleted inserted replaced
330:c961b78ff0a0 331:fdf9f6ee5217
19 """ 19 """
20 Created on April 7, 2010 20 Created on April 7, 2010
21 admin controller for pylons 21 admin controller for pylons
22 @author: marcink 22 @author: marcink
23 """ 23 """
24 from formencode import htmlfill
24 from operator import itemgetter 25 from operator import itemgetter
25 from pylons import request, response, session, tmpl_context as c, url, \ 26 from pylons import request, response, session, tmpl_context as c, url
26 app_globals as g
27 from pylons.controllers.util import abort, redirect 27 from pylons.controllers.util import abort, redirect
28 from pylons.i18n.translation import _ 28 from pylons.i18n.translation import _
29 from pylons_app.lib import helpers as h 29 from pylons_app.lib import helpers as h
30 from pylons_app.lib.auth import LoginRequired 30 from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
31 from pylons_app.lib.base import BaseController, render 31 from pylons_app.lib.base import BaseController, render
32 from pylons_app.lib.utils import invalidate_cache 32 from pylons_app.lib.utils import invalidate_cache
33 from pylons_app.model.forms import RepoForm
34 from pylons_app.model.hg_model import HgModel
33 from pylons_app.model.repo_model import RepoModel 35 from pylons_app.model.repo_model import RepoModel
34 from pylons_app.model.hg_model import HgModel
35 from pylons_app.model.forms import RepoForm
36 from pylons_app.model.meta import Session
37 import formencode 36 import formencode
38 from formencode import htmlfill
39 import logging 37 import logging
40 log = logging.getLogger(__name__) 38 log = logging.getLogger(__name__)
41 39
42 class ReposController(BaseController): 40 class ReposController(BaseController):
43 """REST Controller styled on the Atom Publishing Protocol""" 41 """REST Controller styled on the Atom Publishing Protocol"""
44 # To properly map this controller, ensure your config/routing.py 42 # To properly map this controller, ensure your config/routing.py
45 # file has a resource setup: 43 # file has a resource setup:
46 # map.resource('repo', 'repos') 44 # map.resource('repo', 'repos')
45
47 @LoginRequired() 46 @LoginRequired()
47 @HasPermissionAllDecorator('hg.admin')
48 def __before__(self): 48 def __before__(self):
49 c.admin_user = session.get('admin_user') 49 c.admin_user = session.get('admin_user')
50 c.admin_username = session.get('admin_username') 50 c.admin_username = session.get('admin_username')
51 super(ReposController, self).__before__() 51 super(ReposController, self).__before__()
52 52
102 _form = RepoForm(edit=True)() 102 _form = RepoForm(edit=True)()
103 try: 103 try:
104 form_result = _form.to_python(dict(request.POST)) 104 form_result = _form.to_python(dict(request.POST))
105 repo_model.update(repo_name, form_result) 105 repo_model.update(repo_name, form_result)
106 invalidate_cache('cached_repo_list') 106 invalidate_cache('cached_repo_list')
107 h.flash(_('Repository %s updated succesfully' % repo_name), category='success') 107 h.flash(_('Repository %s updated succesfully' % repo_name),
108 category='success')
108 109
109 except formencode.Invalid as errors: 110 except formencode.Invalid as errors:
110 c.repo_info = repo_model.get(repo_name) 111 c.repo_info = repo_model.get(repo_name)
111 c.users_array = repo_model.get_users_js() 112 c.users_array = repo_model.get_users_js()
112 errors.value.update({'user':c.repo_info.user.username}) 113 errors.value.update({'user':c.repo_info.user.username})
133 repo = repo_model.get(repo_name) 134 repo = repo_model.get(repo_name)
134 if not repo: 135 if not repo:
135 h.flash(_('%s repository is not mapped to db perhaps' 136 h.flash(_('%s repository is not mapped to db perhaps'
136 ' it was moved or renamed from the filesystem' 137 ' it was moved or renamed from the filesystem'
137 ' please run the application again' 138 ' please run the application again'
138 ' in order to rescan repositories') % repo_name, category='error') 139 ' in order to rescan repositories') % repo_name,
140 category='error')
139 141
140 return redirect(url('repos')) 142 return redirect(url('repos'))
141 try: 143 try:
142 repo_model.delete(repo) 144 repo_model.delete(repo)
143 invalidate_cache('cached_repo_list') 145 invalidate_cache('cached_repo_list')
173 c.repo_info = repo = repo_model.get(repo_name) 175 c.repo_info = repo = repo_model.get(repo_name)
174 if not repo: 176 if not repo:
175 h.flash(_('%s repository is not mapped to db perhaps' 177 h.flash(_('%s repository is not mapped to db perhaps'
176 ' it was created or renamed from the filesystem' 178 ' it was created or renamed from the filesystem'
177 ' please run the application again' 179 ' please run the application again'
178 ' in order to rescan repositories') % repo_name, category='error') 180 ' in order to rescan repositories') % repo_name,
181 category='error')
179 182
180 return redirect(url('repos')) 183 return redirect(url('repos'))
181 defaults = c.repo_info.__dict__ 184 defaults = c.repo_info.__dict__
182 defaults.update({'user':c.repo_info.user.username}) 185 defaults.update({'user':c.repo_info.user.username})
183 c.users_array = repo_model.get_users_js() 186 c.users_array = repo_model.get_users_js()