]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth, rec: put some json on /api/v1
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Tue, 19 Oct 2021 10:22:56 +0000 (12:22 +0200)
committerOtto <otto.moerbeek@open-xchange.com>
Fri, 5 Nov 2021 12:40:35 +0000 (13:40 +0100)
pdns/ws-api.cc
pdns/ws-api.hh
pdns/ws-auth.cc
pdns/ws-recursor.cc
regression-tests.api/test_Discovery.py

index cea1abd78e40536d3d7e492dc150c201e1ac2597..470035386e9eafa642eab4dccb731ee37829164d 100644 (file)
@@ -117,6 +117,20 @@ void apiDiscovery(HttpRequest* req, HttpResponse* resp) {
   resp->setJsonBody(doc);
 }
 
+void apiDiscoveryV1(HttpRequest* req, HttpResponse* resp) {
+  if(req->method != "GET")
+    throw HttpMethodNotAllowedException();
+
+  Json version1 = Json::object {
+    { "server_url", "/api/v1/servers{/server}" },
+    { "api_features", Json::array {} }
+  };
+  Json doc = Json::array { version1 };
+
+  resp->setJsonBody(doc);
+
+}
+
 void apiServer(HttpRequest* req, HttpResponse* resp) {
   if(req->method != "GET")
     throw HttpMethodNotAllowedException();
index d242110afda80747b92b76298696513cdbe9eb15..461411b1ace2410c33d5970312867105595a111f 100644 (file)
@@ -24,6 +24,7 @@
 #include "webserver.hh"
 
 void apiDiscovery(HttpRequest* req, HttpResponse* resp);
+void apiDiscoveryV1(HttpRequest* req, HttpResponse* resp);
 void apiServer(HttpRequest* req, HttpResponse* resp);
 void apiServerDetail(HttpRequest* req, HttpResponse* resp);
 void apiServerConfig(HttpRequest* req, HttpResponse* resp);
index d1d06b037a20930713802e358f6a9f29b52374b8..44df390012e4c97b71c6b03c452980dedc7476b8 100644 (file)
@@ -2354,6 +2354,7 @@ void AuthWebServer::webThread()
       d_ws->registerApiHandler("/api/v1/servers/localhost/zones", &apiServerZones);
       d_ws->registerApiHandler("/api/v1/servers/localhost", &apiServerDetail);
       d_ws->registerApiHandler("/api/v1/servers", &apiServer);
+      d_ws->registerApiHandler("/api/v1", &apiDiscoveryV1);
       d_ws->registerApiHandler("/api/docs", &apiDocs);
       d_ws->registerApiHandler("/api", &apiDiscovery);
     }
index 7ed7c7c893e7431db6a6a4f1d613b47cebd4b582..2c58f794554afce204bb1268ce7d42e91ea9781d 100644 (file)
@@ -1161,6 +1161,7 @@ RecursorWebServer::RecursorWebServer(FDMultiplexer* fdm)
   d_ws->registerApiHandler("/api/v1/servers/localhost/zones", &apiServerZones);
   d_ws->registerApiHandler("/api/v1/servers/localhost", &apiServerDetail, true);
   d_ws->registerApiHandler("/api/v1/servers", &apiServer);
+  d_ws->registerApiHandler("/api/v1", &apiDiscoveryV1);
   d_ws->registerApiHandler("/api", &apiDiscovery);
 
   for (const auto& u : g_urlmap) {
index e790f4b33aa108fb512bad92a544ab5d8798c449..930c8d56b28dc0e0192826f7950aad1ef8b36682 100644 (file)
@@ -8,3 +8,8 @@ class DiscoveryTest(ApiTestCase):
         self.assert_success_json(r)
         lst = r.json()
         self.assertEqual(lst, [{'version': 1, 'url': '/api/v1'}])
+
+        r = self.session.get(self.url("/api/v1"))
+        self.assert_success_json(r)
+        lst = r.json()
+        self.assertEqual(lst, [{'api_features': [], 'server_url': '/api/v1/servers{/server}'}])