From 24fb8b2a8967111872297c96dd35cc0421a0b87f Mon Sep 17 00:00:00 2001 From: xinwen Date: Thu, 4 Mar 2021 18:17:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=A1=E7=90=86=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E6=B7=BB=E5=8A=A0=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E4=B8=8E=E7=A7=98=E9=92=A5=E6=8C=87=E7=BA=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/admin_user.py | 4 ++++ apps/assets/models/base.py | 15 +++++++++++++++ apps/assets/serializers/admin_user.py | 8 +++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/apps/assets/api/admin_user.py b/apps/assets/api/admin_user.py index bdbae55dd..5ad648635 100644 --- a/apps/assets/api/admin_user.py +++ b/apps/assets/api/admin_user.py @@ -33,6 +33,10 @@ class AdminUserViewSet(OrgBulkModelViewSet): search_fields = filterset_fields serializer_class = serializers.AdminUserSerializer permission_classes = (IsOrgAdmin,) + serializer_classes = { + 'default': serializers.AdminUserSerializer, + 'retrieve': serializers.AdminUserDetailSerializer, + } def get_queryset(self): queryset = super().get_queryset() diff --git a/apps/assets/models/base.py b/apps/assets/models/base.py index 9fd4836f7..404c7a991 100644 --- a/apps/assets/models/base.py +++ b/apps/assets/models/base.py @@ -11,10 +11,12 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.conf import settings +from common.db.models import ChoiceSet from common.utils import random_string from common.utils import ( ssh_key_string_to_obj, ssh_key_gen, get_logger, lazyproperty ) +from common.utils.encode import ssh_pubkey_gen from common.validators import alphanumeric from common import fields from orgs.mixins.models import OrgModelMixin @@ -106,6 +108,19 @@ class AuthMixin: username = '' _prefer = 'system_user' + @property + def ssh_key_fingerprint(self): + if self.public_key: + public_key = self.public_key + elif self.private_key: + public_key = ssh_pubkey_gen(self.private_key, self.password) + else: + return '' + + public_key_obj = sshpubkeys.SSHKey(public_key) + fingerprint = public_key_obj.hash_md5() + return fingerprint + @property def private_key_obj(self): if self.private_key: diff --git a/apps/assets/serializers/admin_user.py b/apps/assets/serializers/admin_user.py index b8b086205..21eca51d0 100644 --- a/apps/assets/serializers/admin_user.py +++ b/apps/assets/serializers/admin_user.py @@ -3,8 +3,6 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework import serializers -from common.drf.serializers import AdaptedBulkListSerializer - from ..models import Node, AdminUser from orgs.mixins.serializers import BulkOrgResourceModelSerializer @@ -17,7 +15,6 @@ class AdminUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): """ class Meta: - list_serializer_class = AdaptedBulkListSerializer model = AdminUser fields = [ 'id', 'name', 'username', 'password', 'private_key', 'public_key', @@ -33,6 +30,11 @@ class AdminUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): } +class AdminUserDetailSerializer(AdminUserSerializer): + class Meta(AdminUserSerializer.Meta): + fields = AdminUserSerializer.Meta.fields + ['ssh_key_fingerprint'] + + class AdminUserAuthSerializer(AuthSerializer): class Meta: