From 4dcb6d1560cfd9c76127fb14c6eac18387e5b519 Mon Sep 17 00:00:00 2001 From: Shaily Date: Nov 26 2017 05:28:38 +0000 Subject: [PATCH 1/5] Emit project.user.removed message --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index eb4e2f9..3cb2844 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1644,15 +1644,25 @@ def remove_user(repo, userid, username=None, namespace=None): namespace=repo.namespace,) ) - for user in repo.users: - if str(user.id) == str(userid): - repo.users.remove(user) + for u in repo.users: + if str(u.id) == str(userid): + user = u + repo.users.remove(u) break try: # Mark the project as read_only, celery will unmark it pagure.lib.update_read_only_mode(SESSION, repo, read_only=True) SESSION.commit() pagure.lib.git.generate_gitolite_acls(project=repo) + pagure.lib.notify.log( + repo, + topic='project.user.removed', + msg=dict( + project=repo.to_json(public=True), + removed_user=user.username, + agent=flask.g.fas_user.username + ) + ) flask.flash('User removed') except SQLAlchemyError as err: # pragma: no cover SESSION.rollback() From 2aa55d87dbb0ab0ff091adeef095c20f7e8466e6 Mon Sep 17 00:00:00 2001 From: Shaily Date: Nov 26 2017 05:30:58 +0000 Subject: [PATCH 2/5] Add test to check fedmsg on add_user --- diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index 553dfef..95fa50e 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -22,7 +22,7 @@ import time import os import pygit2 -from mock import patch, MagicMock +from mock import ANY, patch, MagicMock sys.path.insert(0, os.path.join(os.path.dirname( os.path.abspath(__file__)), '..')) @@ -224,7 +224,8 @@ class PagureFlaskRepotests(tests.Modeltests): self.assertEqual(output.status_code, 404) @patch('pagure.ui.repo.admin_session_timedout') - def test_add_user(self, ast): + @patch('pagure.lib.notify.log') + def test_add_user(self, mock_log, ast): """ Test the add_user endpoint. """ ast.return_value = False @@ -316,6 +317,8 @@ class PagureFlaskRepotests(tests.Modeltests): self.assertIn( '\n User added', output.data) + mock_log.assert_called_with(ANY, topic='project.user.added', msg=ANY, redis=ANY) + @patch('pagure.ui.repo.admin_session_timedout') def test_add_group_project_when_user_mngt_off(self, ast): """ Test the add_group_project endpoint when user management is From 50175ffb11b1d6dda9a5ccbb3c6d455b79b17b49 Mon Sep 17 00:00:00 2001 From: Shaily Date: Nov 26 2017 05:34:10 +0000 Subject: [PATCH 3/5] Add test to check fedmsg on remove_user --- diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index 95fa50e..ea20d0e 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -625,7 +625,8 @@ class PagureFlaskRepotests(tests.Modeltests): self.assertEqual(output.status_code, 404) @patch('pagure.ui.repo.admin_session_timedout') - def test_remove_user(self, ast): + @patch('pagure.lib.notify.log') + def test_remove_user(self, mock_log, ast): """ Test the remove_user endpoint. """ ast.return_value = False @@ -710,6 +711,8 @@ class PagureFlaskRepotests(tests.Modeltests): repo = pagure.get_authorized_project(self.session, 'test') self.assertEqual(len(repo.users), 0) + mock_log.assert_called_with(ANY, topic='project.user.removed', msg=ANY) + @patch('pagure.ui.repo.admin_session_timedout') def test_remove_group_project_when_user_mngt_off(self, ast): """ Test the remove_group_project endpoint when user management is From b117907d3bdcf34709bc90ef1f347e950b19d5d5 Mon Sep 17 00:00:00 2001 From: Shaily Date: Nov 26 2017 05:34:14 +0000 Subject: [PATCH 4/5] Emit project.deleted message --- diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index 204ced9..20ae2a5 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -123,7 +123,7 @@ def generate_gitolite_acls(namespace=None, name=None, user=None, group=None): @conn.task(queue=APP.config.get('GITOLITE_CELERY_QUEUE', None)) -def delete_project(namespace=None, name=None, user=None): +def delete_project(namespace=None, name=None, user=None, action_user=None): """ Delete a project in pagure. This is achieved in three steps: @@ -137,6 +137,8 @@ def delete_project(namespace=None, name=None, user=None): :type name: None or str :kwarg user: the user of the project, only set if the project is a fork :type user: None or str + :kwarg action_user: the user deleting the project + :type action_user: None or str """ session = pagure.lib.create_session() @@ -185,6 +187,14 @@ def delete_project(namespace=None, name=None, user=None): try: session.delete(project) session.commit() + pagure.lib.notify.log( + project, + topic='project.deleted', + msg=dict( + project=project.to_json(public=True), + agent=action_user, + ), + ) except SQLAlchemyError: session.rollback() _log.exception( diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 3cb2844..9ec5704 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1492,7 +1492,7 @@ def delete_repo(repo, username=None, namespace=None): namespace=namespace)) task = pagure.lib.tasks.delete_project.delay( - repo.namespace, repo.name, repo.user.user if repo.is_fork else None) + repo.namespace, repo.name, repo.user.user if repo.is_fork else None, flask.g.fas_user.username) return pagure.wait_for_task(task.id) From 0ad2f9465d6a9cdf05f41d6318d2462d9804be98 Mon Sep 17 00:00:00 2001 From: Shaily Date: Nov 26 2017 05:34:14 +0000 Subject: [PATCH 5/5] Add test to check fedmsg on delete_repo --- diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index ea20d0e..77b8c52 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -2996,7 +2996,8 @@ index 0000000..fb7093d @patch('pagure.lib.notify.send_email') @patch('pagure.ui.repo.admin_session_timedout') - def test_delete_repo(self, ast, send_email): + @patch('pagure.lib.notify.log') + def test_delete_repo(self, mock_log, ast, send_email): """ Test the delete_repo endpoint. """ ast.return_value = False send_email.return_value = True @@ -3263,6 +3264,8 @@ index 0000000..fb7093d 'Forks 0', output.data) + mock_log.assert_called_with(ANY, topic='project.deleted', msg=ANY) + @patch.dict('pagure.APP.config', {'TICKETS_FOLDER': None}) @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) @patch('pagure.ui.repo.admin_session_timedout', MagicMock(return_value=False))