-
Notifications
You must be signed in to change notification settings - Fork 29
v2 API: add endpoint to activate and deactivate users #1007
Changes from 2 commits
1175b15
1010cbe
d3c1df4
9f03fc5
da38239
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,20 +3,28 @@ | |
| from django.db.models import Q, QuerySet | ||
| from drf_spectacular.utils import extend_schema | ||
| from rest_framework import mixins, viewsets | ||
| from rest_framework.exceptions import NotFound | ||
| from rest_framework.exceptions import NotFound, PermissionDenied | ||
| from rest_framework.permissions import IsAuthenticated | ||
| from rest_framework.request import Request | ||
| from rest_framework.response import Response | ||
|
|
||
| from api.public.v2.schema import owner_parameters, service_parameter | ||
| from api.public.v2.schema import ( | ||
| owner_parameters, | ||
| service_parameter, | ||
| ) | ||
| from api.shared.owner.mixins import ( | ||
| OwnerViewSetMixin, | ||
| UserSessionViewSetMixin, | ||
| UserViewSetMixin, | ||
| ) | ||
| from codecov_auth.models import Owner, Service | ||
|
|
||
| from .serializers import OwnerSerializer, UserSerializer, UserSessionSerializer | ||
| from .serializers import ( | ||
| OwnerSerializer, | ||
| UserSerializer, | ||
| UserSessionSerializer, | ||
| UserUpdateActivationSerializer, | ||
| ) | ||
|
|
||
|
|
||
| @extend_schema(parameters=owner_parameters, tags=["Users"]) | ||
|
|
@@ -53,6 +61,34 @@ def retrieve(self, request: Request, *args: Any, **kwargs: Any) -> Owner: | |
| """ | ||
| return super().retrieve(request, *args, **kwargs) | ||
|
|
||
| @extend_schema(summary="Update a user", request=UserUpdateActivationSerializer) | ||
| def partial_update(self, request: Request, *args: Any, **kwargs: Any) -> Response: | ||
| """ | ||
| Updates a user for the specified owner_username or ownerid | ||
|
|
||
| Allowed fields | ||
| - activated: boolean value to activate or deactivate the use | ||
| """ | ||
| instance = self.get_object() | ||
| serializer = UserUpdateActivationSerializer( | ||
| instance, | ||
| data=request.data, | ||
| ) | ||
| serializer.is_valid(raise_exception=True) | ||
|
|
||
| if serializer.validated_data["activated"]: | ||
| if self.owner.can_activate_user(instance): | ||
| print("can activate") | ||
|
||
| self.owner.activate_user(instance) | ||
| else: | ||
| raise PermissionDenied( | ||
| f"Cannot activate user {self.owner.username} -- not enough seats left." | ||
|
||
| ) | ||
| else: | ||
| self.owner.deactivate_user(instance) | ||
|
|
||
| return super().retrieve(request, *args, **kwargs) | ||
|
|
||
|
|
||
| @extend_schema(parameters=owner_parameters, tags=["Users"]) | ||
| class UserSessionViewSet(UserSessionViewSetMixin, mixins.ListModelMixin): | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: typo "deactivate the user"