From eedd48d455753b7aaad365f4aa08f0638227c54c Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Wed, 15 Apr 2020 17:19:54 +0000 Subject: [PATCH] Simplified the URL and view code for the personal meetecho access API endpoint, and added test code. - Legacy-Id: 17642 --- ietf/api/tests.py | 19 +++++++++++++++++++ ietf/api/urls.py | 2 +- ietf/api/views.py | 15 +++++---------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/ietf/api/tests.py b/ietf/api/tests.py index 5987c033c..6066f6300 100644 --- a/ietf/api/tests.py +++ b/ietf/api/tests.py @@ -179,6 +179,25 @@ class CustomApiTestCase(TestCase): self.assertEqual(data['user']['email'], secretariat.user.email) + def test_api_v2_person_access_meetecho(self): + url = urlreverse('ietf.api.views.person_access_meetecho') + person = PersonFactory() + apikey = PersonalApiKey.objects.create(endpoint=url, person=person) + + # error cases + r = self.client.get(url, {'apikey': apikey.hash()}) + self.assertContains(r, "Too long since last regular login", status_code=400) + person.user.last_login = timezone.now() + person.user.save() + + # working case + r = self.client.get(url, {'apikey': apikey.hash()}) + self.assertEqual(r.status_code, 200) + data = r.json() + self.assertEqual(data['name'], person.name) + self.assertEqual(data['email'], person.email().address) + + class TastypieApiTestCase(ResourceTestCaseMixin, TestCase): def __init__(self, *args, **kwargs): self.apps = {} diff --git a/ietf/api/urls.py b/ietf/api/urls.py index b748274f2..7a9274b8b 100644 --- a/ietf/api/urls.py +++ b/ietf/api/urls.py @@ -25,7 +25,7 @@ urlpatterns = [ # For mailarchive use, requires secretariat role url(r'^v2/person/person', api_views.ApiV2PersonExportView.as_view()), # For meetecho access - url(r'^v2/person/access/meetecho', api_views.PersonAccessMeetechoView.as_view()), + url(r'^person/access/meetecho', api_views.person_access_meetecho), ] # Additional (standard) Tastypie endpoints diff --git a/ietf/api/views.py b/ietf/api/views.py index d03e82552..e84a0971e 100644 --- a/ietf/api/views.py +++ b/ietf/api/views.py @@ -95,13 +95,8 @@ class ApiV2PersonExportView(DetailView, JsonExportMixin): return self.json_view(request, filter=querydict.dict(), expand=expand) -@method_decorator((csrf_exempt, require_api_key), name='dispatch') -class PersonAccessMeetechoView(DetailView, JsonExportMixin): - model = Person - - def err(self, code, text): - return HttpResponse(text, status=code, content_type='text/plain') - - def get(self, request): - person = get_object_or_404(self.model, user=request.user) - return HttpResponse(json.dumps({ 'name' : person.name, 'email': person.email().address, }), content_type='application/json') +@require_api_key +@csrf_exempt +def person_access_meetecho(request): + person = get_object_or_404(Person, user=request.user) + return HttpResponse(json.dumps({ 'name' : person.name, 'email': person.email().address, }), content_type='application/json')