mirror of https://github.com/jumpserver/jumpserver
69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
from rest_framework import serializers
|
||
from django.utils.translation import ugettext_lazy as _
|
||
from common.drf.serializers import BulkModelSerializer
|
||
from acls.serializers.rules import ip_group_child_validator, ip_group_help_text
|
||
from ..models import Endpoint, EndpointRule
|
||
|
||
__all__ = ['EndpointSerializer', 'EndpointRuleSerializer']
|
||
|
||
|
||
class EndpointSerializer(BulkModelSerializer):
|
||
# 解决 luna 处理繁琐的问题,oracle_port 返回匹配到的端口
|
||
oracle_port = serializers.SerializerMethodField(label=_('Oracle port'))
|
||
|
||
class Meta:
|
||
model = Endpoint
|
||
fields_mini = ['id', 'name']
|
||
fields_small = [
|
||
'host',
|
||
'https_port', 'http_port', 'ssh_port',
|
||
'rdp_port', 'mysql_port', 'mariadb_port',
|
||
'postgresql_port', 'redis_port',
|
||
'oracle_11g_port', 'oracle_12c_port',
|
||
'oracle_port',
|
||
]
|
||
fields = fields_mini + fields_small + [
|
||
'comment', 'date_created', 'date_updated', 'created_by'
|
||
]
|
||
extra_kwargs = {
|
||
'https_port': {'default': 443},
|
||
'http_port': {'default': 80},
|
||
'ssh_port': {'default': 2222},
|
||
'rdp_port': {'default': 3389},
|
||
'mysql_port': {'default': 33060},
|
||
'mariadb_port': {'default': 33061},
|
||
'postgresql_port': {'default': 54320},
|
||
'redis_port': {'default': 63790},
|
||
'oracle_11g_port': {'default': 15211},
|
||
'oracle_12c_port': {'default': 15212},
|
||
}
|
||
|
||
def get_oracle_port(self, obj: Endpoint):
|
||
view = self.context.get('view')
|
||
if not view or view.action not in ['smart']:
|
||
return 0
|
||
return obj.get_port(view.target_protocol)
|
||
|
||
|
||
class EndpointRuleSerializer(BulkModelSerializer):
|
||
_ip_group_help_text = '{} <br> {}'.format(
|
||
ip_group_help_text,
|
||
_('If asset IP addresses under different endpoints conflict, use asset labels')
|
||
)
|
||
ip_group = serializers.ListField(
|
||
default=['*'], label=_('IP'), help_text=_ip_group_help_text,
|
||
child=serializers.CharField(max_length=1024, validators=[ip_group_child_validator])
|
||
)
|
||
endpoint_display = serializers.ReadOnlyField(source='endpoint.name', label=_('Endpoint'))
|
||
|
||
class Meta:
|
||
model = EndpointRule
|
||
fields_mini = ['id', 'name']
|
||
fields_small = fields_mini + ['ip_group', 'priority']
|
||
fields_fk = ['endpoint', 'endpoint_display']
|
||
fields = fields_mini + fields_small + fields_fk + [
|
||
'comment', 'date_created', 'date_updated', 'created_by'
|
||
]
|
||
extra_kwargs = {
|
||
}
|