]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
API: merge domain manipulation from create and update
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Tue, 8 Apr 2014 12:57:59 +0000 (14:57 +0200)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Tue, 8 Apr 2014 13:15:56 +0000 (15:15 +0200)
Remove code duplication.

pdns/ws-auth.cc

index 23580774bcb3e6889f878dc7ac5508a386d6544c..7d9d4b441c0e965090dbfd7e49316ed3bbf3a3fd 100644 (file)
@@ -370,6 +370,20 @@ void productServerStatisticsFetch(map<string,string>& out)
 
 static void patchZone(HttpRequest* req, HttpResponse* resp);
 
+static void updateDomainSettingsFromDocument(const DomainInfo& di, const string& zonename, Document& document) {
+  string master;
+  const Value &masters = document["masters"];
+  if (masters.IsArray()) {
+    for (SizeType i = 0; i < masters.Size(); ++i) {
+      master += masters[i].GetString();
+      master += " ";
+    }
+  }
+
+  di.backend->setKind(zonename, DomainInfo::stringToKind(stringFromJson(document, "kind")));
+  di.backend->setMaster(zonename, master);
+}
+
 static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
   UeberBackend B;
   if (req->method == "POST" && !::arg().mustDo("experimental-api-readonly")) {
@@ -386,25 +400,17 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
       zonename.resize(zonename.size()-1);
     }
 
-    string kind = stringFromJson(document, "kind");
-
     bool exists = B.getDomainInfo(zonename, di);
     if(exists)
       throw ApiException("Domain '"+zonename+"' already exists");
 
+    // validate 'kind' is set
+    stringFromJson(document, "kind");
+
     const Value &nameservers = document["nameservers"];
     if (!nameservers.IsArray() || nameservers.Size() == 0)
       throw ApiException("Need at least one nameserver");
 
-    string master;
-    const Value &masters = document["masters"];
-    if (masters.IsArray()) {
-      for (SizeType i = 0; i < masters.Size(); ++i) {
-        master += masters[i].GetString();
-        master += " ";
-      }
-    }
-
     // no going back after this
     if(!B.createDomain(zonename))
       throw ApiException("Creating domain '"+zonename+"' failed");
@@ -444,8 +450,7 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
     }
     di.backend->commitTransaction();
 
-    di.backend->setKind(zonename, DomainInfo::stringToKind(kind));
-    di.backend->setMaster(zonename, master);
+    updateDomainSettingsFromDocument(di, zonename, document);
 
     fillZone(zonename, resp);
     return;
@@ -500,17 +505,8 @@ static void apiServerZoneDetail(HttpRequest* req, HttpResponse* resp) {
     Document document;
     req->json(document);
 
-    string master;
-    const Value &masters = document["masters"];
-    if (masters.IsArray()) {
-      for(SizeType i = 0; i < masters.Size(); ++i) {
-        master += masters[i].GetString();
-        master += " ";
-      }
-    }
+    updateDomainSettingsFromDocument(di, zonename, document);
 
-    di.backend->setKind(zonename, DomainInfo::stringToKind(stringFromJson(document, "kind")));
-    di.backend->setMaster(zonename, master);
     fillZone(zonename, resp);
     return;
   }