From 681845c5cdfc28d666e0e6017e23ed8c5bde8207 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 24 2014 09:24:55 +0000 Subject: Add logic to the repo controller to remove someone from a project --- diff --git a/progit/repo.py b/progit/repo.py index 61a4244..c71c682 100644 --- a/progit/repo.py +++ b/progit/repo.py @@ -582,6 +582,44 @@ def delete_repo(repo, username=None): flask.url_for('view_user', username=flask.g.fas_user.username)) +@APP.route('//dropuser/', methods=['POST']) +@APP.route('/fork///dropuser/', methods=['POST']) +@cla_required +def remove_user(repo, userid, username=None): + """ Remove the specified user from the project. + """ + repo = progit.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 settings for this project') + + userids = [str(user.user.id) for user in repo.users] + + if str(userid) not in userids: + flask.flash( + 'User does not have commit or cannot loose it right', 'error') + return flask.redirect( + flask.url_for( + '.view_settings', repo=repo.name, username=username) + ) + + for user in repo.users: + if str(user.user.id) == str(userid): + SESSION.delete(user) + break + SESSION.commit() + + flask.flash('User removed') + return flask.redirect( + flask.url_for('.view_settings', repo=repo.name, username=username) + ) + + @APP.route('//adduser', methods=('GET', 'POST')) @APP.route('/fork///adduser', methods=('GET', 'POST')) @cla_required