Skip to content

Commit ecfcea6

Browse files
author
Matthew Fisher
authored
feat(api): added auth/whoami endpoint (#737)
1 parent 3dfc8f0 commit ecfcea6

3 files changed

Lines changed: 28 additions & 1 deletion

File tree

rootfs/api/tests/test_auth.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def setUp(self):
2525

2626
def test_auth(self):
2727
"""
28-
Test that a user can register using the API, login and logout
28+
Test that a user can register using the API, login, whoami and logout
2929
"""
3030
# test registration workflow
3131
username, password = 'newuser', 'password'
@@ -63,6 +63,26 @@ def test_auth(self):
6363
response = self.client.login(username=username, password=password)
6464
self.assertEqual(response, True)
6565

66+
user = User.objects.get(username=username)
67+
token = Token.objects.get(user=user).key
68+
url = '/v2/auth/whoami'
69+
response = self.client.get(url, HTTP_AUTHORIZATION='token {}'.format(token))
70+
self.assertEqual(response.status_code, 200)
71+
for key in response.data:
72+
self.assertIn(key, ['id', 'last_login', 'is_superuser', 'username', 'first_name',
73+
'last_name', 'email', 'is_active', 'is_superuser', 'is_staff',
74+
'date_joined', 'groups', 'user_permissions'])
75+
expected = {
76+
'username': username,
77+
'email': email,
78+
'first_name': first_name,
79+
'last_name': last_name,
80+
'is_active': True,
81+
'is_superuser': False,
82+
'is_staff': False
83+
}
84+
self.assertDictContainsSubset(expected, response.data)
85+
6686
@override_settings(REGISTRATION_MODE="disabled")
6787
def test_auth_registration_disabled(self):
6888
"""test that a new user cannot register when registration is disabled."""

rootfs/api/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
views.UserManagementViewSet.as_view({'delete': 'destroy'})),
9393
url(r'^auth/passwd/?',
9494
views.UserManagementViewSet.as_view({'post': 'passwd'})),
95+
url(r'^auth/whoami/?',
96+
views.UserManagementViewSet.as_view({'get': 'list'})),
9597
url(r'^auth/login/',
9698
views_obtain_auth_token),
9799
url(r'^auth/tokens/',

rootfs/api/views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ def get_queryset(self):
6868
def get_object(self):
6969
return self.get_queryset()[0]
7070

71+
def list(self, request, **kwargs):
72+
user = self.get_object()
73+
serializer = self.get_serializer(user, many=False)
74+
return Response(serializer.data)
75+
7176
def destroy(self, request, **kwargs):
7277
calling_obj = self.get_object()
7378
target_obj = calling_obj

0 commit comments

Comments
 (0)