* dev: remove default user * dev: initiate licensing * dev: remove migration file 0046 * feat: self hosted licensing initialize * dev: instance licenses * dev: change license response structure * dev: add default properties and issue mention migration * dev: reset migrations * dev: instance configuration * dev: instance configuration migration * dev: update instance configuration model to take null and empty values * dev: instance configuration variables * dev: set default values * dev: update instance configuration load * dev: email configuration settings moved to database * dev: instance configuration on instance bootup * dev: auto instance registration script * dev: instance admin * dev: enable instance configuration and instance admin roles * dev: instance owner fix * dev: instance configuration values * dev: fix instance permissions and serializer * dev: fix email senders * dev: remove deprecated variables * dev: fix current site domain registration * dev: update cors setup and local settings * dev: migrate instance registration and configuration to manage commands * dev: check email validity * dev: update script to use manage command * dev: default bucket creation script * dev: instance admin routes and initial set of screens * dev: admin api to check if the current user is admin * dev: instance admin unique constraints * dev: check magic link login * dev: fix email sending for ssl * dev: create instance activation route if the instance is not activated during startup * dev: removed DJANGO_SETTINGS_MODULE from environment files and deleted auto bucket create script * dev: environment configuration for backend * dev: fix access token variable error * feat: Instance Admin Panel: General Settings (#2792) --------- Co-authored-by: pablohashescobar <nikhilschacko@gmail.com> Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
91 lines
3 KiB
Python
91 lines
3 KiB
Python
# Third party imports
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
|
|
from sentry_sdk import capture_exception
|
|
|
|
# Module imports
|
|
from plane.api.serializers import (
|
|
UserSerializer,
|
|
IssueActivitySerializer,
|
|
UserMeSerializer,
|
|
UserMeSettingsSerializer,
|
|
)
|
|
|
|
from plane.api.views.base import BaseViewSet, BaseAPIView
|
|
from plane.db.models import User, IssueActivity, WorkspaceMember
|
|
from plane.license.models import Instance, InstanceAdmin
|
|
from plane.utils.paginator import BasePaginator
|
|
|
|
|
|
class UserEndpoint(BaseViewSet):
|
|
serializer_class = UserSerializer
|
|
model = User
|
|
|
|
def get_object(self):
|
|
return self.request.user
|
|
|
|
def retrieve(self, request):
|
|
serialized_data = UserMeSerializer(request.user).data
|
|
return Response(
|
|
serialized_data,
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
|
|
def retrieve_user_settings(self, request):
|
|
serialized_data = UserMeSettingsSerializer(request.user).data
|
|
return Response(serialized_data, status=status.HTTP_200_OK)
|
|
|
|
def retrieve_instance_admin(self, request):
|
|
instance = Instance.objects.first()
|
|
is_admin = InstanceAdmin.objects.filter(
|
|
instance=instance, user=request.user
|
|
).exists()
|
|
return Response({"is_instance_admin": is_admin}, status=status.HTTP_200_OK)
|
|
|
|
def deactivate(self, request):
|
|
# Check all workspace user is active
|
|
user = self.get_object()
|
|
if WorkspaceMember.objects.filter(member=request.user, is_active=True).exists():
|
|
return Response(
|
|
{
|
|
"error": "User cannot deactivate account as user is active in some workspaces"
|
|
},
|
|
status=status.HTTP_400_BAD_REQUEST,
|
|
)
|
|
|
|
# Deactivate the user
|
|
user.is_active = False
|
|
user.save()
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
|
|
class UpdateUserOnBoardedEndpoint(BaseAPIView):
|
|
def patch(self, request):
|
|
user = User.objects.get(pk=request.user.id, is_active=True)
|
|
user.is_onboarded = request.data.get("is_onboarded", False)
|
|
user.save()
|
|
return Response({"message": "Updated successfully"}, status=status.HTTP_200_OK)
|
|
|
|
|
|
class UpdateUserTourCompletedEndpoint(BaseAPIView):
|
|
def patch(self, request):
|
|
user = User.objects.get(pk=request.user.id, is_active=True)
|
|
user.is_tour_completed = request.data.get("is_tour_completed", False)
|
|
user.save()
|
|
return Response({"message": "Updated successfully"}, status=status.HTTP_200_OK)
|
|
|
|
|
|
class UserActivityEndpoint(BaseAPIView, BasePaginator):
|
|
def get(self, request, slug):
|
|
queryset = IssueActivity.objects.filter(
|
|
actor=request.user, workspace__slug=slug
|
|
).select_related("actor", "workspace", "issue", "project")
|
|
|
|
return self.paginate(
|
|
request=request,
|
|
queryset=queryset,
|
|
on_results=lambda issue_activities: IssueActivitySerializer(
|
|
issue_activities, many=True
|
|
).data,
|
|
)
|