浏览代码

feat(api): allow reverse DNS domain name pattern

Peter Thomassen 8 年之前
父节点
当前提交
b6278652b6
共有 3 个文件被更改,包括 22 次插入1 次删除
  1. 16 0
      api/desecapi/tests/testdomains.py
  2. 5 0
      api/desecapi/tests/testrrsets.py
  3. 1 1
      api/desecapi/views.py

+ 16 - 0
api/desecapi/tests/testdomains.py

@@ -135,6 +135,22 @@ class AuthenticatedDomainTests(APITestCase):
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         self.assertEqual(len(mail.outbox), 0)
 
+    def testCanPostReverseDomains(self):
+        name = '0.8.0.0.0.1.c.a.2.4.6.0.c.e.e.d.4.4.0.1.a.0.1.0.8.f.4.0.1.0.a.2.ip6.arpa'
+
+        httpretty.enable()
+        httpretty.register_uri(httpretty.POST, settings.NSLORD_PDNS_API + '/zones', status=201)
+        httpretty.register_uri(httpretty.GET,
+                               settings.NSLORD_PDNS_API + '/zones/' + name + '.',
+                               body='{"rrsets": []}',
+                               content_type="application/json")
+
+        url = reverse('domain-list')
+        data = {'name': name}
+        response = self.client.post(url, data)
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+        self.assertEqual(len(mail.outbox), 0)
+
     def testCantPostDomainAlreadyTakenInAPI(self):
         url = reverse('domain-list')
 

+ 5 - 0
api/desecapi/tests/testrrsets.py

@@ -135,6 +135,11 @@ class AuthenticatedRRsetTests(APITestCase):
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(response.data['records'][0], '1.2.3.4')
 
+        url = reverse('rrsets', args=(self.ownedDomains[1].name,))
+        data = {'records': ['desec.io.'], 'ttl': 900, 'type': 'PTR'}
+        response = self.client.post(url, json.dumps(data), content_type='application/json')
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+
     def testCantPostRestrictedTypes(self):
         for type_ in self.restricted_types:
             url = reverse('rrsets', args=(self.ownedDomains[1].name,))

+ 1 - 1
api/desecapi/views.py

@@ -36,7 +36,7 @@ import ipaddress, os
 
 # TODO Generalize?
 patternDyn = re.compile(r'^[A-Za-z-][A-Za-z0-9_-]*\.dedyn\.io$')
-patternNonDyn = re.compile(r'^([A-Za-z-][A-Za-z0-9_-]*\.)+[A-Za-z]+$')
+patternNonDyn = re.compile(r'^([A-Za-z0-9-][A-Za-z0-9_-]*\.)+[A-Za-z]+$')
 
 
 def get_client_ip(request):