jumpserver/apps/assets/serializers/platform.py

108 lines
4.5 KiB
Python
Raw Normal View History

2022-04-26 13:30:01 +00:00
from rest_framework import serializers
from django.utils.translation import gettext_lazy as _
2022-09-01 06:46:31 +00:00
from common.drf.fields import LabeledChoiceField
2022-10-19 02:21:05 +00:00
from common.drf.serializers import WritableNestedModelSerializer
2022-09-15 08:22:01 +00:00
from ..models import Platform, PlatformProtocol, PlatformAutomation
from ..const import Category, AllTypes
2022-04-26 13:30:01 +00:00
2022-08-30 06:13:33 +00:00
__all__ = ['PlatformSerializer', 'PlatformOpsMethodSerializer']
2022-04-26 13:30:01 +00:00
2022-08-29 07:50:25 +00:00
class ProtocolSettingSerializer(serializers.Serializer):
SECURITY_CHOICES = [
('any', 'Any'),
('rdp', 'RDP'),
('tls', 'TLS'),
('nla', 'NLA'),
]
2022-09-07 09:12:53 +00:00
# RDP
2022-08-29 07:50:25 +00:00
console = serializers.BooleanField(required=False)
2022-09-08 12:31:04 +00:00
security = serializers.ChoiceField(choices=SECURITY_CHOICES, default='any')
2022-09-07 09:12:53 +00:00
# SFTP
2022-09-08 12:31:04 +00:00
sftp_enabled = serializers.BooleanField(default=True, label=_("SFTP enabled"))
sftp_home = serializers.CharField(default='/tmp', label=_("SFTP home"))
2022-08-29 07:50:25 +00:00
2022-09-21 11:03:06 +00:00
# HTTP
auto_fill = serializers.BooleanField(default=False, label=_("Auto fill"))
username_selector = serializers.CharField(default='', allow_blank=True, label=_("Username selector"))
password_selector = serializers.CharField(default='', allow_blank=True, label=_("Password selector"))
submit_selector = serializers.CharField(default='', allow_blank=True, label=_("Submit selector"))
2022-09-21 03:17:14 +00:00
2022-08-29 07:50:25 +00:00
2022-09-15 08:22:01 +00:00
class PlatformAutomationSerializer(serializers.ModelSerializer):
class Meta:
model = PlatformAutomation
fields = [
'id', 'ansible_enabled', 'ansible_config',
'ping_enabled', 'ping_method',
2022-09-15 08:22:01 +00:00
'gather_facts_enabled', 'gather_facts_method',
2022-10-19 03:39:11 +00:00
'push_account_enabled', 'push_account_method',
2022-10-13 09:47:29 +00:00
'change_secret_enabled', 'change_secret_method',
2022-09-15 08:22:01 +00:00
'verify_account_enabled', 'verify_account_method',
'gather_accounts_enabled', 'gather_accounts_method',
]
extra_kwargs = {
2022-09-15 13:20:56 +00:00
'ping_enabled': {'label': '启用资产探测'},
'ping_method': {'label': '探测方式'},
2022-09-15 08:22:01 +00:00
'gather_facts_enabled': {'label': '启用收集信息'},
'gather_facts_method': {'label': '收集信息方式'},
'verify_account_enabled': {'label': '启用校验账号'},
'verify_account_method': {'label': '校验账号方式'},
2022-10-19 03:39:11 +00:00
'push_account_enabled': {'label': '启用推送账号'},
'push_account_method': {'label': '推送账号方式'},
2022-10-18 12:37:17 +00:00
'change_secret_enabled': {'label': '启用账号改密'},
2022-10-13 09:47:29 +00:00
'change_secret_method': {'label': '账号创建改密方式'},
2022-09-15 08:22:01 +00:00
'gather_accounts_enabled': {'label': '启用账号收集'},
'gather_accounts_method': {'label': '收集账号方式'},
}
2022-08-18 09:58:59 +00:00
class PlatformProtocolsSerializer(serializers.ModelSerializer):
2022-09-07 09:12:53 +00:00
setting = ProtocolSettingSerializer(required=False, allow_null=True)
2022-10-18 12:37:17 +00:00
primary = serializers.BooleanField(read_only=True, label=_("Primary"))
2022-08-29 07:50:25 +00:00
2022-08-18 09:58:59 +00:00
class Meta:
model = PlatformProtocol
2022-10-18 12:37:17 +00:00
fields = [
'id', 'name', 'port', 'primary', 'default',
'required', 'secret_types', 'setting',
]
2022-04-26 13:30:01 +00:00
2022-10-19 02:21:05 +00:00
class PlatformSerializer(WritableNestedModelSerializer):
type = LabeledChoiceField(choices=AllTypes.choices(), label=_("Type"))
2022-09-01 06:46:31 +00:00
category = LabeledChoiceField(choices=Category.choices, label=_("Category"))
2022-08-18 09:58:59 +00:00
protocols = PlatformProtocolsSerializer(label=_('Protocols'), many=True, required=False)
2022-09-15 08:22:01 +00:00
automation = PlatformAutomationSerializer(label=_('Automation'), required=False)
2022-09-01 06:46:31 +00:00
su_method = LabeledChoiceField(
2022-08-29 02:49:53 +00:00
choices=[('sudo', 'sudo su -'), ('su', 'su - ')],
label='切换方式', required=False, default='sudo'
)
2022-04-26 13:30:01 +00:00
class Meta:
model = Platform
2022-04-30 15:19:43 +00:00
fields_mini = ['id', 'name', 'internal']
fields_small = fields_mini + [
2022-09-08 12:31:04 +00:00
'category', 'type', 'charset',
2022-08-18 09:58:59 +00:00
]
fields = fields_small + [
2022-09-08 12:31:04 +00:00
'protocols_enabled', 'protocols', 'domain_enabled',
2022-09-20 05:54:25 +00:00
'su_enabled', 'su_method', 'automation', 'comment',
2022-04-30 15:19:43 +00:00
]
2022-08-29 02:49:53 +00:00
extra_kwargs = {
'su_enabled': {'label': '启用切换账号'},
2022-09-15 13:20:56 +00:00
'protocols_enabled': {'label': '启用协议'},
2022-09-01 06:46:31 +00:00
'domain_enabled': {'label': "启用网域"},
'domain_default': {'label': "默认网域"},
2022-08-29 02:49:53 +00:00
}
2022-04-30 15:19:43 +00:00
2022-08-30 06:13:33 +00:00
class PlatformOpsMethodSerializer(serializers.Serializer):
id = serializers.CharField(read_only=True)
name = serializers.CharField(max_length=50, label=_('Name'))
category = serializers.CharField(max_length=50, label=_('Category'))
type = serializers.ListSerializer(child=serializers.CharField())
method = serializers.CharField()