Skip to content

Commit 89d2a0c

Browse files
feat: API to retrieve active email addrs (#7035)
* feat: API to retrieve active email addrs * test: Test active_email_list view * chore: Remove debug statement * fix: Return 405 on non-GET requests
1 parent 65cf001 commit 89d2a0c

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

ietf/api/tests.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
from ietf.meeting.models import Session
3333
from ietf.nomcom.models import Volunteer, NomCom
3434
from ietf.nomcom.factories import NomComFactory, nomcom_kwargs_for_year
35-
from ietf.person.factories import PersonFactory, random_faker
36-
from ietf.person.models import User
35+
from ietf.person.factories import PersonFactory, random_faker, EmailFactory
36+
from ietf.person.models import Email, User
3737
from ietf.person.models import PersonalApiKey
3838
from ietf.stats.models import MeetingRegistration
3939
from ietf.utils.mail import outbox, get_payload_text
@@ -853,6 +853,28 @@ def test_group_aliases(self, mock):
853853
405,
854854
)
855855

856+
@override_settings(APP_API_TOKENS={"ietf.api.views.active_email_list": ["valid-token"]})
857+
def test_active_email_list(self):
858+
EmailFactory(active=True) # make sure there's at least one active email...
859+
EmailFactory(active=False) # ... and at least one non-active emai
860+
url = urlreverse("ietf.api.views.active_email_list")
861+
r = self.client.post(url, headers={})
862+
self.assertEqual(r.status_code, 403)
863+
r = self.client.get(url, headers={})
864+
self.assertEqual(r.status_code, 403)
865+
r = self.client.get(url, headers={"X-Api-Key": "not-the-valid-token"})
866+
self.assertEqual(r.status_code, 403)
867+
r = self.client.post(url, headers={"X-Api-Key": "not-the-valid-token"})
868+
self.assertEqual(r.status_code, 403)
869+
r = self.client.post(url, headers={"X-Api-Key": "valid-token"})
870+
self.assertEqual(r.status_code, 405)
871+
r = self.client.get(url, headers={"X-Api-Key": "valid-token"})
872+
self.assertEqual(r.status_code, 200)
873+
self.assertEqual(r.headers["Content-Type"], "application/json")
874+
result = json.loads(r.content)
875+
self.assertCountEqual(result.keys(), ["addresses"])
876+
self.assertCountEqual(result["addresses"], Email.objects.filter(active=True).values_list("address", flat=True))
877+
856878

857879
class DirectAuthApiTests(TestCase):
858880

ietf/api/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
# OpenID authentication provider
5050
url(r'^openid/$', TemplateView.as_view(template_name='api/openid-issuer.html'), name='ietf.api.urls.oidc_issuer'),
5151
url(r'^openid/', include('oidc_provider.urls', namespace='oidc_provider')),
52+
# Email alias listing
53+
url(r'^person/email/$', api_views.active_email_list),
5254
# Draft submission API
5355
url(r'^submit/?$', submit_views.api_submit),
5456
# Draft upload API

ietf/api/views.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,3 +488,15 @@ def group_aliases(request):
488488
}
489489
)
490490
return HttpResponse(status=405)
491+
492+
493+
@requires_api_token
494+
@csrf_exempt
495+
def active_email_list(request):
496+
if request.method == "GET":
497+
return JsonResponse(
498+
{
499+
"addresses": list(Email.objects.filter(active=True).values_list("address", flat=True)),
500+
}
501+
)
502+
return HttpResponse(status=405)

0 commit comments

Comments
 (0)