]> granicus.if.org Git - pdns/commitdiff
ws: move create domain into it's own function
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Sat, 5 Oct 2013 13:02:36 +0000 (15:02 +0200)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Mon, 14 Oct 2013 13:16:52 +0000 (15:16 +0200)
pdns/ws.cc

index f277191701dbca77ea2d96e6a471ed3457c0ba17..80c2bc0d826ac07916e5c3463ea383f0efb6e2ab 100644 (file)
@@ -333,6 +333,49 @@ static string getZone(const string& zonename) {
   return makeStringFromDocument(doc);
 }
 
+static string createZone(const string& zonename, varmap_t& varmap) {
+  UeberBackend B;
+  SOAData sd;
+  DomainInfo di;
+  sd.db = (DNSBackend*)-1;
+  if (B.getSOA(zonename, sd) && sd.db && B.getDomainInfo(zonename, di)) {
+    map<string, string> err;
+    err["error"] = "Domain '"+zonename+"' already exists";
+    return returnJSONObject(err);
+  }
+
+  if (!B.createDomain(zonename, &sd.db)) {
+    map<string, string> err;
+    err["error"] = "Creating domain '"+zonename+"' failed";
+    return returnJSONObject(err);
+  }
+
+  if(!B.getDomainInfo(zonename, di) || !di.backend) {
+    map<string, string> err;
+    err["error"] = "Creating domain '"+zonename+"' failed: lookup of domain_id failed";
+    return returnJSONObject(err);
+  }
+
+  di.backend->setKind(zonename, DomainInfo::stringToKind(varmap["kind"]));
+  di.backend->setMaster(zonename, varmap["master"]);
+
+  // create SOA record so zone "really" exists
+  DNSResourceRecord soa;
+  soa.qname = zonename;
+  soa.content = "1";
+  soa.qtype = "SOA";
+  soa.domain_id = di.id;
+  soa.auth = 0;
+  soa.ttl = ::arg().asNum( "default-ttl" );
+  soa.priority = 0;
+
+  sd.db->startTransaction(zonename, di.id);
+  sd.db->feedRecord(soa);
+  sd.db->commitTransaction();
+
+  return getZone(zonename);
+}
+
 static string jsonDispatch(const string& method, const string& post, varmap_t& varmap, const string& command) {
   if(command=="get") {
     if(varmap.empty()) {
@@ -526,45 +569,7 @@ static string jsonDispatch(const string& method, const string& post, varmap_t& v
       return getZone(zonename);
     } else if (method == "POST") {
       // create
-      UeberBackend B;
-      SOAData sd;
-      DomainInfo di;
-      sd.db = (DNSBackend*)-1;
-      if(B.getSOA(zonename, sd) && sd.db && B.getDomainInfo(zonename, di)) {
-        map<string, string> err;
-        err["error"] = "Domain '"+zonename+"' already exists";
-        return returnJSONObject(err);
-      }
-
-      if (!B.createDomain(zonename, &sd.db)) {
-        map<string, string> err;
-        err["error"] = "Creating domain '"+zonename+"' failed";
-        return returnJSONObject(err);
-      }
-
-      if(!B.getDomainInfo(zonename, di) || !di.backend) {
-        map<string, string> err;
-        err["error"] = "Creating domain '"+zonename+"' failed: lookup of domain_id failed";
-        return returnJSONObject(err);
-      }
-
-      di.backend->setKind(zonename, DomainInfo::stringToKind(varmap["kind"]));
-      di.backend->setMaster(zonename, varmap["master"]);
-
-      DNSResourceRecord soa;
-      soa.qname = zonename;
-      soa.content = "1";
-      soa.qtype = "SOA";
-      soa.domain_id = di.id;
-      soa.auth = 0;
-      soa.ttl = ::arg().asNum( "default-ttl" );;
-      soa.priority = 0;
-
-      sd.db->startTransaction(zonename, di.id);
-      sd.db->feedRecord(soa);
-      sd.db->commitTransaction();
-
-      return getZone(zonename);
+      return createZone(zonename, varmap);
     } else if (method == "DELETE") {
       // delete
       UeberBackend B;