| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- from django.contrib.contenttypes.models import ContentType
- from drf_spectacular.utils import extend_schema_field
- from rest_framework import serializers
- from ipam.api.nested_serializers import NestedIPAddressSerializer, NestedRouteTargetSerializer
- from ipam.models import RouteTarget
- from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
- from netbox.api.serializers import NetBoxModelSerializer
- from netbox.constants import NESTED_SERIALIZER_PREFIX
- from tenancy.api.nested_serializers import NestedTenantSerializer
- from utilities.api import get_serializer_for_model
- from vpn.choices import *
- from vpn.models import *
- from .nested_serializers import *
- __all__ = (
- 'IKEPolicySerializer',
- 'IKEProposalSerializer',
- 'IPSecPolicySerializer',
- 'IPSecProfileSerializer',
- 'IPSecProposalSerializer',
- 'L2VPNSerializer',
- 'L2VPNTerminationSerializer',
- 'TunnelGroupSerializer',
- 'TunnelSerializer',
- 'TunnelTerminationSerializer',
- )
- class TunnelGroupSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
- tunnel_count = serializers.IntegerField(read_only=True)
- class Meta:
- model = TunnelGroup
- fields = [
- 'id', 'url', 'display', 'name', 'slug', 'description', 'tags', 'custom_fields', 'created', 'last_updated',
- 'tunnel_count',
- ]
- class TunnelSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:tunnel-detail'
- )
- status = ChoiceField(
- choices=TunnelStatusChoices
- )
- group = NestedTunnelGroupSerializer()
- encapsulation = ChoiceField(
- choices=TunnelEncapsulationChoices
- )
- ipsec_profile = NestedIPSecProfileSerializer(
- required=False,
- allow_null=True
- )
- tenant = NestedTenantSerializer(
- required=False,
- allow_null=True
- )
- class Meta:
- model = Tunnel
- fields = (
- 'id', 'url', 'display', 'name', 'status', 'group', 'encapsulation', 'ipsec_profile', 'tenant', 'tunnel_id',
- 'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
- )
- class TunnelTerminationSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:tunneltermination-detail'
- )
- tunnel = NestedTunnelSerializer()
- role = ChoiceField(
- choices=TunnelTerminationRoleChoices
- )
- termination_type = ContentTypeField(
- queryset=ContentType.objects.all()
- )
- termination = serializers.SerializerMethodField(
- read_only=True
- )
- outside_ip = NestedIPAddressSerializer(
- required=False,
- allow_null=True
- )
- class Meta:
- model = TunnelTermination
- fields = (
- 'id', 'url', 'display', 'tunnel', 'role', 'termination_type', 'termination_id', 'termination', 'outside_ip',
- 'tags', 'custom_fields', 'created', 'last_updated',
- )
- @extend_schema_field(serializers.JSONField(allow_null=True))
- def get_termination(self, obj):
- serializer = get_serializer_for_model(obj.termination, prefix=NESTED_SERIALIZER_PREFIX)
- context = {'request': self.context['request']}
- return serializer(obj.termination, context=context).data
- class IKEProposalSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:ikeproposal-detail'
- )
- authentication_method = ChoiceField(
- choices=AuthenticationMethodChoices
- )
- encryption_algorithm = ChoiceField(
- choices=EncryptionAlgorithmChoices
- )
- authentication_algorithm = ChoiceField(
- choices=AuthenticationAlgorithmChoices
- )
- group = ChoiceField(
- choices=DHGroupChoices
- )
- class Meta:
- model = IKEProposal
- fields = (
- 'id', 'url', 'display', 'name', 'description', 'authentication_method', 'encryption_algorithm',
- 'authentication_algorithm', 'group', 'sa_lifetime', 'comments', 'tags', 'custom_fields', 'created',
- 'last_updated',
- )
- class IKEPolicySerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:ikepolicy-detail'
- )
- version = ChoiceField(
- choices=IKEVersionChoices
- )
- mode = ChoiceField(
- choices=IKEModeChoices
- )
- proposals = SerializedPKRelatedField(
- queryset=IKEProposal.objects.all(),
- serializer=NestedIKEProposalSerializer,
- required=False,
- many=True
- )
- class Meta:
- model = IKEPolicy
- fields = (
- 'id', 'url', 'display', 'name', 'description', 'version', 'mode', 'proposals', 'preshared_key', 'comments',
- 'tags', 'custom_fields', 'created', 'last_updated',
- )
- class IPSecProposalSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:ipsecproposal-detail'
- )
- encryption_algorithm = ChoiceField(
- choices=EncryptionAlgorithmChoices
- )
- authentication_algorithm = ChoiceField(
- choices=AuthenticationAlgorithmChoices
- )
- class Meta:
- model = IPSecProposal
- fields = (
- 'id', 'url', 'display', 'name', 'description', 'encryption_algorithm', 'authentication_algorithm',
- 'sa_lifetime_seconds', 'sa_lifetime_data', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
- )
- class IPSecPolicySerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:ipsecpolicy-detail'
- )
- proposals = SerializedPKRelatedField(
- queryset=IPSecProposal.objects.all(),
- serializer=NestedIPSecProposalSerializer,
- required=False,
- many=True
- )
- pfs_group = ChoiceField(
- choices=DHGroupChoices,
- required=False
- )
- class Meta:
- model = IPSecPolicy
- fields = (
- 'id', 'url', 'display', 'name', 'description', 'proposals', 'pfs_group', 'comments', 'tags',
- 'custom_fields', 'created', 'last_updated',
- )
- class IPSecProfileSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(
- view_name='vpn-api:ipsecprofile-detail'
- )
- mode = ChoiceField(
- choices=IPSecModeChoices
- )
- ike_policy = NestedIKEPolicySerializer()
- ipsec_policy = NestedIPSecPolicySerializer()
- class Meta:
- model = IPSecProfile
- fields = (
- 'id', 'url', 'display', 'name', 'description', 'mode', 'ike_policy', 'ipsec_policy', 'comments', 'tags',
- 'custom_fields', 'created', 'last_updated',
- )
- #
- # L2VPN
- #
- class L2VPNSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='vpn-api:l2vpn-detail')
- type = ChoiceField(choices=L2VPNTypeChoices, required=False)
- import_targets = SerializedPKRelatedField(
- queryset=RouteTarget.objects.all(),
- serializer=NestedRouteTargetSerializer,
- required=False,
- many=True
- )
- export_targets = SerializedPKRelatedField(
- queryset=RouteTarget.objects.all(),
- serializer=NestedRouteTargetSerializer,
- required=False,
- many=True
- )
- tenant = NestedTenantSerializer(required=False, allow_null=True)
- class Meta:
- model = L2VPN
- fields = [
- 'id', 'url', 'display', 'identifier', 'name', 'slug', 'type', 'import_targets', 'export_targets',
- 'description', 'comments', 'tenant', 'tags', 'custom_fields', 'created', 'last_updated'
- ]
- class L2VPNTerminationSerializer(NetBoxModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='vpn-api:l2vpntermination-detail')
- l2vpn = NestedL2VPNSerializer()
- assigned_object_type = ContentTypeField(
- queryset=ContentType.objects.all()
- )
- assigned_object = serializers.SerializerMethodField(read_only=True)
- class Meta:
- model = L2VPNTermination
- fields = [
- 'id', 'url', 'display', 'l2vpn', 'assigned_object_type', 'assigned_object_id',
- 'assigned_object', 'tags', 'custom_fields', 'created', 'last_updated'
- ]
- @extend_schema_field(serializers.JSONField(allow_null=True))
- def get_assigned_object(self, instance):
- serializer = get_serializer_for_model(instance.assigned_object, prefix=NESTED_SERIALIZER_PREFIX)
- context = {'request': self.context['request']}
- return serializer(instance.assigned_object, context=context).data
|