Skip to content

Commit eedd48d

Browse files
committed
Simplified the URL and view code for the personal meetecho access API endpoint, and added test code.
- Legacy-Id: 17642
1 parent e01d411 commit eedd48d

3 files changed

Lines changed: 25 additions & 11 deletions

File tree

ietf/api/tests.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,25 @@ def test_api_v2_person_export_view(self):
179179
self.assertEqual(data['user']['email'], secretariat.user.email)
180180

181181

182+
def test_api_v2_person_access_meetecho(self):
183+
url = urlreverse('ietf.api.views.person_access_meetecho')
184+
person = PersonFactory()
185+
apikey = PersonalApiKey.objects.create(endpoint=url, person=person)
186+
187+
# error cases
188+
r = self.client.get(url, {'apikey': apikey.hash()})
189+
self.assertContains(r, "Too long since last regular login", status_code=400)
190+
person.user.last_login = timezone.now()
191+
person.user.save()
192+
193+
# working case
194+
r = self.client.get(url, {'apikey': apikey.hash()})
195+
self.assertEqual(r.status_code, 200)
196+
data = r.json()
197+
self.assertEqual(data['name'], person.name)
198+
self.assertEqual(data['email'], person.email().address)
199+
200+
182201
class TastypieApiTestCase(ResourceTestCaseMixin, TestCase):
183202
def __init__(self, *args, **kwargs):
184203
self.apps = {}

ietf/api/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
# For mailarchive use, requires secretariat role
2626
url(r'^v2/person/person', api_views.ApiV2PersonExportView.as_view()),
2727
# For meetecho access
28-
url(r'^v2/person/access/meetecho', api_views.PersonAccessMeetechoView.as_view()),
28+
url(r'^person/access/meetecho', api_views.person_access_meetecho),
2929
]
3030

3131
# Additional (standard) Tastypie endpoints

ietf/api/views.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,8 @@ def post(self, request):
9595

9696
return self.json_view(request, filter=querydict.dict(), expand=expand)
9797

98-
@method_decorator((csrf_exempt, require_api_key), name='dispatch')
99-
class PersonAccessMeetechoView(DetailView, JsonExportMixin):
100-
model = Person
101-
102-
def err(self, code, text):
103-
return HttpResponse(text, status=code, content_type='text/plain')
104-
105-
def get(self, request):
106-
person = get_object_or_404(self.model, user=request.user)
107-
return HttpResponse(json.dumps({ 'name' : person.name, 'email': person.email().address, }), content_type='application/json')
98+
@require_api_key
99+
@csrf_exempt
100+
def person_access_meetecho(request):
101+
person = get_object_or_404(Person, user=request.user)
102+
return HttpResponse(json.dumps({ 'name' : person.name, 'email': person.email().address, }), content_type='application/json')

0 commit comments

Comments
 (0)