|
13 | 13 | from rest_framework.permissions import IsAuthenticated |
14 | 14 | from rest_framework.response import Response |
15 | 15 | from rest_framework.viewsets import GenericViewSet |
| 16 | +from rest_framework.authtoken.models import Token |
16 | 17 |
|
17 | 18 | from api import authentication, models, permissions, serializers, viewsets |
18 | 19 |
|
@@ -51,6 +52,39 @@ def passwd(self, request, **kwargs): |
51 | 52 | return Response({'status': 'password set'}) |
52 | 53 |
|
53 | 54 |
|
| 55 | +class TokenManagementViewSet(GenericViewSet, |
| 56 | + mixins.DestroyModelMixin): |
| 57 | + serializer_class = serializers.UserSerializer |
| 58 | + permission_classes = [permissions.CanRegenerateToken] |
| 59 | + |
| 60 | + def get_queryset(self): |
| 61 | + return User.objects.filter(pk=self.request.user.pk) |
| 62 | + |
| 63 | + def get_object(self): |
| 64 | + return self.get_queryset()[0] |
| 65 | + |
| 66 | + def regenerate(self, request, **kwargs): |
| 67 | + obj = self.get_object() |
| 68 | + |
| 69 | + if 'all' in request.data: |
| 70 | + for user in User.objects.all(): |
| 71 | + if not user.is_anonymous(): |
| 72 | + token = Token.objects.get(user=user) |
| 73 | + token.delete() |
| 74 | + Token.objects.create(user=user) |
| 75 | + return Response("") |
| 76 | + |
| 77 | + if 'username' in request.data: |
| 78 | + obj = get_object_or_404(User, |
| 79 | + username=request.data['username']) |
| 80 | + self.check_object_permissions(self.request, obj) |
| 81 | + |
| 82 | + token = Token.objects.get(user=obj) |
| 83 | + token.delete() |
| 84 | + token = Token.objects.create(user=obj) |
| 85 | + return Response({'token': token.key}) |
| 86 | + |
| 87 | + |
54 | 88 | class BaseDeisViewSet(viewsets.OwnerViewSet): |
55 | 89 | """ |
56 | 90 | A generic ViewSet for objects related to Deis. |
|
0 commit comments