Skip to content

Commit f34cea8

Browse files
committed
feat(token): add get token api
1 parent 6ad275b commit f34cea8

4 files changed

Lines changed: 28 additions & 1 deletion

File tree

rootfs/api/tests/test_auth.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,20 @@ def test_regenerate(self):
374374
response = self.client.post(url, {})
375375
self.assertEqual(response.status_code, 401, response.data)
376376

377+
def test_key(self):
378+
url = '/v2/auth/tokens/autotest2/'
379+
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.admin_token)
380+
response = self.client.get(url)
381+
self.assertEqual(response.status_code, 200, response.data)
382+
383+
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.user1_token)
384+
response = self.client.get(url)
385+
self.assertEqual(response.status_code, 200, response.data)
386+
387+
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.user2_token)
388+
response = self.client.get(url)
389+
self.assertEqual(response.status_code, 403, response.data)
390+
377391
@mock.patch('django_auth_ldap.backend.logger')
378392
def test_auth_no_ldap_by_default(self, mock_logger):
379393
"""Ensure that LDAP authentication is disabled by default."""

rootfs/api/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@
131131
views_obtain_auth_token),
132132
url(r'^auth/tokens/$',
133133
views.TokenManagementViewSet.as_view({'post': 'regenerate'})),
134+
url(r'^auth/tokens/(?P<username>[\w.@+-]+)/?$',
135+
views.TokenManagementViewSet.as_view({'get': 'token'})),
134136
# admin sharing
135137
url(r'^admin/perms/(?P<username>[\w.@+-]+)/?$',
136138
views.AdminPermsViewSet.as_view({'delete': 'destroy'})),

rootfs/api/views.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ def list(self, request, **kwargs):
8080
return Response(serializer.data)
8181

8282
def destroy(self, request, **kwargs):
83+
if settings.LDAP_ENDPOINT:
84+
raise DryccException("You cannot destroy user when ldap is enabled.")
8385
calling_obj = self.get_object()
8486
target_obj = calling_obj
8587

@@ -104,6 +106,8 @@ def destroy(self, request, **kwargs):
104106
def passwd(self, request, **kwargs):
105107
if not request.data.get('new_password'):
106108
raise DryccException("new_password is a required field")
109+
if settings.LDAP_ENDPOINT:
110+
raise DryccException("You cannot change password when ldap is enabled.")
107111

108112
caller_obj = self.get_object()
109113
target_obj = self.get_object()
@@ -157,6 +161,14 @@ def regenerate(self, request, **kwargs):
157161
token = Token.objects.create(user=obj)
158162
return Response({'token': token.key})
159163

164+
def token(self, request, **kwargs):
165+
if self.request.user.username == kwargs['username'] \
166+
or self.request.user.is_superuser:
167+
obj = get_object_or_404(User, username=kwargs['username'])
168+
token = Token.objects.get(user=obj)
169+
return Response({'token': token.key})
170+
return Response(status=status.HTTP_403_FORBIDDEN)
171+
160172

161173
class BaseDryccViewSet(viewsets.OwnerViewSet):
162174
"""

rootfs/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ packaging==20.4
1717
pyasn1==0.4.8
1818
pynsq==0.9.0
1919
psycopg2-binary==2.8.5
20-
pyldap==3.0.0.post1
2120
pyOpenSSL==19.1.0
2221
pytz==2020.1
2322
requests==2.24.0

0 commit comments

Comments
 (0)