]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
JSON API: add zone ids to search-data results 1330/head
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Wed, 12 Mar 2014 19:48:51 +0000 (20:48 +0100)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Wed, 12 Mar 2014 21:07:28 +0000 (22:07 +0100)
Otherwise clients need another round-trip to /zones to get those ids.

pdns/ws-auth.cc
regression-tests.api/test_Zones.py

index f0bc3d5dd0c9aa9652c6c9866372f66649619c67..0a86b704bdda5ea5edb5e8e94909af5b6b5ba60f 100644 (file)
@@ -745,12 +745,16 @@ static void apiServerSearchData(HttpRequest* req, HttpResponse* resp) {
   Comment comment;
 
   BOOST_FOREACH(const DomainInfo& di, domains) {
+    string zoneId = apiZoneNameToId(di.zone);
+
     if (di.zone.find(q) != string::npos) {
       Value object;
       object.SetObject();
       object.AddMember("type", "zone", doc.GetAllocator());
-      Value jname(di.zone.c_str(), doc.GetAllocator()); // copy
-      object.AddMember("name", jname, doc.GetAllocator());
+      Value jzoneId(zoneId.c_str(), doc.GetAllocator()); // copy
+      object.AddMember("zone_id", jzoneId, doc.GetAllocator());
+      Value jzoneName(di.zone.c_str(), doc.GetAllocator()); // copy
+      object.AddMember("name", jzoneName, doc.GetAllocator());
       doc.PushBack(object, doc.GetAllocator());
     }
 
@@ -770,6 +774,10 @@ static void apiServerSearchData(HttpRequest* req, HttpResponse* resp) {
       Value object;
       object.SetObject();
       object.AddMember("type", "record", doc.GetAllocator());
+      Value jzoneId(zoneId.c_str(), doc.GetAllocator()); // copy
+      object.AddMember("zone_id", jzoneId, doc.GetAllocator());
+      Value jzoneName(di.zone.c_str(), doc.GetAllocator()); // copy
+      object.AddMember("zone_name", jzoneName, doc.GetAllocator());
       Value jname(rr.qname.c_str(), doc.GetAllocator()); // copy
       object.AddMember("name", jname, doc.GetAllocator());
       Value jcontent(rr.content.c_str(), doc.GetAllocator()); // copy
@@ -785,6 +793,10 @@ static void apiServerSearchData(HttpRequest* req, HttpResponse* resp) {
       Value object;
       object.SetObject();
       object.AddMember("type", "comment", doc.GetAllocator());
+      Value jzoneId(zoneId.c_str(), doc.GetAllocator()); // copy
+      object.AddMember("zone_id", jzoneId, doc.GetAllocator());
+      Value jzoneName(di.zone.c_str(), doc.GetAllocator()); // copy
+      object.AddMember("zone_name", jzoneName, doc.GetAllocator());
       Value jname(comment.qname.c_str(), doc.GetAllocator()); // copy
       object.AddMember("name", jname, doc.GetAllocator());
       Value jcontent(comment.content.c_str(), doc.GetAllocator()); // copy
index 14a0b06dc8daab7a6d416e7bafd77d0e6e7ce607..78e9ed62cff4b1ad3547edc6c73d7b0465ad8cde 100644 (file)
@@ -498,7 +498,7 @@ class AuthZones(ApiTestCase):
         r = self.session.get(self.url("/servers/localhost/search-data?q=" + name))
         self.assertSuccessJson(r)
         print r.json()
-        self.assertEquals(r.json(), [{u'type': u'zone', u'name': name}])
+        self.assertEquals(r.json(), [{u'type': u'zone', u'name': name, u'zone_id': name+'.'}])
 
     def test_SearchRRSubstring(self):
         name = 'search-rr-zone.name'