feat: 个人设置 (#11494)

Co-authored-by: feng <1304903146@qq.com>
This commit is contained in:
fit2bot
2023-09-11 14:38:07 +08:00
committed by GitHub
parent f9d6de9c39
commit a41909ec8d
19 changed files with 371 additions and 64 deletions

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
#
from .user import *
from .profile import *
from .group import *
from .preference import *
from .profile import *
from .realtion import *
from .user import *

View File

@@ -0,0 +1,3 @@
from .koko import *
from .lina import *
from .luna import *

View File

@@ -0,0 +1,15 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from users.const import FileNameConflictResolution
class BasicSerializer(serializers.Serializer):
file_name_conflict_resolution = serializers.ChoiceField(
FileNameConflictResolution.choices, default=FileNameConflictResolution.REPLACE,
required=False, label=_('File name conflict resolution')
)
class KokoSerializer(serializers.Serializer):
basic = BasicSerializer(required=False, label=_('Basic'))

View File

@@ -0,0 +1,30 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from common.serializers.fields import EncryptedField
class BasicSerializer(serializers.Serializer):
secret_key = EncryptedField(
required=False, max_length=1024,
write_only=True, allow_blank=True, label=_('Secret Key')
)
secret_key_again = EncryptedField(
required=False, max_length=1024,
write_only=True, allow_blank=True, label=_('Secret Key Again')
)
def validate(self, attrs):
secret_key = attrs.pop('secret_key', None)
secret_key_again = attrs.pop('secret_key_again', None)
if (secret_key or secret_key_again) and secret_key != secret_key_again:
msg = _('The newly set password is inconsistent')
raise serializers.ValidationError({'secret_key_again': msg})
elif secret_key and secret_key_again:
attrs['secret_key'] = secret_key
return attrs
class LinaSerializer(serializers.Serializer):
basic = BasicSerializer(required=False, label=_('Basic'))

View File

@@ -0,0 +1,62 @@
import json
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from users.const import RDPResolution, KeyboardLayout, RDPClientOption, RemoteApplicationConnectionMethod
class MultipleChoiceField(serializers.MultipleChoiceField):
def to_representation(self, keys):
if isinstance(keys, str):
keys = json.loads(keys)
return keys
def to_internal_value(self, data):
data = super().to_internal_value(data)
return json.dumps(list(data))
class BasicSerializer(serializers.Serializer):
is_async_asset_tree = serializers.BooleanField(
required=False, default=True, label=_('Async loading of asset tree')
)
class GraphicsSerializer(serializers.Serializer):
rdp_resolution = serializers.ChoiceField(
RDPResolution.choices, default=RDPResolution.AUTO,
required=False, label=_('RDP resolution')
)
keyboard_layout = serializers.ChoiceField(
KeyboardLayout.choices, default=KeyboardLayout.EN_US_QWERTY,
required=False, label=_('Keyboard layout')
)
rdp_client_option = MultipleChoiceField(
choices=RDPClientOption.choices, default={RDPClientOption.FULL_SCREEN},
label=_('RDP client option'), required=False
)
remote_application_connection_method = serializers.ChoiceField(
RemoteApplicationConnectionMethod.choices, default=RemoteApplicationConnectionMethod.WEB,
required=False, label=_('Remote application connection method')
)
class CommandLineSerializer(serializers.Serializer):
character_terminal_font_size = serializers.IntegerField(
default=14, min_value=1, max_value=9999, required=False,
label=_('Character terminal font size'),
)
is_backspace_as_ctrl_h = serializers.BooleanField(
required=False, default=False, label=_('Backspace as Ctrl+H')
)
is_right_click_quickly_paste = serializers.BooleanField(
required=False, default=False, label=_('Right click quickly paste')
)
class LunaSerializer(serializers.Serializer):
basic = BasicSerializer(required=False, label=_('Basic'))
graphics = GraphicsSerializer(required=False, label=_('Graphics'))
command_line = CommandLineSerializer(required=False, label=_('Command line'))

View File

@@ -55,30 +55,6 @@ class UserUpdatePasswordSerializer(serializers.ModelSerializer):
return instance
class UserUpdateSecretKeySerializer(serializers.ModelSerializer):
new_secret_key = EncryptedField(required=True, max_length=128)
new_secret_key_again = EncryptedField(required=True, max_length=128)
has_secret_key = serializers.BooleanField(read_only=True, source='secret_key')
class Meta:
model = User
fields = ['has_secret_key', 'new_secret_key', 'new_secret_key_again']
def validate(self, values):
new_secret_key = values.get('new_secret_key', '')
new_secret_key_again = values.get('new_secret_key_again', '')
if new_secret_key != new_secret_key_again:
msg = _('The newly set password is inconsistent')
raise serializers.ValidationError({'new_secret_key_again': msg})
return values
def update(self, instance, validated_data):
new_secret_key = self.validated_data.get('new_secret_key')
instance.secret_key = new_secret_key
instance.save()
return instance
class UserUpdatePublicKeySerializer(serializers.ModelSerializer):
public_key_comment = serializers.CharField(
source='get_public_key_comment', required=False, read_only=True, max_length=128