Skip to content

Commit 8e7e0fa

Browse files
committed
Add new custom API endpoint export/person/generic restricted to secretariat use
- Legacy-Id: 15263
1 parent a3db51f commit 8e7e0fa

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

ietf/api/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
url(r'^meeting/session/video/url$', meeting_views.api_set_session_video_url),
2121
url(r'^submit/?$', submit_views.api_submit),
2222
url(r'^iesg/position', views_ballot.api_set_position),
23-
url(r'^export/person/$', api_views.PersonExportView.as_view()),
23+
url(r'^export/person/$', api_views.PersonExportView.as_view()),
24+
url(r'^export/person/generic', api_views.GenericPersonExportView.as_view()),
2425
]
2526

2627
# Additional (standard) Tastypie endpoints

ietf/api/views.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from django.shortcuts import render, get_object_or_404
1212
from django.urls import reverse
1313
from django.utils.decorators import method_decorator
14+
from django.views.decorators.csrf import csrf_exempt
1415
from django.views.decorators.gzip import gzip_page
1516
from django.views.generic.detail import DetailView
1617

@@ -21,9 +22,12 @@
2122

2223
import debug # pyflakes:ignore
2324

24-
from ietf.person.models import Person
25+
from ietf.person.models import Person, Email
2526
from ietf.api import _api_list
2627
from ietf.api.serializer import JsonExportMixin
28+
from ietf.utils.decorators import require_api_key
29+
from ietf.ietfauth.utils import role_required
30+
2731

2832
def top_level(request):
2933
available_resources = {}
@@ -73,3 +77,23 @@ def get(self, request):
7377
'user', 'user__communitylist', ]
7478
return self.json_view(request, filter={'id':person.id}, expand=expand)
7579

80+
81+
@method_decorator((csrf_exempt, require_api_key, role_required('Secretariat')), name='dispatch')
82+
class GenericPersonExportView(DetailView, JsonExportMixin):
83+
model = Person
84+
85+
def err(self, code, text):
86+
return HttpResponse(text, status=code, content_type='text/plain')
87+
88+
def post(self, request):
89+
if 'email' not in request.POST:
90+
return self.err(400, "Missing email parameter")
91+
email_address = request.POST.get('email')
92+
try:
93+
email = Email.objects.get(address=email_address)
94+
except Email.DoesNotExist:
95+
return self.err(404, "Email not found '%s'" % (email_address, ))
96+
person = email.person
97+
expand = ['user']
98+
return self.json_view(request, filter={'id': person.id}, expand=expand)
99+

ietf/person/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ def salt():
293293
# Manual maintenance: List all endpoints that use @require_api_key here
294294
PERSON_API_KEY_ENDPOINTS = [
295295
("/api/iesg/position", "/api/iesg/position"),
296+
("/api/export/person/generic", "/api/export/person/generic"),
296297
("/api/meeting/session/video/url", "/api/meeting/session/video/url"),
297298
]
298299

0 commit comments

Comments
 (0)