mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-23 11:53:12 +00:00
Add DNS info per zone endpoint
This commit is contained in:
parent
4fe1be5d31
commit
e6884ab4da
4 changed files with 109 additions and 2 deletions
|
@ -190,8 +190,7 @@ class InterfaceSerializer(NamespacedHMSerializer):
|
|||
class Ipv6ListSerializer(NamespacedHMSerializer):
|
||||
class Meta:
|
||||
model = machines.Ipv6List
|
||||
fields = ('ipv6', 'interface', 'slaac_ip', 'date_end',
|
||||
'api_url')
|
||||
fields = ('ipv6', 'interface', 'slaac_ip', 'api_url')
|
||||
|
||||
|
||||
class DomainSerializer(NamespacedHMSerializer):
|
||||
|
@ -488,3 +487,94 @@ class HostMacIpSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = machines.Interface
|
||||
fields = ('hostname', 'extension', 'mac_address', 'ipv4')
|
||||
|
||||
|
||||
# DNS
|
||||
|
||||
|
||||
class SOARecordSerializer(SOASerializer):
|
||||
class Meta:
|
||||
model = machines.SOA
|
||||
fields = ('name', 'mail', 'refresh', 'retry', 'expire', 'ttl')
|
||||
|
||||
|
||||
class OriginV4RecordSerializer(IpListSerializer):
|
||||
class Meta(IpListSerializer.Meta):
|
||||
fields = ('ipv4',)
|
||||
|
||||
|
||||
class OriginV6RecordSerializer(Ipv6ListSerializer):
|
||||
class Meta(Ipv6ListSerializer.Meta):
|
||||
fields = ('ipv6',)
|
||||
|
||||
|
||||
class NSRecordSerializer(NsSerializer):
|
||||
target = serializers.CharField(source='ns.name', read_only=True)
|
||||
|
||||
class Meta(NsSerializer.Meta):
|
||||
fields = ('target',)
|
||||
|
||||
|
||||
class MXRecordSerializer(MxSerializer):
|
||||
target = serializers.CharField(source='name.name', read_only=True)
|
||||
|
||||
class Meta(MxSerializer.Meta):
|
||||
fields = ('target', 'priority')
|
||||
|
||||
|
||||
class TXTRecordSerializer(TxtSerializer):
|
||||
class Meta(TxtSerializer.Meta):
|
||||
fields = ('field1', 'field2')
|
||||
|
||||
|
||||
class SRVRecordSerializer(SrvSerializer):
|
||||
target = serializers.CharField(source='target.name', read_only=True)
|
||||
|
||||
class Meta(SrvSerializer.Meta):
|
||||
fields = ('service', 'protocole', 'ttl', 'priority', 'weight', 'port', 'target')
|
||||
|
||||
|
||||
class ARecordSerializer(serializers.ModelSerializer):
|
||||
hostname = serializers.CharField(source='domain.name', read_only=True)
|
||||
ipv4 = serializers.CharField(source='ipv4.ipv4', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = machines.Interface
|
||||
fields = ('hostname', 'ipv4')
|
||||
|
||||
|
||||
class AAAARecordSerializer(serializers.ModelSerializer):
|
||||
hostname = serializers.CharField(source='domain.name', read_only=True)
|
||||
ipv6 = serializers.CharField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = machines.Interface
|
||||
fields = ('hostname', 'ipv6')
|
||||
|
||||
|
||||
class CNAMERecordSerializer(serializers.ModelSerializer):
|
||||
alias = serializers.CharField(source='cname.name', read_only=True)
|
||||
hostname = serializers.CharField(source='name', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = machines.Domain
|
||||
fields = ('alias', 'hostname')
|
||||
|
||||
|
||||
class DNSZonesSerializer(serializers.ModelSerializer):
|
||||
soa = SOARecordSerializer()
|
||||
ns_records = NSRecordSerializer(many=True, source='ns_set')
|
||||
originv4 = OriginV4RecordSerializer(source='origin')
|
||||
originv6 = OriginV6RecordSerializer(source='origin_v6')
|
||||
mx_records = MXRecordSerializer(many=True, source='mx_set')
|
||||
txt_records = TXTRecordSerializer(many=True, source='txt_set')
|
||||
srv_records = SRVRecordSerializer(many=True, source='srv_set')
|
||||
a_records = ARecordSerializer(many=True, source='get_associated_a_records')
|
||||
aaaa_records = AAAARecordSerializer(many=True, source='get_associated_aaaa_records')
|
||||
cname_records = CNAMERecordSerializer(many=True, source='get_associated_cname_records')
|
||||
|
||||
class Meta:
|
||||
model = machines.Extension
|
||||
fields = ('name', 'soa', 'ns_records', 'originv4', 'originv6',
|
||||
'mx_records', 'txt_records', 'srv_records', 'a_records',
|
||||
'aaaa_records', 'cname_records')
|
||||
|
|
|
@ -90,6 +90,7 @@ router.register(r'users/whitelists', views.WhitelistViewSet)
|
|||
urlpatterns = [
|
||||
url(r'^', include(router.urls)),
|
||||
url(r'^dhcp/hostmacip', views.HostMacIpView.as_view()),
|
||||
url(r'^dns/zones', views.DNSZonesView.as_view()),
|
||||
url(r'^services/regen', views.ServiceRegenView.as_view()),
|
||||
url(r'^token-auth', views.ObtainExpiringAuthToken.as_view())
|
||||
]
|
||||
|
|
|
@ -338,6 +338,13 @@ class HostMacIpView(generics.ListAPIView):
|
|||
serializer_class = serializers.HostMacIpSerializer
|
||||
|
||||
|
||||
# DNS views
|
||||
|
||||
class DNSZonesView(generics.ListAPIView):
|
||||
queryset = machines.Extension.objects.all()
|
||||
serializer_class = serializers.DNSZonesSerializer
|
||||
|
||||
|
||||
# Subclass the standard rest_framework.auth_token.views.ObtainAuthToken
|
||||
# in order to renew the lease of the token and add expiration time
|
||||
class ObtainExpiringAuthToken(ObtainAuthToken):
|
||||
|
|
|
@ -562,6 +562,15 @@ class Extension(RevMixin, AclMixin, models.Model):
|
|||
entry += "@ IN AAAA " + str(self.origin_v6)
|
||||
return entry
|
||||
|
||||
def get_associated_a_records(self):
|
||||
return Interface.objects.filter(type__ip_type__extension=self).filter(ipv4__isnull=False)
|
||||
|
||||
def get_associated_aaaa_records(self):
|
||||
return Interface.objects.filter(type__ip_type__extension=self)
|
||||
|
||||
def get_associated_cname_records(self):
|
||||
return Domain.objects.filter(extension=self).filter(cname__isnull=False)
|
||||
|
||||
@staticmethod
|
||||
def can_use_all(user_request, *_args, **_kwargs):
|
||||
"""Superdroit qui permet d'utiliser toutes les extensions sans
|
||||
|
|
Loading…
Reference in a new issue