[Update] 添加用户profile public-key序列类

pull/4049/head
Bai 2020-05-28 17:47:18 +08:00
parent 3e5d949610
commit 3b8a24eeb7
2 changed files with 42 additions and 13 deletions

View File

@ -47,6 +47,10 @@ class AuthMixin:
post_user_change_password.send(self.__class__, user=self)
super().set_password(raw_password)
def set_public_key(self, public_key):
self.public_key = public_key
self.save()
def can_update_password(self):
return self.is_local
@ -79,6 +83,14 @@ class AuthMixin:
pass
return PubKey()
def get_public_key_comment(self):
return self.public_key_obj.comment
def get_public_key_hash_md5(self):
if not callable(self.public_key_obj.hash_md5):
return ''
return self.public_key_obj.hash_md5()
def reset_password(self, new_password):
self.set_password(new_password)
self.save()

View File

@ -193,8 +193,12 @@ class UserRoleSerializer(serializers.Serializer):
class UserProfileSerializer(UserSerializer):
admin_or_audit_orgs = UserOrgSerializer(many=True, read_only=True)
current_org_roles = serializers.ListField(read_only=True)
public_key_comment = serializers.SerializerMethodField()
public_key_hash_md5 = serializers.SerializerMethodField()
public_key_comment = serializers.CharField(
source='get_public_key_comment', required=False, read_only=True, max_length=128
)
public_key_hash_md5 = serializers.CharField(
source='get_public_key_hash_md5', required=False, read_only=True, max_length=128
)
class Meta(UserSerializer.Meta):
fields = UserSerializer.Meta.fields + [
@ -226,16 +230,6 @@ class UserProfileSerializer(UserSerializer):
fields.remove('public_key')
extra_kwargs.pop('public_key', None)
@staticmethod
def get_public_key_comment(obj):
return obj.public_key_obj.comment
@staticmethod
def get_public_key_hash_md5(obj):
if callable(obj.public_key_obj.hash_md5):
return obj.public_key_obj.hash_md5()
return ''
class UserUpdatePasswordSerializer(serializers.ModelSerializer):
old_password = serializers.CharField(required=True, max_length=128, write_only=True)
@ -273,4 +267,27 @@ class UserUpdatePasswordSerializer(serializers.ModelSerializer):
class UserUpdatePublicKeySerializer(serializers.ModelSerializer):
pass
public_key_comment = serializers.CharField(
source='get_public_key_comment', required=False, read_only=True, max_length=128
)
public_key_hash_md5 = serializers.CharField(
source='get_public_key_hash_md5', required=False, read_only=True, max_length=128
)
class Meta:
model = User
fields = ['public_key_comment', 'public_key_hash_md5', 'public_key']
extra_kwargs = {
'public_key': {'required': True, 'write_only': True, 'max_length': 2048}
}
@staticmethod
def validate_public_key(value):
if not validate_ssh_public_key(value):
raise serializers.ValidationError(_('Not a valid ssh public key'))
return value
def update(self, instance, validated_data):
new_public_key = self.validated_data.get('public_key')
instance.set_public_key(new_public_key)
return instance