From ed95a89a77004c0d97276043d42d8512da6f0fe6 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Tue, 18 Mar 2025 11:26:46 +0800 Subject: [PATCH] fix: Create ssh_key set is_active error --- apps/authentication/serializers/ssh_key.py | 4 ++-- apps/users/models/user/_auth.py | 8 +++++--- apps/users/views/profile/pubkey.py | 11 +++++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/apps/authentication/serializers/ssh_key.py b/apps/authentication/serializers/ssh_key.py index 388607903..71bfefe97 100644 --- a/apps/authentication/serializers/ssh_key.py +++ b/apps/authentication/serializers/ssh_key.py @@ -5,10 +5,9 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from common.serializers.fields import ReadableHiddenField, LabeledChoiceField - -from ..models import SSHKey from common.utils import validate_ssh_public_key from users.exceptions import CreateSSHKeyExceedLimit +from ..models import SSHKey __all__ = ['SSHKeySerializer', 'GenerateKeyType'] @@ -21,6 +20,7 @@ class GenerateKeyType(TextChoices): class SSHKeySerializer(serializers.ModelSerializer): user = ReadableHiddenField(default=serializers.CurrentUserDefault()) + is_active = serializers.BooleanField(default=True, label=_('Active')) public_key_comment = serializers.CharField( source='get_public_key_comment', required=False, read_only=True, max_length=128 ) diff --git a/apps/users/models/user/_auth.py b/apps/users/models/user/_auth.py index a3f8ef234..c5d15a90f 100644 --- a/apps/users/models/user/_auth.py +++ b/apps/users/models/user/_auth.py @@ -18,7 +18,6 @@ from common.utils import ( lazyproperty, ) from users.signals import post_user_change_password -from users.exceptions import CreateSSHKeyExceedLimit logger = get_logger(__file__) @@ -134,10 +133,13 @@ class AuthMixin: post_user_change_password.send(self.__class__, user=self) super().set_password(raw_password) # noqa - def set_ssh_key(self, name, public_key, private_key): + def set_ssh_key(self, public_key, private_key, **kwargs): if self.can_update_ssh_key(): from authentication.models import SSHKey - SSHKey.objects.create(name=name, public_key=public_key, private_key=private_key, user=self) + SSHKey.objects.create( + public_key=public_key, private_key=private_key, user=self, name=kwargs.get('name'), + comment=kwargs.get('comment'), is_active=kwargs.get('is_active') + ) post_user_change_password.send(self.__class__, user=self) def can_create_ssh_key(self): diff --git a/apps/users/views/profile/pubkey.py b/apps/users/views/profile/pubkey.py index 495b1c530..1a1ee9389 100644 --- a/apps/users/views/profile/pubkey.py +++ b/apps/users/views/profile/pubkey.py @@ -1,10 +1,11 @@ # ~*~ coding: utf-8 ~*~ -from django.http import HttpResponse +from django.http import HttpResponse, JsonResponse from django.views import View -from common.utils import get_logger, ssh_key_gen +from authentication.serializers import SSHKeySerializer from common.permissions import IsValidUser +from common.utils import get_logger, ssh_key_gen from common.views.mixins import PermissionsMixin from users.exceptions import CreateSSHKeyExceedLimit @@ -18,13 +19,15 @@ class UserPublicKeyGenerateView(PermissionsMixin, View): def get(self, request, *args, **kwargs): username = request.user.username - key_name = request.GET.get('name', '') + serializer = SSHKeySerializer(data=request.GET, context={'request': request}) + if not serializer.is_valid(): + return JsonResponse(serializer.errors, status=400) if not request.user.can_create_ssh_key(): return HttpResponse( CreateSSHKeyExceedLimit().default_detail, status=400 ) private, public = ssh_key_gen(username=username, hostname='jumpserver') - request.user.set_ssh_key(key_name, public, private) + request.user.set_ssh_key(public, private, **serializer.validated_data) response = HttpResponse(private, content_type='text/plain') filename = "{0}-jumpserver.pem".format(username) response['Content-Disposition'] = 'attachment; filename={}'.format(filename)