mirror of https://github.com/jumpserver/jumpserver
parent
d1f46768a3
commit
66c58a2084
|
@ -11,53 +11,32 @@ from .base import BaseAccountSerializer
|
||||||
|
|
||||||
|
|
||||||
class AccountSerializerCreateValidateMixin:
|
class AccountSerializerCreateValidateMixin:
|
||||||
replace_attrs: callable
|
id: str
|
||||||
|
template: bool
|
||||||
push_now: bool
|
push_now: bool
|
||||||
|
replace_attrs: callable
|
||||||
|
|
||||||
def validate(self, attrs):
|
def to_internal_value(self, data):
|
||||||
_id = attrs.pop('id', None)
|
self.id = data.pop('id', None)
|
||||||
if _id:
|
self.push_now = data.pop('push_now', False)
|
||||||
|
self.template = data.pop('template', False)
|
||||||
|
return super().to_internal_value(data)
|
||||||
|
|
||||||
|
def set_secret(self, attrs):
|
||||||
|
_id = self.id
|
||||||
|
template = self.template
|
||||||
|
|
||||||
|
if _id and template:
|
||||||
account_template = AccountTemplate.objects.get(id=_id)
|
account_template = AccountTemplate.objects.get(id=_id)
|
||||||
attrs['secret'] = account_template.secret
|
attrs['secret'] = account_template.secret
|
||||||
account_template = attrs.pop('template', None)
|
elif _id and not template:
|
||||||
if account_template:
|
account = Account.objects.get(id=_id)
|
||||||
self.replace_attrs(account_template, attrs)
|
attrs['secret'] = account.secret
|
||||||
self.push_now = attrs.pop('push_now', False)
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
self.set_secret(attrs)
|
||||||
return super().validate(attrs)
|
return super().validate(attrs)
|
||||||
|
|
||||||
|
|
||||||
class AccountSerializerCreateMixin(
|
|
||||||
AccountSerializerCreateValidateMixin, BulkModelSerializer
|
|
||||||
):
|
|
||||||
template = serializers.UUIDField(
|
|
||||||
required=False, allow_null=True, write_only=True,
|
|
||||||
label=_('Account template')
|
|
||||||
)
|
|
||||||
push_now = serializers.BooleanField(
|
|
||||||
default=False, label=_("Push now"), write_only=True
|
|
||||||
)
|
|
||||||
has_secret = serializers.BooleanField(label=_("Has secret"), read_only=True)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def validate_template(value):
|
|
||||||
try:
|
|
||||||
return AccountTemplate.objects.get(id=value)
|
|
||||||
except AccountTemplate.DoesNotExist:
|
|
||||||
raise serializers.ValidationError(_('Account template not found'))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def replace_attrs(account_template: AccountTemplate, attrs: dict):
|
|
||||||
exclude_fields = [
|
|
||||||
'_state', 'org_id', 'id', 'date_created',
|
|
||||||
'date_updated'
|
|
||||||
]
|
|
||||||
template_attrs = {
|
|
||||||
k: v for k, v in account_template.__dict__.items()
|
|
||||||
if k not in exclude_fields
|
|
||||||
}
|
|
||||||
for k, v in template_attrs.items():
|
|
||||||
attrs.setdefault(k, v)
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
if self.push_now:
|
if self.push_now:
|
||||||
|
@ -65,6 +44,18 @@ class AccountSerializerCreateMixin(
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
class AccountSerializerCreateMixin(
|
||||||
|
AccountSerializerCreateValidateMixin, BulkModelSerializer
|
||||||
|
):
|
||||||
|
template = serializers.BooleanField(
|
||||||
|
default=False, label=_("Template"), write_only=True
|
||||||
|
)
|
||||||
|
push_now = serializers.BooleanField(
|
||||||
|
default=False, label=_("Push now"), write_only=True
|
||||||
|
)
|
||||||
|
has_secret = serializers.BooleanField(label=_("Has secret"), read_only=True)
|
||||||
|
|
||||||
|
|
||||||
class AccountAssetSerializer(serializers.ModelSerializer):
|
class AccountAssetSerializer(serializers.ModelSerializer):
|
||||||
platform = ObjectRelatedField(read_only=True)
|
platform = ObjectRelatedField(read_only=True)
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,9 @@ class AssetAccountSerializer(
|
||||||
push_now = serializers.BooleanField(
|
push_now = serializers.BooleanField(
|
||||||
default=False, label=_("Push now"), write_only=True
|
default=False, label=_("Push now"), write_only=True
|
||||||
)
|
)
|
||||||
|
template = serializers.BooleanField(
|
||||||
|
default=False, label=_("Template"), write_only=True
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Account
|
model = Account
|
||||||
|
@ -62,7 +65,7 @@ class AssetAccountSerializer(
|
||||||
'version', 'secret_type',
|
'version', 'secret_type',
|
||||||
]
|
]
|
||||||
fields_write_only = [
|
fields_write_only = [
|
||||||
'secret', 'push_now'
|
'secret', 'push_now', 'template'
|
||||||
]
|
]
|
||||||
fields = fields_mini + fields_write_only
|
fields = fields_mini + fields_write_only
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
|
@ -74,33 +77,6 @@ class AssetAccountSerializer(
|
||||||
value = self.initial_data.get('username')
|
value = self.initial_data.get('username')
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def validate_template(value):
|
|
||||||
try:
|
|
||||||
return AccountTemplate.objects.get(id=value)
|
|
||||||
except AccountTemplate.DoesNotExist:
|
|
||||||
raise serializers.ValidationError(_('Account template not found'))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def replace_attrs(account_template: AccountTemplate, attrs: dict):
|
|
||||||
exclude_fields = [
|
|
||||||
'_state', 'org_id', 'id', 'date_created',
|
|
||||||
'date_updated'
|
|
||||||
]
|
|
||||||
template_attrs = {
|
|
||||||
k: v for k, v in account_template.__dict__.items()
|
|
||||||
if k not in exclude_fields
|
|
||||||
}
|
|
||||||
for k, v in template_attrs.items():
|
|
||||||
attrs.setdefault(k, v)
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
|
||||||
from accounts.tasks import push_accounts_to_assets
|
|
||||||
instance = super().create(validated_data)
|
|
||||||
if self.push_now:
|
|
||||||
push_accounts_to_assets.delay([instance.id], [instance.asset_id])
|
|
||||||
return instance
|
|
||||||
|
|
||||||
|
|
||||||
class AccountSecretSerializer(SecretReadableMixin, CommonModelSerializer):
|
class AccountSecretSerializer(SecretReadableMixin, CommonModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
Loading…
Reference in New Issue