Browse Source

fix(api): skip restricted types in Domain.sync_from_pdns(), fixes #56

Peter Thomassen 8 years ago
parent
commit
0cbbcb60a2
2 changed files with 6 additions and 5 deletions
  1. 3 1
      api/desecapi/models.py
  2. 3 4
      api/desecapi/views.py

+ 3 - 1
api/desecapi/models.py

@@ -196,7 +196,7 @@ class Domain(models.Model, mixins.SetterMixin):
         with transaction.atomic():
             RRset.objects.filter(domain=self).delete()
             rrsets = pdns.get_rrsets(self)
-            rrsets = [rrset for rrset in rrsets if rrset.type != 'SOA']
+            rrsets = [rrset for rrset in rrsets if rrset.type not in RRset.RESTRICTED_TYPES]
             RRset.objects.bulk_create(rrsets)
 
     @transaction.atomic
@@ -272,7 +272,9 @@ class RRset(models.Model, mixins.SetterMixin):
     type = models.CharField(max_length=10, validators=[validate_upper])
     records = models.CharField(max_length=64000, blank=True)
     ttl = models.PositiveIntegerField(validators=[MinValueValidator(1)])
+
     _dirty = False
+    RESTRICTED_TYPES = ('SOA', 'RRSIG', 'DNSKEY', 'NSEC3PARAM')
 
 
     class Meta:

+ 3 - 4
api/desecapi/views.py

@@ -133,7 +133,6 @@ class RRsetDetail(generics.RetrieveUpdateDestroyAPIView):
     lookup_field = 'type'
     serializer_class = RRsetSerializer
     permission_classes = (permissions.IsAuthenticated, IsDomainOwner,)
-    restricted_types = ('SOA', 'RRSIG', 'DNSKEY', 'NSEC3PARAM')
 
     def delete(self, request, *args, **kwargs):
         try:
@@ -147,7 +146,7 @@ class RRsetDetail(generics.RetrieveUpdateDestroyAPIView):
         subname = self.kwargs['subname'].replace('=2F', '/')
         type_ = self.kwargs['type']
 
-        if type_ in self.restricted_types:
+        if type_ in RRset.RESTRICTED_TYPES:
             raise PermissionDenied("You cannot tinker with the %s RRset." % type_)
 
         return RRset.objects.filter(
@@ -178,7 +177,7 @@ class RRsetList(generics.ListCreateAPIView):
             value = self.request.query_params.get(filter_field)
 
             if value is not None:
-                if filter_field == 'type' and value in RRsetDetail.restricted_types:
+                if filter_field == 'type' and value in RRset.RESTRICTED_TYPES:
                     raise PermissionDenied("You cannot tinker with the %s RRset." % value)
 
                 rrsets = rrsets.filter(**{'%s__exact' % filter_field: value})
@@ -187,7 +186,7 @@ class RRsetList(generics.ListCreateAPIView):
 
     def create(self, request, *args, **kwargs):
         type_ = request.data.get('type', '')
-        if type_ in RRsetDetail.restricted_types:
+        if type_ in RRset.RESTRICTED_TYPES:
             raise PermissionDenied("You cannot tinker with the %s RRset." % type_)
 
         try: