From 92f2d022077b060f87d09449884772988ece9f52 Mon Sep 17 00:00:00 2001 From: Ryan Cross Date: Wed, 9 Jun 2021 18:13:17 +0000 Subject: [PATCH] Fix /api/v2/person/person to work with Robot apikey. Commit ready for merge. - Legacy-Id: 19101 --- ietf/api/tests.py | 24 +++++++++--------------- ietf/api/views.py | 4 ++-- ietf/ietfauth/tests.py | 2 +- ietf/person/models.py | 1 - 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/ietf/api/tests.py b/ietf/api/tests.py index 011cba2a2..12d91573b 100644 --- a/ietf/api/tests.py +++ b/ietf/api/tests.py @@ -257,9 +257,9 @@ class CustomApiTests(TestCase): def test_api_v2_person_export_view(self): url = urlreverse('ietf.api.views.ApiV2PersonExportView') - secretariat_role = RoleFactory(group__acronym='secretariat', name_id='secr') - secretariat = secretariat_role.person - apikey = PersonalApiKey.objects.create(endpoint=url, person=secretariat) + robot = PersonFactory(user__is_staff=True) + RoleFactory(name_id='robot', person=robot, email=robot.email(), group__acronym='secretariat') + apikey = PersonalApiKey.objects.create(endpoint=url, person=robot) # error cases r = self.client.post(url, {}) @@ -270,25 +270,19 @@ class CustomApiTests(TestCase): badrole.person.user.last_login = timezone.now() badrole.person.user.save() r = self.client.post(url, {'apikey': badapikey.hash()}) - self.assertContains(r, "Restricted to role: Secretariat", status_code=403) - - r = self.client.post(url, {'apikey': apikey.hash()}) - self.assertContains(r, "Too long since last regular login", status_code=400) - secretariat.user.last_login = timezone.now() - secretariat.user.save() + self.assertContains(r, "Restricted to role: Robot", status_code=403) r = self.client.post(url, {'apikey': apikey.hash()}) self.assertContains(r, "No filters provided", status_code=400) # working case - r = self.client.post(url, {'apikey': apikey.hash(), 'email': secretariat.email().address, '_expand': 'user'}) + r = self.client.post(url, {'apikey': apikey.hash(), 'email': robot.email().address, '_expand': 'user'}) self.assertEqual(r.status_code, 200) jsondata = r.json() - data = jsondata['person.person'][str(secretariat.id)] - self.assertEqual(data['name'], secretariat.name) - self.assertEqual(data['ascii'], secretariat.ascii) - self.assertEqual(data['user']['email'], secretariat.user.email) - + data = jsondata['person.person'][str(robot.id)] + self.assertEqual(data['name'], robot.name) + self.assertEqual(data['ascii'], robot.ascii) + self.assertEqual(data['user']['email'], robot.user.email) def test_api_new_meeting_registration(self): meeting = MeetingFactory(type_id='ietf') diff --git a/ietf/api/views.py b/ietf/api/views.py index 2bfdb75e2..bdc549709 100644 --- a/ietf/api/views.py +++ b/ietf/api/views.py @@ -91,7 +91,7 @@ class PersonalInformationExportView(DetailView, JsonExportMixin): return self.json_view(request, filter={'id':person.id}, expand=expand) -@method_decorator((csrf_exempt, require_api_key, role_required('Secretariat')), name='dispatch') +@method_decorator((csrf_exempt, require_api_key, role_required('Robot')), name='dispatch') class ApiV2PersonExportView(DetailView, JsonExportMixin): model = Person @@ -214,4 +214,4 @@ def version(request): }), content_type='application/json', ) - \ No newline at end of file + diff --git a/ietf/ietfauth/tests.py b/ietf/ietfauth/tests.py index 11363f1ba..4a7631ba6 100644 --- a/ietf/ietfauth/tests.py +++ b/ietf/ietfauth/tests.py @@ -531,7 +531,7 @@ class IetfAuthTests(TestCase): def test_apikey_management(self): # Create a person with a role that will give at least one valid apikey - person = RoleFactory(name_id='secr', group__acronym='secretariat').person + person = RoleFactory(name_id='robot', group__acronym='secretariat').person url = urlreverse('ietf.ietfauth.views.apikey_index') diff --git a/ietf/person/models.py b/ietf/person/models.py index 1f1569d56..cd25f4d0e 100644 --- a/ietf/person/models.py +++ b/ietf/person/models.py @@ -348,7 +348,6 @@ def salt(): # Manual maintenance: List all endpoints that use @require_api_key here PERSON_API_KEY_VALUES = [ ("/api/iesg/position", "/api/iesg/position", "Area Director"), - ("/api/v2/person/person", "/api/v2/person/person", "Secretariat"), ("/api/v2/person/person", "/api/v2/person/person", "Robot"), ("/api/meeting/session/video/url", "/api/meeting/session/video/url", "Recording Manager"), ("/api/notify/meeting/registration", "/api/notify/meeting/registration", "Robot"),