From 6fb4f7be9a2f5ebc7c72bb44e050265bc4da43d3 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 06 2016 08:49:51 +0000 Subject: [PATCH 1/5] Enforce that the userid is an integer --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index cd2b1ef..63aefcd 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1174,8 +1174,9 @@ def new_repo_hook_token(repo, username=None): flask.url_for('view_settings', repo=repo.name, username=username)) -@APP.route('//dropuser/', methods=['POST']) -@APP.route('/fork///dropuser/', methods=['POST']) +@APP.route('//dropuser/', methods=['POST']) +@APP.route('/fork///dropuser/', + methods=['POST']) @login_required def remove_user(repo, userid, username=None): """ Remove the specified user from the project. From 761d06a56e3a394f32e6702b9aabda60687946f1 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 06 2016 08:49:51 +0000 Subject: [PATCH 2/5] Add endpoint to remove a group from a project --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 63aefcd..5dfe78e 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1287,6 +1287,59 @@ def add_user(repo, username=None): ) +@APP.route('//dropgroup/', methods=['POST']) +@APP.route('/fork///dropgroup/', methods=['POST']) +@login_required +def remove_group_project(repo, groupid, username=None): + """ Remove the specified group from the project. + """ + if admin_session_timedout(): + flask.flash('Action canceled, try it again', 'error') + url = flask.url_for( + 'view_settings', username=username, repo=repo) + return flask.redirect( + flask.url_for('auth_login', next=url)) + + repo = pagure.lib.get_project(SESSION, repo, user=username) + + if not repo: + flask.abort(404, 'Project not found') + + if not is_repo_admin(repo): + flask.abort( + 403, + 'You are not allowed to change the users for this project') + + form = pagure.forms.ConfirmationForm() + if form.validate_on_submit(): + grpids = [grp.id for grp in repo.groups] + + if groupid not in grpids: + flask.flash( + 'Group does not seem to be part of this group', 'error') + return flask.redirect( + flask.url_for( + '.view_settings', repo=repo.name, username=username) + ) + + for grp in repo.groups: + if grp.id == groupid: + repo.groups.remove(grp) + break + try: + SESSION.commit() + pagure.lib.git.generate_gitolite_acls() + flask.flash('Group removed') + except SQLAlchemyError as err: # pragma: no cover + SESSION.rollback() + APP.logger.exception(err) + flask.flash('Group could not be removed', 'error') + + return flask.redirect( + flask.url_for('.view_settings', repo=repo.name, username=username) + ) + + @APP.route('//addgroup/', methods=('GET', 'POST')) @APP.route('//addgroup', methods=('GET', 'POST')) @APP.route('/fork///addgroup/', methods=('GET', 'POST')) From accfc9bfd6dcf6494706d8286b2ee2b7b22ebe75 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 06 2016 08:49:52 +0000 Subject: [PATCH 3/5] Adjust the settings template to make the delete group button work --- diff --git a/pagure/templates/settings.html b/pagure/templates/settings.html index c73f220..94bc1e2 100644 --- a/pagure/templates/settings.html +++ b/pagure/templates/settings.html @@ -151,10 +151,12 @@ {{ form.csrf_token }} {% endif %} - -