Mercurial > public > src > rhodecode
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() |