mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.4 KiB
80 lines
2.4 KiB
# ~*~ coding: utf-8 ~*~ |
|
import uuid |
|
|
|
from rest_framework import generics |
|
from rest_framework.permissions import IsAuthenticated |
|
|
|
from authentication.models import ConnectionToken |
|
from authentication.permissions import IsValidUserOrConnectionToken |
|
from common.utils import get_object_or_none |
|
from orgs.utils import tmp_to_root_org |
|
from users.notifications import ( |
|
ResetPasswordMsg, ResetPasswordSuccessMsg, ResetSSHKeyMsg, |
|
ResetPublicKeySuccessMsg, |
|
) |
|
from .mixins import UserQuerysetMixin |
|
from .. import serializers |
|
from ..models import User |
|
|
|
__all__ = [ |
|
'UserResetPasswordApi', 'UserResetPKApi', |
|
'UserProfileApi', 'UserPasswordApi' |
|
] |
|
|
|
|
|
class UserResetPasswordApi(UserQuerysetMixin, generics.UpdateAPIView): |
|
queryset = User.objects.all() |
|
serializer_class = serializers.UserSerializer |
|
|
|
def perform_update(self, serializer): |
|
# Note: we are not updating the user object here. |
|
# We just do the reset-password stuff. |
|
user = self.get_object() |
|
user.password_raw = str(uuid.uuid4()) |
|
user.save() |
|
ResetPasswordMsg(user).publish_async() |
|
|
|
|
|
class UserResetPKApi(UserQuerysetMixin, generics.UpdateAPIView): |
|
serializer_class = serializers.UserSerializer |
|
|
|
def perform_update(self, serializer): |
|
user = self.get_object() |
|
user.public_key = None |
|
user.save() |
|
ResetSSHKeyMsg(user).publish_async() |
|
|
|
|
|
class UserProfileApi(generics.RetrieveUpdateAPIView): |
|
permission_classes = (IsValidUserOrConnectionToken,) |
|
serializer_class = serializers.UserProfileSerializer |
|
|
|
def get_object(self): |
|
if self.request.user.is_anonymous: |
|
user = self.get_connection_token_user() |
|
if user: |
|
return user |
|
return self.request.user |
|
|
|
def get_connection_token_user(self): |
|
token_id = self.request.query_params.get('token') |
|
if not token_id: |
|
return |
|
with tmp_to_root_org(): |
|
token = get_object_or_none(ConnectionToken, id=token_id) |
|
if not token: |
|
return |
|
return token.user |
|
|
|
|
|
class UserPasswordApi(generics.RetrieveUpdateAPIView): |
|
permission_classes = (IsAuthenticated,) |
|
serializer_class = serializers.UserUpdatePasswordSerializer |
|
|
|
def get_object(self): |
|
return self.request.user |
|
|
|
def update(self, request, *args, **kwargs): |
|
resp = super().update(request, *args, **kwargs) |
|
ResetPasswordSuccessMsg(self.request.user, request).publish_async() |
|
return resp
|
|
|