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: