From eb3f4531068197426bd12e0dc07bb1027ad8266f Mon Sep 17 00:00:00 2001 From: Charlie Jacomme Date: Sat, 14 Jul 2018 10:59:17 +0200 Subject: [PATCH] Serializers for reverse DNS --- api/serializers.py | 20 ++++++++++++++++++++ api/urls.py | 1 + api/views.py | 9 +++++++++ machines/models.py | 11 +++++++++++ 4 files changed, 41 insertions(+) diff --git a/api/serializers.py b/api/serializers.py index f6348086..568ced34 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -888,6 +888,26 @@ class DNSZonesSerializer(serializers.ModelSerializer): 'mx_records', 'txt_records', 'srv_records', 'a_records', 'aaaa_records', 'cname_records') + +class DNSReverseZonesSerializer(serializers.ModelSerializer): + """Serialize the data about DNS Zones. + """ + soa = SOARecordSerializer(source='extension.soa') + extension = serializers.CharField(source='extension.name', read_only=True) + cidrs = serializers.CharField(source='ip_set_cidrs_as_str', read_only=True) + ns_records = NSRecordSerializer(many=True, source='extension.ns_set') + mx_records = MXRecordSerializer(many=True, source='extension.mx_set') + txt_records = TXTRecordSerializer(many=True, source='extension.txt_set') + ptr_records = ARecordSerializer(many=True, source='get_associated_ptr_records') + ptr_v6_records = AAAARecordSerializer(many=True, source='get_associated_ptr_v6_records') + + + class Meta: + model = machines.IpType + fields = ('type', 'extension', 'soa', 'ns_records', 'mx_records', + 'txt_records', 'ptr_records', 'ptr_v6_records', 'cidrs') + + #REMINDER diff --git a/api/urls.py b/api/urls.py index 4e3f9725..f4b87a25 100644 --- a/api/urls.py +++ b/api/urls.py @@ -108,6 +108,7 @@ router.register_view(r'reminder/get-users', views.ReminderView), router.register_view(r'firewall/subnet-ports', views.SubnetPortsOpenView), # DNS router.register_view(r'dns/zones', views.DNSZonesView), +router.register_view(r'dns/reverse-zones', views.DNSReverseZonesView), # MAILING router.register_view(r'mailing/standard', views.StandardMailingView), router.register_view(r'mailing/club', views.ClubMailingView), diff --git a/api/views.py b/api/views.py index 9c2bd444..1eb6d911 100644 --- a/api/views.py +++ b/api/views.py @@ -563,6 +563,15 @@ class DNSZonesView(generics.ListAPIView): .all()) serializer_class = serializers.DNSZonesSerializer +class DNSReverseZonesView(generics.ListAPIView): + """Exposes the detailed information about each extension (hostnames, + IPs, DNS records, etc.) in order to build the DNS zone files. + """ + queryset = (machines.IpType.objects.all()) + serializer_class = serializers.DNSReverseZonesSerializer + + + # MAILING diff --git a/machines/models.py b/machines/models.py index d9a8cb5d..90e65a5f 100644 --- a/machines/models.py +++ b/machines/models.py @@ -460,6 +460,17 @@ class IpType(RevMixin, AclMixin, models.Model): ): ipv6.check_and_replace_prefix(prefix=self.prefix_v6) + def get_associated_ptr_records(self): + from re2o.utils import all_active_assigned_interfaces + return (all_active_assigned_interfaces() + .filter(type__ip_type=self) + .filter(ipv4__isnull=False)) + + def get_associated_ptr_v6_records(self): + from re2o.utils import all_active_interfaces + return (all_active_interfaces(full=True) + .filter(type__ip_type=self)) + def clean(self): """ Nettoyage. Vérifie : - Que ip_stop est après ip_start