Skip to content

Commit b42c261

Browse files
committed
feat(users): add users status api
1 parent a98ca5b commit b42c261

3 files changed

Lines changed: 43 additions & 4 deletions

File tree

rootfs/api/tests/test_users.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,24 @@ def test_super_user_can_list(self):
1818
self.assertEqual(response.status_code, 200, response.data)
1919
self.assertEqual(len(response.data['results']), 4)
2020

21+
def test_enable(self):
22+
user = User.objects.get(username='autotest')
23+
token = Token.objects.get(user=user)
24+
response = self.client.patch("/v2/users/autotest2/enable/",
25+
HTTP_AUTHORIZATION='token {}'.format(token))
26+
self.assertEqual(response.status_code, 204)
27+
user = User.objects.get(username='autotest2')
28+
self.assertEqual(user.is_active, True)
29+
30+
def test_disable(self):
31+
user = User.objects.get(username='autotest')
32+
token = Token.objects.get(user=user)
33+
response = self.client.patch("/v2/users/autotest2/disable/",
34+
HTTP_AUTHORIZATION='token {}'.format(token))
35+
self.assertEqual(response.status_code, 204)
36+
user = User.objects.get(username='autotest2')
37+
self.assertEqual(user.is_active, False)
38+
2139
def test_non_super_user_cannot_list(self):
2240
user = User.objects.get(username='autotest2')
2341
token = Token.objects.get(user=user)

rootfs/api/urls.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@
142142
})),
143143
url(r'^certs/?$',
144144
views.CertificateViewSet.as_view({'get': 'list', 'post': 'create'})),
145-
# list users
146-
url(r'^users/?$', views.UserView.as_view({'get': 'list'})),
145+
# users
146+
url(r'^users/?$',
147+
views.UserView.as_view({'get': 'list'})),
148+
url(r'^users/(?P<username>[\w.@+-]+)/enable/?$',
149+
views.UserView.as_view({'patch': 'enable'})),
150+
url(r'^users/(?P<username>[\w.@+-]+)/disable/?$',
151+
views.UserView.as_view({'patch': 'disable'})),
147152
]

rootfs/api/views.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -824,13 +824,13 @@ def get_queryset(self, **kwargs):
824824
return self.model.objects.filter(is_active=True, is_superuser=True)
825825

826826
def create(self, request, **kwargs):
827-
user = get_object_or_404(User, username=request.data['username'])
827+
user = get_object_or_404(self.model, username=request.data['username'])
828828
user.is_superuser = user.is_staff = True
829829
user.save(update_fields=['is_superuser', 'is_staff'])
830830
return Response(status=status.HTTP_201_CREATED)
831831

832832
def destroy(self, request, **kwargs):
833-
user = get_object_or_404(User, username=kwargs['username'])
833+
user = get_object_or_404(self.model, username=kwargs['username'])
834834
user.is_superuser = user.is_staff = False
835835
user.save(update_fields=['is_superuser', 'is_staff'])
836836
return Response(status=status.HTTP_204_NO_CONTENT)
@@ -844,3 +844,19 @@ class UserView(BaseDryccViewSet):
844844

845845
def get_queryset(self):
846846
return self.model.objects.exclude(username='AnonymousUser')
847+
848+
def enable(self, request, **kwargs):
849+
if request.user.username == kwargs['username']:
850+
return Response(status=status.HTTP_423_LOCKED)
851+
user = get_object_or_404(self.model, username=kwargs['username'])
852+
user.is_active = True
853+
user.save(update_fields=['is_active', ])
854+
return Response(status=status.HTTP_204_NO_CONTENT)
855+
856+
def disable(self, request, **kwargs):
857+
if request.user.username == kwargs['username']:
858+
return Response(status=status.HTTP_423_LOCKED)
859+
user = get_object_or_404(self.model, username=kwargs['username'])
860+
user.is_active = False
861+
user.save(update_fields=['is_active', ])
862+
return Response(status=status.HTTP_204_NO_CONTENT)

0 commit comments

Comments
 (0)