We can now import, create AND delete zones

This commit is contained in:
Mark Schouten 2016-08-03 15:14:27 +02:00
parent c8774fc05e
commit 2cc92e6842
2 changed files with 37 additions and 39 deletions

View file

@ -12,6 +12,7 @@ class Zone {
$this->soa_edit_api = ''; $this->soa_edit_api = '';
$this->keyinfo = ''; $this->keyinfo = '';
$this->account = ''; $this->account = '';
$this->zone = false;
$this->nameservers = Array(); $this->nameservers = Array();
$this->rrsets = Array(); $this->rrsets = Array();
$this->masters = Array(); $this->masters = Array();
@ -49,6 +50,10 @@ class Zone {
} }
} }
public function importdata($data) {
$this->zone = $data;
}
public function setkeyinfo($info) { public function setkeyinfo($info) {
$this->keyinfo = $info; $this->keyinfo = $info;
} }
@ -162,21 +167,24 @@ class Zone {
public function export() { public function export() {
$ret = Array(); $ret = Array();
$ret['account'] = $this->account; $ret['account'] = $this->account;
$ret['nameservers'] = $this->nameservers;
$ret['kind'] = $this->kind;
$ret['name'] = $this->name;
$ret['soa_edit'] = $this->soa_edit;
$ret['soa_edit_api'] = $this->soa_edit_api;
if ($this->zone) {
$ret['zone'] = $this->zone;
return $ret;
}
$ret['dnssec'] = $this->dnssec; $ret['dnssec'] = $this->dnssec;
if ($this->dnssec) { if ($this->dnssec) {
$ret['keyinfo'] = $this->keyinfo; $ret['keyinfo'] = $this->keyinfo;
} }
$ret['id'] = $this->id; $ret['id'] = $this->id;
$ret['kind'] = $this->kind;
$ret['masters'] = $this->masters; $ret['masters'] = $this->masters;
$ret['name'] = $this->name;
if (count($this->nameservers) > 0) {
$ret['nameservers'] = $this->nameservers;
}
$ret['rrsets'] = $this->export_rrsets(); $ret['rrsets'] = $this->export_rrsets();
$ret['serial'] = $this->serial; $ret['serial'] = $this->serial;
$ret['soa_edit'] = $this->soa_edit;
$ret['soa_edit_api'] = $this->soa_edit_api;
$ret['url'] = $this->url; $ret['url'] = $this->url;
return $ret; return $ret;

View file

@ -318,6 +318,14 @@ case "listrecords":
jtable_respond($records); jtable_respond($records);
break; break;
case "delete":
$zone = $api->loadzone($_POST['id']);
$api->deletezone($_POST['id']);
delete_db_zone($zone['name']);
jtable_respond(null, 'delete');
break;
case "create": case "create":
$zonename = isset($_POST['name']) ? $_POST['name'] : ''; $zonename = isset($_POST['name']) ? $_POST['name'] : '';
@ -334,39 +342,29 @@ case "create":
jtable_respond(null, 'error', "Not enough data"); jtable_respond(null, 'error', "Not enough data");
} }
$createOptions = array( $zone = new Zone();
'name' => $zonename, $zone->setkind($zonekind);
'kind' => $zonekind, $zone->setname($zonename);
);
$nameservers = array();
foreach($_POST['nameserver'] as $ns) {
if (isset($ns) && !empty($ns)) {
array_push($nameservers, $ns);
}
}
if ($zonekind != "Slave") { if ($zonekind != "Slave") {
$createOptions['nameservers'] = $nameservers; if (!isset($_POST['zone']) or isset($_POST['owns'])) {
if (!isset($_POST['zone'])) { foreach ($_POST['nameserver'] as $ns) {
if (0 == count($nameservers)) { $zone->addnameserver($ns);
jtable_respond(null, 'error', "Require nameservers");
} }
} else { } else {
$createOptions['zone'] = $_POST['zone']; $zone->importdata($_POST['zone']);
} }
if (isset($defaults['soa_edit_api'])) { if (isset($defaults['soa_edit_api'])) {
$createOptions['soa_edit_api'] = $defaults['soa_edit_api']; $zone->setsoaeditapi($defaults['soa_edit_api']);
} }
if (isset($defaults['soa_edit'])) { if (isset($defaults['soa_edit'])) {
$createOptions['soa_edit'] = $defaults['soa_edit']; $zone->setsoaedit($defaults['soa_edit']);
} }
} else { // Slave } else { // Slave
if (isset($_POST['masters'])) { if (isset($_POST['masters'])) {
$createOptions['masters'] = preg_split('/[,;\s]+/', $_POST['masters'], null, PREG_SPLIT_NO_EMPTY); foreach (preg_split('/[,;\s]+/', $_POST['masters'], null, PREG_SPLIT_NO_EMPTY) as $master) {
} $zone->addmaster($master);
if (0 == count($createOptions['masters'])) { }
jtable_respond(null, 'error', "Slave requires master servers");
} }
} }
@ -376,8 +374,8 @@ case "create":
jtable_respond(null, 'error', 'Zone already owned by someone else'); jtable_respond(null, 'error', 'Zone already owned by someone else');
} }
$zone = zones_api_request($createOptions); $zone = $api->savezone($zone->export());
$zonename = $zone['name']; $zonename = $zone->name;
if (is_adminuser() && isset($_POST['owner'])) { if (is_adminuser() && isset($_POST['owner'])) {
add_db_zone($zonename, $_POST['owner']); add_db_zone($zonename, $_POST['owner']);
@ -454,14 +452,6 @@ case "update":
jtable_respond($newZone, 'single'); jtable_respond($newZone, 'single');
break; break;
case "delete":
$zone = $api->loadzone($_POST['id']);
$api->deletezone($_POST['id']);
delete_db_zone($zone['name']);
jtable_respond(null, 'delete');
break;
case "createrecord": case "createrecord":
$zone = get_zone_by_url(isset($_GET['zoneurl']) ? $_GET['zoneurl'] : ''); $zone = get_zone_by_url(isset($_GET['zoneurl']) ? $_GET['zoneurl'] : '');
$record = create_record($zone, $_POST); $record = create_record($zone, $_POST);