Mercurial > public > src > rhodecode
comparison pylons_app/controllers/admin/repos.py @ 412:ca54622e39a1
Added separate create repository views for non administrative users.
Fixed permission issue with private repos
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 01 Aug 2010 17:08:58 +0200 |
parents | 7fbf81447c6c |
children | 905c4f049c9e f5c1eec9f376 |
comparison
equal
deleted
inserted
replaced
411:86a25ad59766 | 412:ca54622e39a1 |
---|---|
27 from paste.httpexceptions import HTTPInternalServerError | 27 from paste.httpexceptions import HTTPInternalServerError |
28 from pylons import request, response, session, tmpl_context as c, url | 28 from pylons import request, response, session, tmpl_context as c, url |
29 from pylons.controllers.util import abort, redirect | 29 from pylons.controllers.util import abort, redirect |
30 from pylons.i18n.translation import _ | 30 from pylons.i18n.translation import _ |
31 from pylons_app.lib import helpers as h | 31 from pylons_app.lib import helpers as h |
32 from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator | 32 from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
33 HasPermissionAnyDecorator | |
33 from pylons_app.lib.base import BaseController, render | 34 from pylons_app.lib.base import BaseController, render |
34 from pylons_app.lib.utils import invalidate_cache | 35 from pylons_app.lib.utils import invalidate_cache |
35 from pylons_app.model.db import User | 36 from pylons_app.model.db import User |
36 from pylons_app.model.forms import RepoForm | 37 from pylons_app.model.forms import RepoForm |
37 from pylons_app.model.hg_model import HgModel | 38 from pylons_app.model.hg_model import HgModel |
47 # To properly map this controller, ensure your config/routing.py | 48 # To properly map this controller, ensure your config/routing.py |
48 # file has a resource setup: | 49 # file has a resource setup: |
49 # map.resource('repo', 'repos') | 50 # map.resource('repo', 'repos') |
50 | 51 |
51 @LoginRequired() | 52 @LoginRequired() |
52 @HasPermissionAllDecorator('hg.admin') | 53 @HasPermissionAnyDecorator('hg.admin', 'repository.create') |
53 def __before__(self): | 54 def __before__(self): |
54 c.admin_user = session.get('admin_user') | 55 c.admin_user = session.get('admin_user') |
55 c.admin_username = session.get('admin_username') | 56 c.admin_username = session.get('admin_username') |
56 super(ReposController, self).__before__() | 57 super(ReposController, self).__before__() |
57 | 58 |
59 @HasPermissionAllDecorator('hg.admin') | |
58 def index(self, format='html'): | 60 def index(self, format='html'): |
59 """GET /repos: All items in the collection""" | 61 """GET /repos: All items in the collection""" |
60 # url('repos') | 62 # url('repos') |
61 cached_repo_list = HgModel().get_repos() | 63 cached_repo_list = HgModel().get_repos() |
62 c.repos_list = sorted(cached_repo_list, key=itemgetter('name_sort')) | 64 c.repos_list = sorted(cached_repo_list, key=itemgetter('name_sort')) |
63 return render('admin/repos/repos.html') | 65 return render('admin/repos/repos.html') |
64 | 66 |
67 @HasPermissionAnyDecorator('hg.admin', 'repository.create') | |
65 def create(self): | 68 def create(self): |
66 """POST /repos: Create a new item""" | 69 """POST /repos: Create a new item""" |
67 # url('repos') | 70 # url('repos') |
68 repo_model = RepoModel() | 71 repo_model = RepoModel() |
69 _form = RepoForm()() | 72 _form = RepoForm()() |
75 h.flash(_('created repository %s') % form_result['repo_name'], | 78 h.flash(_('created repository %s') % form_result['repo_name'], |
76 category='success') | 79 category='success') |
77 | 80 |
78 except formencode.Invalid as errors: | 81 except formencode.Invalid as errors: |
79 c.new_repo = errors.value['repo_name'] | 82 c.new_repo = errors.value['repo_name'] |
83 | |
84 if request.POST.get('user_created'): | |
85 r = render('admin/repos/repo_add_create_repository.html') | |
86 else: | |
87 r = render('admin/repos/repo_add.html') | |
88 | |
80 return htmlfill.render( | 89 return htmlfill.render( |
81 render('admin/repos/repo_add.html'), | 90 r, |
82 defaults=errors.value, | 91 defaults=errors.value, |
83 errors=errors.error_dict or {}, | 92 errors=errors.error_dict or {}, |
84 prefix_error=False, | 93 prefix_error=False, |
85 encoding="UTF-8") | 94 encoding="UTF-8") |
86 | 95 |
87 except Exception: | 96 except Exception: |
88 log.error(traceback.format_exc()) | 97 log.error(traceback.format_exc()) |
89 msg = _('error occured during creation of repository %s') \ | 98 msg = _('error occured during creation of repository %s') \ |
90 % form_result.get('repo_name') | 99 % form_result.get('repo_name') |
91 h.flash(msg, category='error') | 100 h.flash(msg, category='error') |
92 | 101 if request.POST.get('user_created'): |
93 return redirect('repos') | 102 return redirect(url('hg_home')) |
94 | 103 return redirect(url('repos')) |
104 | |
105 @HasPermissionAllDecorator('hg.admin') | |
95 def new(self, format='html'): | 106 def new(self, format='html'): |
96 """GET /repos/new: Form to create a new item""" | 107 """GET /repos/new: Form to create a new item""" |
97 new_repo = request.GET.get('repo', '') | 108 new_repo = request.GET.get('repo', '') |
98 c.new_repo = h.repo_name_slug(new_repo) | 109 c.new_repo = h.repo_name_slug(new_repo) |
99 | 110 |
100 return render('admin/repos/repo_add.html') | 111 return render('admin/repos/repo_add.html') |
101 | 112 |
113 @HasPermissionAllDecorator('hg.admin') | |
102 def update(self, repo_name): | 114 def update(self, repo_name): |
103 """PUT /repos/repo_name: Update an existing item""" | 115 """PUT /repos/repo_name: Update an existing item""" |
104 # Forms posted to this method should contain a hidden field: | 116 # Forms posted to this method should contain a hidden field: |
105 # <input type="hidden" name="_method" value="PUT" /> | 117 # <input type="hidden" name="_method" value="PUT" /> |
106 # Or using helpers: | 118 # Or using helpers: |
134 h.flash(_('error occured during update of repository %s') \ | 146 h.flash(_('error occured during update of repository %s') \ |
135 % repo_name, category='error') | 147 % repo_name, category='error') |
136 | 148 |
137 return redirect(url('edit_repo', repo_name=changed_name)) | 149 return redirect(url('edit_repo', repo_name=changed_name)) |
138 | 150 |
151 @HasPermissionAllDecorator('hg.admin') | |
139 def delete(self, repo_name): | 152 def delete(self, repo_name): |
140 """DELETE /repos/repo_name: Delete an existing item""" | 153 """DELETE /repos/repo_name: Delete an existing item""" |
141 # Forms posted to this method should contain a hidden field: | 154 # Forms posted to this method should contain a hidden field: |
142 # <input type="hidden" name="_method" value="DELETE" /> | 155 # <input type="hidden" name="_method" value="DELETE" /> |
143 # Or using helpers: | 156 # Or using helpers: |
162 except Exception: | 175 except Exception: |
163 h.flash(_('An error occured during deletion of %s') % repo_name, | 176 h.flash(_('An error occured during deletion of %s') % repo_name, |
164 category='error') | 177 category='error') |
165 | 178 |
166 return redirect(url('repos')) | 179 return redirect(url('repos')) |
167 | 180 |
181 @HasPermissionAllDecorator('hg.admin') | |
168 def delete_perm_user(self, repo_name): | 182 def delete_perm_user(self, repo_name): |
169 """ | 183 """ |
170 DELETE an existing repository permission user | 184 DELETE an existing repository permission user |
171 @param repo_name: | 185 @param repo_name: |
172 """ | 186 """ |
176 repo_model.delete_perm_user(request.POST, repo_name) | 190 repo_model.delete_perm_user(request.POST, repo_name) |
177 except Exception as e: | 191 except Exception as e: |
178 h.flash(_('An error occured during deletion of repository user'), | 192 h.flash(_('An error occured during deletion of repository user'), |
179 category='error') | 193 category='error') |
180 raise HTTPInternalServerError() | 194 raise HTTPInternalServerError() |
181 | 195 |
196 @HasPermissionAllDecorator('hg.admin') | |
182 def show(self, repo_name, format='html'): | 197 def show(self, repo_name, format='html'): |
183 """GET /repos/repo_name: Show a specific item""" | 198 """GET /repos/repo_name: Show a specific item""" |
184 # url('repo', repo_name=ID) | 199 # url('repo', repo_name=ID) |
185 | 200 |
201 @HasPermissionAllDecorator('hg.admin') | |
186 def edit(self, repo_name, format='html'): | 202 def edit(self, repo_name, format='html'): |
187 """GET /repos/repo_name/edit: Form to edit an existing item""" | 203 """GET /repos/repo_name/edit: Form to edit an existing item""" |
188 # url('edit_repo', repo_name=ID) | 204 # url('edit_repo', repo_name=ID) |
189 repo_model = RepoModel() | 205 repo_model = RepoModel() |
190 c.repo_info = repo = repo_model.get(repo_name) | 206 c.repo_info = repo = repo_model.get(repo_name) |