From 2cc92e6842536925fa6484461e6a7d414bf0e976 Mon Sep 17 00:00:00 2001 From: Mark Schouten Date: Wed, 3 Aug 2016 15:14:27 +0200 Subject: [PATCH] We can now import, create AND delete zones --- includes/class/Zone.php | 22 +++++++++++------ zones.php | 54 +++++++++++++++++------------------------ 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/includes/class/Zone.php b/includes/class/Zone.php index cd800be..f6aebd2 100644 --- a/includes/class/Zone.php +++ b/includes/class/Zone.php @@ -12,6 +12,7 @@ class Zone { $this->soa_edit_api = ''; $this->keyinfo = ''; $this->account = ''; + $this->zone = false; $this->nameservers = Array(); $this->rrsets = Array(); $this->masters = Array(); @@ -49,6 +50,10 @@ class Zone { } } + public function importdata($data) { + $this->zone = $data; + } + public function setkeyinfo($info) { $this->keyinfo = $info; } @@ -162,21 +167,24 @@ class Zone { public function export() { $ret = Array(); $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; if ($this->dnssec) { $ret['keyinfo'] = $this->keyinfo; } $ret['id'] = $this->id; - $ret['kind'] = $this->kind; $ret['masters'] = $this->masters; - $ret['name'] = $this->name; - if (count($this->nameservers) > 0) { - $ret['nameservers'] = $this->nameservers; - } $ret['rrsets'] = $this->export_rrsets(); $ret['serial'] = $this->serial; - $ret['soa_edit'] = $this->soa_edit; - $ret['soa_edit_api'] = $this->soa_edit_api; $ret['url'] = $this->url; return $ret; diff --git a/zones.php b/zones.php index 1dfdcf5..c6e18da 100644 --- a/zones.php +++ b/zones.php @@ -318,6 +318,14 @@ case "listrecords": jtable_respond($records); break; +case "delete": + $zone = $api->loadzone($_POST['id']); + $api->deletezone($_POST['id']); + + delete_db_zone($zone['name']); + jtable_respond(null, 'delete'); + break; + case "create": $zonename = isset($_POST['name']) ? $_POST['name'] : ''; @@ -334,39 +342,29 @@ case "create": jtable_respond(null, 'error', "Not enough data"); } - $createOptions = array( - 'name' => $zonename, - 'kind' => $zonekind, - ); - - $nameservers = array(); - foreach($_POST['nameserver'] as $ns) { - if (isset($ns) && !empty($ns)) { - array_push($nameservers, $ns); - } - } + $zone = new Zone(); + $zone->setkind($zonekind); + $zone->setname($zonename); if ($zonekind != "Slave") { - $createOptions['nameservers'] = $nameservers; - if (!isset($_POST['zone'])) { - if (0 == count($nameservers)) { - jtable_respond(null, 'error', "Require nameservers"); + if (!isset($_POST['zone']) or isset($_POST['owns'])) { + foreach ($_POST['nameserver'] as $ns) { + $zone->addnameserver($ns); } } else { - $createOptions['zone'] = $_POST['zone']; + $zone->importdata($_POST['zone']); } 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'])) { - $createOptions['soa_edit'] = $defaults['soa_edit']; + $zone->setsoaedit($defaults['soa_edit']); } } else { // Slave if (isset($_POST['masters'])) { - $createOptions['masters'] = preg_split('/[,;\s]+/', $_POST['masters'], null, PREG_SPLIT_NO_EMPTY); - } - if (0 == count($createOptions['masters'])) { - jtable_respond(null, 'error', "Slave requires master servers"); + foreach (preg_split('/[,;\s]+/', $_POST['masters'], null, PREG_SPLIT_NO_EMPTY) as $master) { + $zone->addmaster($master); + } } } @@ -376,8 +374,8 @@ case "create": jtable_respond(null, 'error', 'Zone already owned by someone else'); } - $zone = zones_api_request($createOptions); - $zonename = $zone['name']; + $zone = $api->savezone($zone->export()); + $zonename = $zone->name; if (is_adminuser() && isset($_POST['owner'])) { add_db_zone($zonename, $_POST['owner']); @@ -454,14 +452,6 @@ case "update": jtable_respond($newZone, 'single'); break; -case "delete": - $zone = $api->loadzone($_POST['id']); - $api->deletezone($_POST['id']); - - delete_db_zone($zone['name']); - jtable_respond(null, 'delete'); - break; - case "createrecord": $zone = get_zone_by_url(isset($_GET['zoneurl']) ? $_GET['zoneurl'] : ''); $record = create_record($zone, $_POST);