From: Peter van Dijk Date: Tue, 19 Oct 2021 10:22:56 +0000 (+0200) Subject: auth, rec: put some json on /api/v1 X-Git-Tag: rec-4.6.0-beta1~5^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd7759ce5b9f444756a047d7fe0983dcaa753d96;p=thirdparty%2Fpdns.git auth, rec: put some json on /api/v1 --- diff --git a/pdns/ws-api.cc b/pdns/ws-api.cc index cea1abd78e..470035386e 100644 --- a/pdns/ws-api.cc +++ b/pdns/ws-api.cc @@ -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(); diff --git a/pdns/ws-api.hh b/pdns/ws-api.hh index d242110afd..461411b1ac 100644 --- a/pdns/ws-api.hh +++ b/pdns/ws-api.hh @@ -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); diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index d1d06b037a..44df390012 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -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); } diff --git a/pdns/ws-recursor.cc b/pdns/ws-recursor.cc index 7ed7c7c893..2c58f79455 100644 --- a/pdns/ws-recursor.cc +++ b/pdns/ws-recursor.cc @@ -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) { diff --git a/regression-tests.api/test_Discovery.py b/regression-tests.api/test_Discovery.py index e790f4b33a..930c8d56b2 100644 --- a/regression-tests.api/test_Discovery.py +++ b/regression-tests.api/test_Discovery.py @@ -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}'}])