From 35c15b0e7b0e1654e7bc4f93273c7064caa268b4 Mon Sep 17 00:00:00 2001 From: Harsh Modi <133243723+hmodi-ns1@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:20:03 -0400 Subject: [PATCH 1/3] add new monitoring permissions support --- CHANGELOG.md | 5 ++ ns1/__init__.py | 2 +- ns1/rest/apikey.py | 14 ++++ ns1/rest/permissions.py | 3 + ns1/rest/team.py | 14 ++++ ns1/rest/user.py | 16 +++- tests/unit/test_apikey.py | 150 ++++++++++++++++++++++++---------- tests/unit/test_team.py | 144 +++++++++++++++++++++++---------- tests/unit/test_user.py | 165 +++++++++++++++++++++++++++----------- 9 files changed, 379 insertions(+), 134 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 026d309..9f4abcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.21.0 (July 19th, 2024) + +ENHANCEMENTS: +* Adds support for new split monitoring permissions create_jobs, update_jobs and delete_jobs + ## 0.20.0 (June 19th, 2024) ENHANCEMENTS: diff --git a/ns1/__init__.py b/ns1/__init__.py index 4dc988e..8ddaeb7 100644 --- a/ns1/__init__.py +++ b/ns1/__init__.py @@ -5,7 +5,7 @@ # from .config import Config -version = "0.20.0" +version = "0.21.0" class NS1: diff --git a/ns1/rest/apikey.py b/ns1/rest/apikey.py index 2a81e3b..bf7b1d0 100644 --- a/ns1/rest/apikey.py +++ b/ns1/rest/apikey.py @@ -28,6 +28,13 @@ def create(self, name, callback=None, errback=None, **kwargs): self._buildStdBody(body, kwargs) + # Replace `manage_jobs` with the new split permissions + if body["permissions"].get("monitoring", {}).get("manage_jobs", False): + body["permissions"]["monitoring"]["manage_jobs"] = False + body["permissions"]["monitoring"]["create_jobs"] = True + body["permissions"]["monitoring"]["update_jobs"] = True + body["permissions"]["monitoring"]["delete_jobs"] = True + return self._make_request( "PUT", "%s" % (self.ROOT), @@ -40,6 +47,13 @@ def update(self, apikey_id, callback=None, errback=None, **kwargs): body = {} self._buildStdBody(body, kwargs) + # Replace `manage_jobs` with the new split permissions + if body["permissions"].get("monitoring", {}).get("manage_jobs", False): + body["permissions"]["monitoring"]["manage_jobs"] = False + body["permissions"]["monitoring"]["create_jobs"] = True + body["permissions"]["monitoring"]["update_jobs"] = True + body["permissions"]["monitoring"]["delete_jobs"] = True + return self._make_request( "POST", "%s/%s" % (self.ROOT, apikey_id), diff --git a/ns1/rest/permissions.py b/ns1/rest/permissions.py index c27839e..e56df5d 100644 --- a/ns1/rest/permissions.py +++ b/ns1/rest/permissions.py @@ -22,6 +22,9 @@ }, "monitoring": { "manage_jobs": False, + "create_jobs": False, + "update_jobs": False, + "delete_jobs": False, "manage_lists": False, "view_jobs": False, }, diff --git a/ns1/rest/team.py b/ns1/rest/team.py index 066180a..c1be5e2 100644 --- a/ns1/rest/team.py +++ b/ns1/rest/team.py @@ -22,6 +22,13 @@ def create(self, name, callback=None, errback=None, **kwargs): self._buildStdBody(body, kwargs) + # Replace `manage_jobs` with the new split permissions + if body["permissions"].get("monitoring", {}).get("manage_jobs", False): + body["permissions"]["monitoring"]["manage_jobs"] = False + body["permissions"]["monitoring"]["create_jobs"] = True + body["permissions"]["monitoring"]["update_jobs"] = True + body["permissions"]["monitoring"]["delete_jobs"] = True + return self._make_request( "PUT", "%s" % (self.ROOT), @@ -34,6 +41,13 @@ def update(self, team_id, callback=None, errback=None, **kwargs): body = {"id": team_id} self._buildStdBody(body, kwargs) + # Replace `manage_jobs` with the new split permissions + if body["permissions"].get("monitoring", {}).get("manage_jobs", False): + body["permissions"]["monitoring"]["manage_jobs"] = False + body["permissions"]["monitoring"]["create_jobs"] = True + body["permissions"]["monitoring"]["update_jobs"] = True + body["permissions"]["monitoring"]["delete_jobs"] = True + return self._make_request( "POST", "%s/%s" % (self.ROOT, team_id), diff --git a/ns1/rest/user.py b/ns1/rest/user.py index f1b1e1d..336c90e 100644 --- a/ns1/rest/user.py +++ b/ns1/rest/user.py @@ -21,7 +21,7 @@ class User(resource.BaseResource): ] def create( - self, name, username, email, callback=None, errback=None, **kwargs + self, name, username, email, callback=None, errback=None, **kwargs ): body = {"name": name, "username": username, "email": email} @@ -33,6 +33,13 @@ def create( self._buildStdBody(body, kwargs) + # Replace `manage_jobs` with the new split permissions + if body["permissions"].get("monitoring", {}).get("manage_jobs", False): + body["permissions"]["monitoring"]["manage_jobs"] = False + body["permissions"]["monitoring"]["create_jobs"] = True + body["permissions"]["monitoring"]["update_jobs"] = True + body["permissions"]["monitoring"]["delete_jobs"] = True + return self._make_request( "PUT", "%s" % (self.ROOT), @@ -45,6 +52,13 @@ def update(self, username, callback=None, errback=None, **kwargs): body = {"username": username} self._buildStdBody(body, kwargs) + # Replace `manage_jobs` with the new split permissions + if body["permissions"].get("monitoring", {}).get("manage_jobs", False): + body["permissions"]["monitoring"]["manage_jobs"] = False + body["permissions"]["monitoring"]["create_jobs"] = True + body["permissions"]["monitoring"]["update_jobs"] = True + body["permissions"]["monitoring"]["delete_jobs"] = True + return self._make_request( "POST", "%s/%s" % (self.ROOT, username), diff --git a/tests/unit/test_apikey.py b/tests/unit/test_apikey.py index ae4e651..fe800af 100644 --- a/tests/unit/test_apikey.py +++ b/tests/unit/test_apikey.py @@ -45,54 +45,118 @@ def test_rest_apikey_retrieve(apikey_config, apikey_id, url): ) -@pytest.mark.parametrize("name, url", [("test-apikey", "account/apikeys")]) -def test_rest_apikey_create(apikey_config, name, url): - z = ns1.rest.apikey.APIKey(apikey_config) - z._make_request = mock.MagicMock() - z.create(name) - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={"name": name, "permissions": permissions._default_perms}, - ) +class TestApiKeyCreate: + @pytest.mark.parametrize("name, url", [("test-apikey", "account/apikeys")]) + def test_no_manage_jobs_set(self, apikey_config, name, url): + z = ns1.rest.apikey.APIKey(apikey_config) + z._make_request = mock.MagicMock() + z.create(name) + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={"name": name, "permissions": permissions._default_perms}, + ) + @pytest.mark.parametrize("name, url", [("test-apikey", "account/apikeys")]) + def test_manage_jobs_set_to_true(self, apikey_config, name, url): + z = ns1.rest.apikey.APIKey(apikey_config) + z._make_request = mock.MagicMock() -@pytest.mark.parametrize( - "apikey_id, name, ip_whitelist, permissions, url", - [ - ( - "test-apikey_id", - "test-apikey", - ["1.1.1.1", "2.2.2.2"], - {"data": {"push_to_datafeeds": True}}, - "account/apikeys/test-apikey_id", + z.create(name, permissions={"monitoring": {"manage_jobs": True}}) + + expected_perms = {"monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + }} + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={"name": name, "permissions": expected_perms}, ) - ], -) -def test_rest_apikey_update( - apikey_config, apikey_id, name, ip_whitelist, permissions, url -): - z = ns1.rest.apikey.APIKey(apikey_config) - z._make_request = mock.MagicMock() - z.update( - apikey_id, - name=name, - ip_whitelist=ip_whitelist, - permissions=permissions, + + +class TestApiKeyUpdate: + @pytest.mark.parametrize( + "apikey_id, name, ip_whitelist, perms, url", + [ + ( + "test-apikey_id", + "test-apikey", + ["1.1.1.1", "2.2.2.2"], + {"data": {"push_to_datafeeds": True}}, + "account/apikeys/test-apikey_id", + ) + ], ) - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": permissions, - }, + def test_no_manage_jobs_set( + self, apikey_config, apikey_id, name, ip_whitelist, perms, url + ): + z = ns1.rest.apikey.APIKey(apikey_config) + z._make_request = mock.MagicMock() + z.update( + apikey_id, + name=name, + ip_whitelist=ip_whitelist, + permissions=perms, + ) + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": perms, + }, + ) + + @pytest.mark.parametrize( + "apikey_id, name, ip_whitelist, perms, url", + [ + ( + "test-apikey_id", + "test-apikey", + ["1.1.1.1", "2.2.2.2"], + {"monitoring": {"manage_jobs": True}}, + "account/apikeys/test-apikey_id", + ) + ], ) + def test_mange_jobs_set_to_true( + self, apikey_config, apikey_id, name, ip_whitelist, perms, url + ): + z = ns1.rest.apikey.APIKey(apikey_config) + z._make_request = mock.MagicMock() + z.update( + apikey_id, + name=name, + ip_whitelist=ip_whitelist, + permissions=perms, + ) + expected_perms = {"monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + }} + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": expected_perms, + }, + ) @pytest.mark.parametrize( diff --git a/tests/unit/test_team.py b/tests/unit/test_team.py index 66fe62b..49614c0 100644 --- a/tests/unit/test_team.py +++ b/tests/unit/test_team.py @@ -45,52 +45,114 @@ def test_rest_team_retrieve(team_config, team_id, url): ) -@pytest.mark.parametrize("name, url", [("test-team", "account/teams")]) -def test_rest_team_create(team_config, name, url): - z = ns1.rest.team.Team(team_config) - z._make_request = mock.MagicMock() - z.create(name) - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={"name": name, "permissions": permissions._default_perms}, - ) +class TestTeamsCreat: + @pytest.mark.parametrize("name, url", [("test-team", "account/teams")]) + def test_no_perms_set_uses_default_perms(self, team_config, name, url): + z = ns1.rest.team.Team(team_config) + z._make_request = mock.MagicMock() + z.create(name) + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={"name": name, "permissions": permissions._default_perms}, + ) + @pytest.mark.parametrize("name, url", [("test-team", "account/teams")]) + def test_manage_jobs_set_to_true(self, team_config, name, url): + z = ns1.rest.team.Team(team_config) + z._make_request = mock.MagicMock() -@pytest.mark.parametrize( - "team_id, name, ip_whitelist, permissions, url", - [ - ( - "1", - "test-team", - [{"name": "Test Whitelist", "values": ["1.1.1.1"]}], - {"data": {"push_to_datafeeds": True}}, - "account/teams/1", + z.create(name, permissions={"monitoring": {"manage_jobs": True}}) + + expected_perms = {"monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + }} + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={"name": name, "permissions": expected_perms}, ) - ], -) -def test_rest_team_update( - team_config, team_id, name, ip_whitelist, permissions, url -): - z = ns1.rest.team.Team(team_config) - z._make_request = mock.MagicMock() - z.update( - team_id, name=name, ip_whitelist=ip_whitelist, permissions=permissions + + +class TestTeamsUpdate: + @pytest.mark.parametrize( + "team_id, name, ip_whitelist, perms, url", + [ + ( + "1", + "test-team", + [{"name": "Test Whitelist", "values": ["1.1.1.1"]}], + {"data": {"push_to_datafeeds": True}}, + "account/teams/1", + ) + ], ) - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "id": team_id, - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": permissions, - }, + def test_manage_jobs_not_set( + self, team_config, team_id, name, ip_whitelist, perms, url + ): + z = ns1.rest.team.Team(team_config) + z._make_request = mock.MagicMock() + z.update( + team_id, name=name, ip_whitelist=ip_whitelist, permissions=perms + ) + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "id": team_id, + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": perms, + }, + ) + + @pytest.mark.parametrize( + "team_id, name, ip_whitelist, perms, url", + [ + ( + "1", + "test-team", + [{"name": "Test Whitelist", "values": ["1.1.1.1"]}], + {"monitoring": {"manage_jobs": True}}, + "account/teams/1", + ) + ], ) + def test_manage_jobs_set_to_true( + self, team_config, team_id, name, ip_whitelist, perms, url + ): + z = ns1.rest.team.Team(team_config) + z._make_request = mock.MagicMock() + z.update( + team_id, name=name, ip_whitelist=ip_whitelist, permissions=perms + ) + expected_perms = {"monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + }} + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "id": team_id, + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": expected_perms, + }, + ) @pytest.mark.parametrize("team_id, url", [("1", "account/teams/1")]) diff --git a/tests/unit/test_user.py b/tests/unit/test_user.py index 03f9b75..a36b95d 100644 --- a/tests/unit/test_user.py +++ b/tests/unit/test_user.py @@ -45,60 +45,129 @@ def test_rest_user_retrieve(user_config, username, url): ) -@pytest.mark.parametrize( - "name, username, email, url", - [("test-user", "test-username", "test-email@ns1.io", "account/users")], -) -def test_rest_user_create(user_config, name, username, email, url): - z = ns1.rest.user.User(user_config) - z._make_request = mock.MagicMock() - z.create(name, username, email) - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={ - "name": name, - "username": username, - "email": email, - "permissions": permissions._default_perms, - }, +class TestUserCreate: + @pytest.mark.parametrize( + "name, username, email, url", + [("test-user", "test-username", "test-email@ns1.io", "account/users")], ) + def test_no_permissions_set(self, user_config, name, username, email, url): + z = ns1.rest.user.User(user_config) + z._make_request = mock.MagicMock() + z.create(name, username, email) + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={ + "name": name, + "username": username, + "email": email, + "permissions": permissions._default_perms, + }, + ) + @pytest.mark.parametrize( + "name, username, email, url", + [("test-user", "test-username", "test-email@ns1.io", "account/users")], + ) + def test_manage_jobs_set_to_true(self, user_config, name, username, email, url): + z = ns1.rest.user.User(user_config) + z._make_request = mock.MagicMock() + z.create(name, username, email, permissions={"monitoring": {"manage_jobs": True}}) -@pytest.mark.parametrize( - "username, name, ip_whitelist, permissions, url", - [ - ( - "test-username", - "test-user", - ["1.1.1.1", "2.2.2.2"], - {"data": {"push_to_datafeeds": True}}, - "account/users/test-username", + expected_perms = {"monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + }} + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={ + "name": name, + "username": username, + "email": email, + "permissions": expected_perms, + }, ) - ], -) -def test_rest_user_update( - user_config, username, name, ip_whitelist, permissions, url -): - z = ns1.rest.user.User(user_config) - z._make_request = mock.MagicMock() - z.update( - username, name=name, ip_whitelist=ip_whitelist, permissions=permissions + + +class TestUserUpdate: + @pytest.mark.parametrize( + "username, name, ip_whitelist, pers, url", + [ + ( + "test-username", + "test-user", + ["1.1.1.1", "2.2.2.2"], + {"data": {"push_to_datafeeds": True}}, + "account/users/test-username", + ) + ], ) - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "username": username, - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": permissions, - }, + def test_manage_jobs_not_set( + self, user_config, username, name, ip_whitelist, pers, url + ): + z = ns1.rest.user.User(user_config) + z._make_request = mock.MagicMock() + z.update( + username, name=name, ip_whitelist=ip_whitelist, permissions=pers + ) + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "username": username, + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": pers, + }, + ) + + @pytest.mark.parametrize( + "username, name, ip_whitelist, perms, url", + [ + ( + "test-username", + "test-user", + ["1.1.1.1", "2.2.2.2"], + {"monitoring": {"manage_jobs": True}}, + "account/users/test-username", + ) + ], ) + def test_manage_jobs_set_to_true( + self, user_config, username, name, ip_whitelist, perms, url + ): + z = ns1.rest.user.User(user_config) + z._make_request = mock.MagicMock() + z.update( + username, name=name, ip_whitelist=ip_whitelist, permissions=perms + ) + expected_perms = {"monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + }} + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "username": username, + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": expected_perms, + }, + ) @pytest.mark.parametrize( From 4b928bfab8da19cc2b5097346cddb1aa5f4281e2 Mon Sep 17 00:00:00 2001 From: Harsh Modi <133243723+hmodi-ns1@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:22:47 -0400 Subject: [PATCH 2/3] fix linting issue --- ns1/rest/user.py | 2 +- tests/unit/test_apikey.py | 28 ++++++++++++++------------ tests/unit/test_team.py | 28 ++++++++++++++------------ tests/unit/test_user.py | 41 +++++++++++++++++++++++++-------------- 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/ns1/rest/user.py b/ns1/rest/user.py index 336c90e..642d9cf 100644 --- a/ns1/rest/user.py +++ b/ns1/rest/user.py @@ -21,7 +21,7 @@ class User(resource.BaseResource): ] def create( - self, name, username, email, callback=None, errback=None, **kwargs + self, name, username, email, callback=None, errback=None, **kwargs ): body = {"name": name, "username": username, "email": email} diff --git a/tests/unit/test_apikey.py b/tests/unit/test_apikey.py index fe800af..22ebb3c 100644 --- a/tests/unit/test_apikey.py +++ b/tests/unit/test_apikey.py @@ -66,12 +66,14 @@ def test_manage_jobs_set_to_true(self, apikey_config, name, url): z.create(name, permissions={"monitoring": {"manage_jobs": True}}) - expected_perms = {"monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - }} + expected_perms = { + "monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + } + } z._make_request.assert_called_once_with( "PUT", url, @@ -140,12 +142,14 @@ def test_mange_jobs_set_to_true( ip_whitelist=ip_whitelist, permissions=perms, ) - expected_perms = {"monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - }} + expected_perms = { + "monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + } + } z._make_request.assert_called_once_with( "POST", url, diff --git a/tests/unit/test_team.py b/tests/unit/test_team.py index 49614c0..78ce5d6 100644 --- a/tests/unit/test_team.py +++ b/tests/unit/test_team.py @@ -66,12 +66,14 @@ def test_manage_jobs_set_to_true(self, team_config, name, url): z.create(name, permissions={"monitoring": {"manage_jobs": True}}) - expected_perms = {"monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - }} + expected_perms = { + "monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + } + } z._make_request.assert_called_once_with( "PUT", url, @@ -135,12 +137,14 @@ def test_manage_jobs_set_to_true( z.update( team_id, name=name, ip_whitelist=ip_whitelist, permissions=perms ) - expected_perms = {"monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - }} + expected_perms = { + "monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + } + } z._make_request.assert_called_once_with( "POST", url, diff --git a/tests/unit/test_user.py b/tests/unit/test_user.py index a36b95d..98e5d86 100644 --- a/tests/unit/test_user.py +++ b/tests/unit/test_user.py @@ -71,17 +71,26 @@ def test_no_permissions_set(self, user_config, name, username, email, url): "name, username, email, url", [("test-user", "test-username", "test-email@ns1.io", "account/users")], ) - def test_manage_jobs_set_to_true(self, user_config, name, username, email, url): + def test_manage_jobs_set_to_true( + self, user_config, name, username, email, url + ): z = ns1.rest.user.User(user_config) z._make_request = mock.MagicMock() - z.create(name, username, email, permissions={"monitoring": {"manage_jobs": True}}) - - expected_perms = {"monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - }} + z.create( + name, + username, + email, + permissions={"monitoring": {"manage_jobs": True}}, + ) + + expected_perms = { + "monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + } + } z._make_request.assert_called_once_with( "PUT", url, @@ -150,12 +159,14 @@ def test_manage_jobs_set_to_true( z.update( username, name=name, ip_whitelist=ip_whitelist, permissions=perms ) - expected_perms = {"monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - }} + expected_perms = { + "monitoring": { + "manage_jobs": False, + "create_jobs": True, + "update_jobs": True, + "delete_jobs": True, + } + } z._make_request.assert_called_once_with( "POST", url, From 1a6471d63111c82a85f6dd6dee28ae04e6852850 Mon Sep 17 00:00:00 2001 From: Harsh Modi <133243723+hmodi-ns1@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:36:39 -0400 Subject: [PATCH 3/3] revert some custom perm values reset logic --- ns1/rest/apikey.py | 14 --- ns1/rest/permissions.py | 3 + ns1/rest/team.py | 14 --- ns1/rest/user.py | 14 --- tests/unit/test_apikey.py | 154 ++++++++++----------------------- tests/unit/test_team.py | 148 +++++++++----------------------- tests/unit/test_user.py | 176 +++++++++++--------------------------- 7 files changed, 135 insertions(+), 388 deletions(-) diff --git a/ns1/rest/apikey.py b/ns1/rest/apikey.py index bf7b1d0..2a81e3b 100644 --- a/ns1/rest/apikey.py +++ b/ns1/rest/apikey.py @@ -28,13 +28,6 @@ def create(self, name, callback=None, errback=None, **kwargs): self._buildStdBody(body, kwargs) - # Replace `manage_jobs` with the new split permissions - if body["permissions"].get("monitoring", {}).get("manage_jobs", False): - body["permissions"]["monitoring"]["manage_jobs"] = False - body["permissions"]["monitoring"]["create_jobs"] = True - body["permissions"]["monitoring"]["update_jobs"] = True - body["permissions"]["monitoring"]["delete_jobs"] = True - return self._make_request( "PUT", "%s" % (self.ROOT), @@ -47,13 +40,6 @@ def update(self, apikey_id, callback=None, errback=None, **kwargs): body = {} self._buildStdBody(body, kwargs) - # Replace `manage_jobs` with the new split permissions - if body["permissions"].get("monitoring", {}).get("manage_jobs", False): - body["permissions"]["monitoring"]["manage_jobs"] = False - body["permissions"]["monitoring"]["create_jobs"] = True - body["permissions"]["monitoring"]["update_jobs"] = True - body["permissions"]["monitoring"]["delete_jobs"] = True - return self._make_request( "POST", "%s/%s" % (self.ROOT, apikey_id), diff --git a/ns1/rest/permissions.py b/ns1/rest/permissions.py index e56df5d..6526f4a 100644 --- a/ns1/rest/permissions.py +++ b/ns1/rest/permissions.py @@ -53,6 +53,9 @@ }, "monitoring": { "manage_jobs": False, + "create_jobs": False, + "update_jobs": False, + "delete_jobs": False, "manage_lists": False, "view_jobs": False, }, diff --git a/ns1/rest/team.py b/ns1/rest/team.py index c1be5e2..066180a 100644 --- a/ns1/rest/team.py +++ b/ns1/rest/team.py @@ -22,13 +22,6 @@ def create(self, name, callback=None, errback=None, **kwargs): self._buildStdBody(body, kwargs) - # Replace `manage_jobs` with the new split permissions - if body["permissions"].get("monitoring", {}).get("manage_jobs", False): - body["permissions"]["monitoring"]["manage_jobs"] = False - body["permissions"]["monitoring"]["create_jobs"] = True - body["permissions"]["monitoring"]["update_jobs"] = True - body["permissions"]["monitoring"]["delete_jobs"] = True - return self._make_request( "PUT", "%s" % (self.ROOT), @@ -41,13 +34,6 @@ def update(self, team_id, callback=None, errback=None, **kwargs): body = {"id": team_id} self._buildStdBody(body, kwargs) - # Replace `manage_jobs` with the new split permissions - if body["permissions"].get("monitoring", {}).get("manage_jobs", False): - body["permissions"]["monitoring"]["manage_jobs"] = False - body["permissions"]["monitoring"]["create_jobs"] = True - body["permissions"]["monitoring"]["update_jobs"] = True - body["permissions"]["monitoring"]["delete_jobs"] = True - return self._make_request( "POST", "%s/%s" % (self.ROOT, team_id), diff --git a/ns1/rest/user.py b/ns1/rest/user.py index 642d9cf..f1b1e1d 100644 --- a/ns1/rest/user.py +++ b/ns1/rest/user.py @@ -33,13 +33,6 @@ def create( self._buildStdBody(body, kwargs) - # Replace `manage_jobs` with the new split permissions - if body["permissions"].get("monitoring", {}).get("manage_jobs", False): - body["permissions"]["monitoring"]["manage_jobs"] = False - body["permissions"]["monitoring"]["create_jobs"] = True - body["permissions"]["monitoring"]["update_jobs"] = True - body["permissions"]["monitoring"]["delete_jobs"] = True - return self._make_request( "PUT", "%s" % (self.ROOT), @@ -52,13 +45,6 @@ def update(self, username, callback=None, errback=None, **kwargs): body = {"username": username} self._buildStdBody(body, kwargs) - # Replace `manage_jobs` with the new split permissions - if body["permissions"].get("monitoring", {}).get("manage_jobs", False): - body["permissions"]["monitoring"]["manage_jobs"] = False - body["permissions"]["monitoring"]["create_jobs"] = True - body["permissions"]["monitoring"]["update_jobs"] = True - body["permissions"]["monitoring"]["delete_jobs"] = True - return self._make_request( "POST", "%s/%s" % (self.ROOT, username), diff --git a/tests/unit/test_apikey.py b/tests/unit/test_apikey.py index 22ebb3c..ae4e651 100644 --- a/tests/unit/test_apikey.py +++ b/tests/unit/test_apikey.py @@ -45,122 +45,54 @@ def test_rest_apikey_retrieve(apikey_config, apikey_id, url): ) -class TestApiKeyCreate: - @pytest.mark.parametrize("name, url", [("test-apikey", "account/apikeys")]) - def test_no_manage_jobs_set(self, apikey_config, name, url): - z = ns1.rest.apikey.APIKey(apikey_config) - z._make_request = mock.MagicMock() - z.create(name) - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={"name": name, "permissions": permissions._default_perms}, - ) - - @pytest.mark.parametrize("name, url", [("test-apikey", "account/apikeys")]) - def test_manage_jobs_set_to_true(self, apikey_config, name, url): - z = ns1.rest.apikey.APIKey(apikey_config) - z._make_request = mock.MagicMock() +@pytest.mark.parametrize("name, url", [("test-apikey", "account/apikeys")]) +def test_rest_apikey_create(apikey_config, name, url): + z = ns1.rest.apikey.APIKey(apikey_config) + z._make_request = mock.MagicMock() + z.create(name) + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={"name": name, "permissions": permissions._default_perms}, + ) - z.create(name, permissions={"monitoring": {"manage_jobs": True}}) - expected_perms = { - "monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - } - } - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={"name": name, "permissions": expected_perms}, +@pytest.mark.parametrize( + "apikey_id, name, ip_whitelist, permissions, url", + [ + ( + "test-apikey_id", + "test-apikey", + ["1.1.1.1", "2.2.2.2"], + {"data": {"push_to_datafeeds": True}}, + "account/apikeys/test-apikey_id", ) - - -class TestApiKeyUpdate: - @pytest.mark.parametrize( - "apikey_id, name, ip_whitelist, perms, url", - [ - ( - "test-apikey_id", - "test-apikey", - ["1.1.1.1", "2.2.2.2"], - {"data": {"push_to_datafeeds": True}}, - "account/apikeys/test-apikey_id", - ) - ], + ], +) +def test_rest_apikey_update( + apikey_config, apikey_id, name, ip_whitelist, permissions, url +): + z = ns1.rest.apikey.APIKey(apikey_config) + z._make_request = mock.MagicMock() + z.update( + apikey_id, + name=name, + ip_whitelist=ip_whitelist, + permissions=permissions, ) - def test_no_manage_jobs_set( - self, apikey_config, apikey_id, name, ip_whitelist, perms, url - ): - z = ns1.rest.apikey.APIKey(apikey_config) - z._make_request = mock.MagicMock() - z.update( - apikey_id, - name=name, - ip_whitelist=ip_whitelist, - permissions=perms, - ) - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": perms, - }, - ) - - @pytest.mark.parametrize( - "apikey_id, name, ip_whitelist, perms, url", - [ - ( - "test-apikey_id", - "test-apikey", - ["1.1.1.1", "2.2.2.2"], - {"monitoring": {"manage_jobs": True}}, - "account/apikeys/test-apikey_id", - ) - ], + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": permissions, + }, ) - def test_mange_jobs_set_to_true( - self, apikey_config, apikey_id, name, ip_whitelist, perms, url - ): - z = ns1.rest.apikey.APIKey(apikey_config) - z._make_request = mock.MagicMock() - z.update( - apikey_id, - name=name, - ip_whitelist=ip_whitelist, - permissions=perms, - ) - expected_perms = { - "monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - } - } - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": expected_perms, - }, - ) @pytest.mark.parametrize( diff --git a/tests/unit/test_team.py b/tests/unit/test_team.py index 78ce5d6..66fe62b 100644 --- a/tests/unit/test_team.py +++ b/tests/unit/test_team.py @@ -45,118 +45,52 @@ def test_rest_team_retrieve(team_config, team_id, url): ) -class TestTeamsCreat: - @pytest.mark.parametrize("name, url", [("test-team", "account/teams")]) - def test_no_perms_set_uses_default_perms(self, team_config, name, url): - z = ns1.rest.team.Team(team_config) - z._make_request = mock.MagicMock() - z.create(name) - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={"name": name, "permissions": permissions._default_perms}, - ) - - @pytest.mark.parametrize("name, url", [("test-team", "account/teams")]) - def test_manage_jobs_set_to_true(self, team_config, name, url): - z = ns1.rest.team.Team(team_config) - z._make_request = mock.MagicMock() +@pytest.mark.parametrize("name, url", [("test-team", "account/teams")]) +def test_rest_team_create(team_config, name, url): + z = ns1.rest.team.Team(team_config) + z._make_request = mock.MagicMock() + z.create(name) + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={"name": name, "permissions": permissions._default_perms}, + ) - z.create(name, permissions={"monitoring": {"manage_jobs": True}}) - expected_perms = { - "monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - } - } - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={"name": name, "permissions": expected_perms}, +@pytest.mark.parametrize( + "team_id, name, ip_whitelist, permissions, url", + [ + ( + "1", + "test-team", + [{"name": "Test Whitelist", "values": ["1.1.1.1"]}], + {"data": {"push_to_datafeeds": True}}, + "account/teams/1", ) - - -class TestTeamsUpdate: - @pytest.mark.parametrize( - "team_id, name, ip_whitelist, perms, url", - [ - ( - "1", - "test-team", - [{"name": "Test Whitelist", "values": ["1.1.1.1"]}], - {"data": {"push_to_datafeeds": True}}, - "account/teams/1", - ) - ], + ], +) +def test_rest_team_update( + team_config, team_id, name, ip_whitelist, permissions, url +): + z = ns1.rest.team.Team(team_config) + z._make_request = mock.MagicMock() + z.update( + team_id, name=name, ip_whitelist=ip_whitelist, permissions=permissions ) - def test_manage_jobs_not_set( - self, team_config, team_id, name, ip_whitelist, perms, url - ): - z = ns1.rest.team.Team(team_config) - z._make_request = mock.MagicMock() - z.update( - team_id, name=name, ip_whitelist=ip_whitelist, permissions=perms - ) - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "id": team_id, - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": perms, - }, - ) - - @pytest.mark.parametrize( - "team_id, name, ip_whitelist, perms, url", - [ - ( - "1", - "test-team", - [{"name": "Test Whitelist", "values": ["1.1.1.1"]}], - {"monitoring": {"manage_jobs": True}}, - "account/teams/1", - ) - ], + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "id": team_id, + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": permissions, + }, ) - def test_manage_jobs_set_to_true( - self, team_config, team_id, name, ip_whitelist, perms, url - ): - z = ns1.rest.team.Team(team_config) - z._make_request = mock.MagicMock() - z.update( - team_id, name=name, ip_whitelist=ip_whitelist, permissions=perms - ) - expected_perms = { - "monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - } - } - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "id": team_id, - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": expected_perms, - }, - ) @pytest.mark.parametrize("team_id, url", [("1", "account/teams/1")]) diff --git a/tests/unit/test_user.py b/tests/unit/test_user.py index 98e5d86..03f9b75 100644 --- a/tests/unit/test_user.py +++ b/tests/unit/test_user.py @@ -45,140 +45,60 @@ def test_rest_user_retrieve(user_config, username, url): ) -class TestUserCreate: - @pytest.mark.parametrize( - "name, username, email, url", - [("test-user", "test-username", "test-email@ns1.io", "account/users")], +@pytest.mark.parametrize( + "name, username, email, url", + [("test-user", "test-username", "test-email@ns1.io", "account/users")], +) +def test_rest_user_create(user_config, name, username, email, url): + z = ns1.rest.user.User(user_config) + z._make_request = mock.MagicMock() + z.create(name, username, email) + z._make_request.assert_called_once_with( + "PUT", + url, + callback=None, + errback=None, + body={ + "name": name, + "username": username, + "email": email, + "permissions": permissions._default_perms, + }, ) - def test_no_permissions_set(self, user_config, name, username, email, url): - z = ns1.rest.user.User(user_config) - z._make_request = mock.MagicMock() - z.create(name, username, email) - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={ - "name": name, - "username": username, - "email": email, - "permissions": permissions._default_perms, - }, - ) - @pytest.mark.parametrize( - "name, username, email, url", - [("test-user", "test-username", "test-email@ns1.io", "account/users")], - ) - def test_manage_jobs_set_to_true( - self, user_config, name, username, email, url - ): - z = ns1.rest.user.User(user_config) - z._make_request = mock.MagicMock() - z.create( - name, - username, - email, - permissions={"monitoring": {"manage_jobs": True}}, - ) - expected_perms = { - "monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - } - } - z._make_request.assert_called_once_with( - "PUT", - url, - callback=None, - errback=None, - body={ - "name": name, - "username": username, - "email": email, - "permissions": expected_perms, - }, +@pytest.mark.parametrize( + "username, name, ip_whitelist, permissions, url", + [ + ( + "test-username", + "test-user", + ["1.1.1.1", "2.2.2.2"], + {"data": {"push_to_datafeeds": True}}, + "account/users/test-username", ) - - -class TestUserUpdate: - @pytest.mark.parametrize( - "username, name, ip_whitelist, pers, url", - [ - ( - "test-username", - "test-user", - ["1.1.1.1", "2.2.2.2"], - {"data": {"push_to_datafeeds": True}}, - "account/users/test-username", - ) - ], + ], +) +def test_rest_user_update( + user_config, username, name, ip_whitelist, permissions, url +): + z = ns1.rest.user.User(user_config) + z._make_request = mock.MagicMock() + z.update( + username, name=name, ip_whitelist=ip_whitelist, permissions=permissions ) - def test_manage_jobs_not_set( - self, user_config, username, name, ip_whitelist, pers, url - ): - z = ns1.rest.user.User(user_config) - z._make_request = mock.MagicMock() - z.update( - username, name=name, ip_whitelist=ip_whitelist, permissions=pers - ) - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "username": username, - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": pers, - }, - ) - - @pytest.mark.parametrize( - "username, name, ip_whitelist, perms, url", - [ - ( - "test-username", - "test-user", - ["1.1.1.1", "2.2.2.2"], - {"monitoring": {"manage_jobs": True}}, - "account/users/test-username", - ) - ], + z._make_request.assert_called_once_with( + "POST", + url, + callback=None, + errback=None, + body={ + "username": username, + "name": name, + "ip_whitelist": ip_whitelist, + "permissions": permissions, + }, ) - def test_manage_jobs_set_to_true( - self, user_config, username, name, ip_whitelist, perms, url - ): - z = ns1.rest.user.User(user_config) - z._make_request = mock.MagicMock() - z.update( - username, name=name, ip_whitelist=ip_whitelist, permissions=perms - ) - expected_perms = { - "monitoring": { - "manage_jobs": False, - "create_jobs": True, - "update_jobs": True, - "delete_jobs": True, - } - } - z._make_request.assert_called_once_with( - "POST", - url, - callback=None, - errback=None, - body={ - "username": username, - "name": name, - "ip_whitelist": ip_whitelist, - "permissions": expected_perms, - }, - ) @pytest.mark.parametrize(