]> granicus.if.org Git - pdns/commitdiff
API: move returnJsonMessage, returnJsonError to HttpResponse
authorChristian Hofstaedtler <christian.hofstaedtler@deduktiva.com>
Mon, 28 Dec 2015 12:09:46 +0000 (13:09 +0100)
committerChristian Hofstaedtler <christian.hofstaedtler@deduktiva.com>
Tue, 29 Dec 2015 22:29:18 +0000 (23:29 +0100)
pdns/json.cc
pdns/json.hh
pdns/webserver.cc
pdns/webserver.hh
pdns/ws-auth.cc
pdns/ws-recursor.cc

index 0e58c0a86ffa60455902354b13d1f875a1c01f68..1a94536caf9b56cfc86885e865e3f0d6b1cdfc77 100644 (file)
@@ -179,23 +179,3 @@ string makeStringFromDocument(const Document& doc)
   doc.Accept(w);
   return string(output.GetString(), output.Size());
 }
-
-string returnJsonError(const string& error)
-{
-  Document doc;
-  doc.SetObject();
-  Value jerror(error.c_str(), doc.GetAllocator()); // copy
-  doc.AddMember("error", jerror, doc.GetAllocator());
-  return makeStringFromDocument(doc);
-}
-
-/* success response */
-string returnJsonMessage(const string& message)
-{
-  Document doc;
-  doc.SetObject();
-  Value jmessage;
-  jmessage.SetString(message.c_str());
-  doc.AddMember("result", jmessage, doc.GetAllocator());
-  return makeStringFromDocument(doc);
-}
index 72df628412f2be1f9e69c1d74b58fed8e93dfee0..6da395f1bfa3ff0e2fc7be155a058a9becff5e2b 100644 (file)
@@ -27,8 +27,6 @@
 #include "rapidjson/document.h"
 #include "json11.hpp"
 
-std::string returnJsonError(const std::string& error);
-std::string returnJsonMessage(const std::string& message);
 std::string makeStringFromDocument(const rapidjson::Document& doc);
 int intFromJson(const rapidjson::Value& container, const char* key);
 int intFromJson(const rapidjson::Value& container, const char* key, const int default_value);
index a6c4ffe7b4dcf09be8d9ab10a517349cb193cdb6..3d6cfdd732d13eac38c7861fd67b14774da3b6be 100644 (file)
@@ -107,6 +107,18 @@ void HttpResponse::setBody(const json11::Json& document)
   document.dump(this->body);
 }
 
+void HttpResponse::setErrorResult(const std::string& message, const int status)
+{
+  setBody(json11::Json::object { { "error", message } });
+  this->status = status;
+}
+
+void HttpResponse::setSuccessResult(const std::string& message, const int status)
+{
+  setBody(json11::Json::object { { "result", message } });
+  this->status = status;
+}
+
 static void bareHandlerWrapper(WebServer::HandlerFunction handler, YaHTTP::Request* req, YaHTTP::Response* resp)
 {
   // wrapper to convert from YaHTTP::* to our subclasses
@@ -166,12 +178,10 @@ static void apiWrapper(WebServer::HandlerFunction handler, HttpRequest* req, Htt
     resp->status = 200;
     handler(req, resp);
   } catch (ApiException &e) {
-    resp->body = returnJsonError(e.what());
-    resp->status = 422;
+    resp->setErrorResult(e.what(), 422);
     return;
   } catch (JsonException &e) {
-    resp->body = returnJsonError(e.what());
-    resp->status = 422;
+    resp->setErrorResult(e.what(), 422);
     return;
   }
 
@@ -281,7 +291,7 @@ HttpResponse WebServer::handleRequest(HttpRequest req)
       resp.body = "<!html><title>" + what + "</title><h1>" + what + "</h1>";
     } else if (req.accept_json) {
       resp.headers["Content-Type"] = "application/json";
-      resp.body = returnJsonError(what);
+      resp.setErrorResult(what, resp.status);
     } else {
       resp.headers["Content-Type"] = "text/plain; charset=utf-8";
       resp.body = what;
index c02489cbd1ead99e73e4deea9007fd190d900328..7038b0d83dc04d106e9524bbfbf76ffa59096e1e 100644 (file)
@@ -57,6 +57,8 @@ public:
 
   void setBody(rapidjson::Document& document);
   void setBody(const json11::Json& document);
+  void setErrorResult(const std::string& message, const int status);
+  void setSuccessResult(const std::string& message, const int status = 200);
 };
 
 
index b9781aefa7a7d13e7f9fef02cfba758274c5afd7..ba3f2c880dd794affc0e10af8541b4bc40978236 100644 (file)
@@ -798,7 +798,7 @@ static void apiServerZoneAxfrRetrieve(HttpRequest* req, HttpResponse* resp) {
 
   random_shuffle(di.masters.begin(), di.masters.end());
   Communicator.addSuckRequest(zonename, di.masters.front());
-  resp->body = returnJsonMessage("Added retrieval request for '"+zonename.toString()+"' from master "+di.masters.front());
+  resp->setSuccessResult("Added retrieval request for '"+zonename.toString()+"' from master "+di.masters.front());
 }
 
 static void apiServerZoneNotify(HttpRequest* req, HttpResponse* resp) {
@@ -815,7 +815,7 @@ static void apiServerZoneNotify(HttpRequest* req, HttpResponse* resp) {
   if(!Communicator.notifyDomain(zonename))
     throw ApiException("Failed to add to the queue - see server log");
 
-  resp->body = returnJsonMessage("Notification queued");
+  resp->setSuccessResult("Notification queued");
 }
 
 static void makePtr(const DNSResourceRecord& rr, DNSResourceRecord* ptr) {
index c5665031c3798fe335e178c8e1115a36575f2d1c..cc32213554cffc1d6f61595003925cf191c420b8 100644 (file)
@@ -499,8 +499,7 @@ void RecursorWebServer::jsonstat(HttpRequest* req, HttpResponse *resp)
     resp->setBody(Json::object { { "entries", entries } });
     return;
   } else {
-    resp->status = 404;
-    resp->body = returnJsonError("Command '"+command+"' not found");
+    resp->setErrorResult("Command '"+command+"' not found", 404);
   }
 }