jumpserver/apps/assets/serializers/platform.py

142 lines
4.9 KiB
Python
Raw Normal View History

2022-04-26 13:30:01 +00:00
from django.utils.translation import gettext_lazy as _
2022-11-11 07:04:31 +00:00
from rest_framework import serializers
2022-04-26 13:30:01 +00:00
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
from ..const import Category, AllTypes
2022-11-11 07:04:31 +00:00
from ..models import Platform, PlatformProtocol, PlatformAutomation
2022-04-26 13:30:01 +00:00
2022-11-11 07:04:31 +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 = [
2022-11-11 07:04:31 +00:00
("any", "Any"),
("rdp", "RDP"),
("tls", "TLS"),
("nla", "NLA"),
2022-08-29 07:50:25 +00:00
]
2022-09-07 09:12:53 +00:00
# RDP
2022-08-29 07:50:25 +00:00
console = serializers.BooleanField(required=False)
2022-11-11 07:04:31 +00:00
security = serializers.ChoiceField(choices=SECURITY_CHOICES, default="any")
2022-09-08 12:31:04 +00:00
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"))
2022-11-11 07:04:31 +00:00
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"))
2022-11-11 07:04:31 +00:00
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 = [
2022-11-11 07:04:31 +00:00
"id",
"ansible_enabled",
"ansible_config",
"ping_enabled",
"ping_method",
"gather_facts_enabled",
"gather_facts_method",
"push_account_enabled",
"push_account_method",
"change_secret_enabled",
"change_secret_method",
"verify_account_enabled",
"verify_account_method",
"gather_accounts_enabled",
"gather_accounts_method",
2022-09-15 08:22:01 +00:00
]
extra_kwargs = {
2022-11-11 07:04:31 +00:00
"ping_enabled": {"label": "启用资产探测"},
"ping_method": {"label": "探测方式"},
"gather_facts_enabled": {"label": "启用收集信息"},
"gather_facts_method": {"label": "收集信息方式"},
"verify_account_enabled": {"label": "启用校验账号"},
"verify_account_method": {"label": "校验账号方式"},
"push_account_enabled": {"label": "启用推送账号"},
"push_account_method": {"label": "推送账号方式"},
"change_secret_enabled": {"label": "启用账号改密"},
"change_secret_method": {"label": "账号创建改密方式"},
"gather_accounts_enabled": {"label": "启用账号收集"},
"gather_accounts_method": {"label": "收集账号方式"},
2022-09-15 08:22:01 +00:00
}
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 = [
2022-11-11 07:04:31 +00:00
"id",
"name",
"port",
"primary",
"default",
"required",
"secret_types",
"setting",
2022-10-18 12:37:17 +00:00
]
2022-04-26 13:30:01 +00:00
2022-10-19 02:21:05 +00:00
class PlatformSerializer(WritableNestedModelSerializer):
2022-11-11 07:04:31 +00:00
charset = LabeledChoiceField(
choices=Platform.CharsetChoices.choices, label=_("Charset")
)
type = LabeledChoiceField(choices=AllTypes.choices(), label=_("Type"))
2022-09-01 06:46:31 +00:00
category = LabeledChoiceField(choices=Category.choices, label=_("Category"))
2022-11-11 07:04:31 +00:00
protocols = PlatformProtocolsSerializer(
label=_("Protocols"), many=True, required=False
)
automation = PlatformAutomationSerializer(label=_("Automation"), required=False)
2022-09-01 06:46:31 +00:00
su_method = LabeledChoiceField(
2022-11-11 07:04:31 +00:00
choices=[("sudo", "sudo su -"), ("su", "su - ")],
label="切换方式",
required=False,
default="sudo",
2022-08-29 02:49:53 +00:00
)
2022-04-26 13:30:01 +00:00
class Meta:
model = Platform
2022-11-11 07:04:31 +00:00
fields_mini = ["id", "name", "internal"]
2022-04-30 15:19:43 +00:00
fields_small = fields_mini + [
2022-11-11 07:04:31 +00:00
"category",
"type",
"charset",
2022-08-18 09:58:59 +00:00
]
fields = fields_small + [
2022-11-11 07:04:31 +00:00
"protocols_enabled",
"protocols",
"domain_enabled",
"su_enabled",
"su_method",
"automation",
"comment",
2022-04-30 15:19:43 +00:00
]
2022-08-29 02:49:53 +00:00
extra_kwargs = {
2022-11-11 07:04:31 +00:00
"su_enabled": {"label": "启用切换账号"},
"protocols_enabled": {"label": "启用协议"},
"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)
2022-11-11 07:04:31 +00:00
name = serializers.CharField(max_length=50, label=_("Name"))
category = serializers.CharField(max_length=50, label=_("Category"))
2022-08-30 06:13:33 +00:00
type = serializers.ListSerializer(child=serializers.CharField())
method = serializers.CharField()