Browse Source

feat(api): return DS records as given by nslord's default-publish-cds

Peter Thomassen 4 years ago
parent
commit
12d7de0fbe
3 changed files with 15 additions and 9 deletions
  1. 7 6
      api/desecapi/pdns.py
  2. 1 2
      api/desecapi/tests/base.py
  3. 7 1
      test/e2e2/spec/test_api_domains.py

+ 7 - 6
api/desecapi/pdns.py

@@ -93,16 +93,17 @@ def get_keys(domain):
     """
     Retrieves a dict representation of the DNSSEC key information
     """
-    def _filter_ds(key):
-        key['ds'] = [ds for ds in key['ds'] if int(ds.split()[2]) in [2, 4]]
-        return key
-
     r = _pdns_get(NSLORD, '/zones/%s/cryptokeys' % pdns_id(domain.name))
     metrics.get('desecapi_pdns_keys_fetched').inc()
-    keys = [{k: key[k] for k in ('dnskey', 'ds', 'flags', 'keytype')}
+    field_map = {
+        'dnskey': 'dnskey',
+        'cds': 'ds',
+        'flags': 'flags',
+        'keytype': 'keytype',
+    }
+    return [{v: key[k] for k, v in field_map.items()}
              for key in r.json()
              if key['published'] and key['keytype'] in ['csk', 'ksk']]
-    return list(map(_filter_ds, keys))
 
 
 def get_zone(domain):

+ 1 - 2
api/desecapi/tests/base.py

@@ -439,8 +439,7 @@ class MockPDNSTestCase(APITestCase):
                     'bits': 256,
                     'dnskey': '257 3 13 EVBcsqrnOp6RGWtsrr9QW8cUtt/'
                               'WI5C81RcCZDTGNI9elAiMQlxRdnic+7V+b7jJDE2vgY08qAbxiNh5NdzkzA==',
-                    'ds': [
-                        '62745 13 1 642d70d9bb84903ca4c4ca08a6e4f1e9465aeaa6',
+                    'cds': [
                         '62745 13 2 5cddaeaa383e2ea7de49bd1212bf520228f0e3b334626517e5f6a68eb85b48f6',
                         '62745 13 4 b3f2565901ddcb0b78337301cf863d1045774377bca05c7ad69e17a167734b92'
                         '9f0a49b7edcca913eb6f5dfeac4645b8'

+ 7 - 1
test/e2e2/spec/test_api_domains.py

@@ -1,4 +1,4 @@
-from conftest import DeSECAPIV1Client, random_domainname
+from conftest import DeSECAPIV1Client, NSLordClient, random_domainname
 
 
 def test_create(api_user: DeSECAPIV1Client):
@@ -7,6 +7,12 @@ def test_create(api_user: DeSECAPIV1Client):
     assert len(api_user.domain_list()) == 1
 
 
+def test_get(api_user_domain: DeSECAPIV1Client):
+    domain = api_user_domain.get(f"/domains/{api_user_domain.domain}/").json()
+    assert NSLordClient.query(api_user_domain.domain, 'CDS')[1] == set(domain['keys'][0]['ds'])
+    assert domain['name'] == api_user_domain.domain
+
+
 def test_destroy(api_user_domain: DeSECAPIV1Client):
     n = len(api_user_domain.domain_list())
     assert api_user_domain.domain_destroy(api_user_domain.domain).status_code == 204