]> granicus.if.org Git - pdns/commitdiff
webserver: add HttpResponse.setBody(json document)
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 31 Jan 2014 00:27:34 +0000 (01:27 +0100)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Mon, 3 Feb 2014 14:06:19 +0000 (15:06 +0100)
Convenience method.

pdns/webserver.cc
pdns/webserver.hh
pdns/ws-api.cc
pdns/ws-auth.cc
pdns/ws-recursor.cc

index 20bf17b5106e519f302f021631b88274fcf59f0d..0c18cd2ccb283b6b7899fcce0b9af467d342beb0 100644 (file)
@@ -45,6 +45,11 @@ void HttpRequest::json(rapidjson::Document& document)
   }
 }
 
+void HttpResponse::setBody(rapidjson::Document& document)
+{
+  this->body = makeStringFromDocument(document);
+}
+
 int WebServer::B64Decode(const std::string& strInput, std::string& strOutput)
 {
   return ::B64Decode(strInput, strOutput);
index 8aef0c47bfc33d5ca6d2cf3a49a51cfb9572479b..d56c1120d7c7eb2ccba65e18915dc7f4c9dbaca3 100644 (file)
@@ -49,6 +49,8 @@ public:
   HttpResponse() : YaHTTP::Response() { };
   HttpResponse(const YaHTTP::Request &req) : YaHTTP::Response(req) { };
   HttpResponse(const YaHTTP::Response &resp) : YaHTTP::Response(resp) { };
+
+  void setBody(rapidjson::Document& document);
 };
 
 
index da14b57492436c547c015ea8a332fa7856ffc5de..b0e097b3c227858ce1cc8c7ef0df600c864241a2 100644 (file)
@@ -97,7 +97,7 @@ void apiServer(HttpRequest* req, HttpResponse* resp) {
   Value server;
   fillServerDetail(server, doc.GetAllocator());
   doc.PushBack(server, doc.GetAllocator());
-  resp->body = makeStringFromDocument(doc);
+  resp->setBody(doc);
 }
 
 void apiServerDetail(HttpRequest* req, HttpResponse* resp) {
@@ -106,7 +106,7 @@ void apiServerDetail(HttpRequest* req, HttpResponse* resp) {
 
   Document doc;
   fillServerDetail(doc, doc.GetAllocator());
-  resp->body = makeStringFromDocument(doc);
+  resp->setBody(doc);
 }
 
 void apiServerConfig(HttpRequest* req, HttpResponse* resp) {
@@ -135,7 +135,7 @@ void apiServerConfig(HttpRequest* req, HttpResponse* resp) {
 
     doc.PushBack(jitem, doc.GetAllocator());
   }
-  resp->body = makeStringFromDocument(doc);
+  resp->setBody(doc);
 }
 
 static string logGrep(const string& q, const string& fname, const string& prefix)
@@ -220,5 +220,5 @@ void apiServerStatistics(HttpRequest* req, HttpResponse* resp) {
     doc.PushBack(jitem, doc.GetAllocator());
   }
 
-  resp->body = makeStringFromDocument(doc);
+  resp->setBody(doc);
 }
index d4a2f4871a7617a3f80a114be1bf558a5ac0697c..1db1a30f6319d4a808cde724d73282639ccb6f61 100644 (file)
@@ -271,11 +271,11 @@ void AuthWebServer::indexfunction(HttpRequest* req, HttpResponse* resp)
   resp->body = ret.str();
 }
 
-static string getZone(const string& zonename) {
+static void fillZone(const string& zonename, HttpResponse* resp) {
   UeberBackend B;
   DomainInfo di;
   if(!B.getDomainInfo(zonename, di))
-    return returnJsonError("Could not find domain '"+zonename+"'");
+    throw ApiException("Could not find domain '"+zonename+"'");
 
   Document doc;
   doc.SetObject();
@@ -321,7 +321,7 @@ static string getZone(const string& zonename) {
   }
   doc.AddMember("records", records, doc.GetAllocator());
 
-  return makeStringFromDocument(doc);
+  resp->setBody(doc);
 }
 
 void productServerStatisticsFetch(map<string,string>& out)
@@ -404,7 +404,7 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
     di.backend->setKind(zonename, DomainInfo::stringToKind(kind));
     di.backend->setMaster(zonename, master);
 
-    resp->body = getZone(zonename);
+    fillZone(zonename, resp);
     return;
   }
 
@@ -439,7 +439,7 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
     jdi.AddMember("last_check", (unsigned int) di.last_check, doc.GetAllocator());
     doc.PushBack(jdi, doc.GetAllocator());
   }
-  resp->body = makeStringFromDocument(doc);
+  resp->setBody(doc);
 }
 
 static void apiServerZoneDetail(HttpRequest* req, HttpResponse* resp) {
@@ -466,7 +466,7 @@ static void apiServerZoneDetail(HttpRequest* req, HttpResponse* resp) {
 
     di.backend->setKind(zonename, DomainInfo::stringToKind(stringFromJson(document, "kind")));
     di.backend->setMaster(zonename, master);
-    resp->body = getZone(zonename);
+    fillZone(zonename, resp);
     return;
   }
   else if(req->method == "DELETE") {
@@ -487,7 +487,7 @@ static void apiServerZoneDetail(HttpRequest* req, HttpResponse* resp) {
   if(req->method != "GET")
     throw HttpMethodNotAllowedException();
 
-  resp->body = getZone(zonename);
+  fillZone(zonename, resp);
 }
 
 static void apiServerZoneRRset(HttpRequest* req, HttpResponse* resp) {
index 657a04906041d5ed49591fa015a07f491327f1fa..53b4f10089a1484e1a0c1e50f2dd4fef1594bada 100644 (file)
@@ -98,7 +98,7 @@ void RecursorWebServer::jsonstat(HttpRequest* req, HttpResponse *resp)
 
       doc.PushBack(jzone, doc.GetAllocator());
     }
-    resp->body = makeStringFromDocument(doc);
+    resp->setBody(doc);
     return;
   }
   else if(command == "zone") {
@@ -143,7 +143,7 @@ void RecursorWebServer::jsonstat(HttpRequest* req, HttpResponse *resp)
       root.AddMember("records", records, doc.GetAllocator());
 
       doc.AddMember("zone", root, doc.GetAllocator());
-      resp->body = makeStringFromDocument(doc);
+      resp->setBody(doc);
       return;
     } else {
       resp->body = returnJsonError("Could not find domain '"+arg_zone+"'");