diff --git a/library/NGNPro/Records/DnsZones.php b/library/NGNPro/Records/DnsZones.php index 255d7e2..c372e53 100644 --- a/library/NGNPro/Records/DnsZones.php +++ b/library/NGNPro/Records/DnsZones.php @@ -1,863 +1,903 @@ array( 'type'=>'integer', 'help' => 'Zone owner' ) ); var $Fields = array( 'customer' => array( 'type' => 'integer', 'help' => 'Zone owner' ), 'serial' => array( 'type' => 'integer', 'help' => 'Serial number', 'readonly' => 1 ), 'email' => array( 'type' => 'string', 'help' => 'Administrator address' ), 'ttl' => array( 'type' => 'integer', 'help' => 'Time to live of SOA record' ), 'minimum' => array( 'type' => 'integer', 'help' => 'Default time to live period' ), 'retry' => array( 'type' => 'integer', 'help' => 'Retry transfer period' ), 'expire' => array( 'type' => 'integer', 'help' => 'Expire period' ), 'info' => array( 'type' => 'string', 'help' => 'Zone description' ) ); public function __construct($SoapEngine) { dprint("init DnsZones"); $this->filters = array( 'name' => trim($_REQUEST['name_filter']), 'info' => trim($_REQUEST['info_filter']) ); parent::__construct($SoapEngine); $this->sortElements = array( 'changeDate' => 'Change date', 'name' => 'Name' ); $this->Fields['nameservers'] = array( 'type'=>'text', 'name'=>'Name servers', 'help'=>'Authoritative name servers' ); } function showAfterEngineSelection() { if ($this->SoapEngine->name_servers) { //printf(" Available name servers: %s", $this->SoapEngine->name_servers); } } function listRecords() { $this->showSeachForm(); // Filter $filter = array( 'name' => $this->filters['name'], 'info' => $this->filters['info'], 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); // Range $range = array( 'start' => intval($this->next), 'count' => intval($this->maxrowsperpage) ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; $orderBy = array('attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query = array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getZones'); $result = $this->SoapEngine->soapclient->getZones($Query); if ($this->checkLogSoapError($result, true)) { return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print <<< END
Id | Owner | Zone | Administrator | Info | Serial | Default TTL | Change date | Actions | |
---|---|---|---|---|---|---|---|---|---|
%s | %s.%s | %s | %s | %s | Records | %s | %s | %s | %s |
Please press on Confirm to confirm the delete. "; return true; } if (!strlen($this->filters['name'])) { print "
Error: missing Dns zone name "; return false; } $name = $this->filters['name']; $function = array( 'commit' => array( 'name' => 'deleteZone', 'parameters' => array($name), 'logs' => array( 'success' => sprintf('Dns zone %s has been deleted', $this->filters['name']) ) ) ); unset($this->filters); $result = $this->SoapEngine->execute($function, $this->html); if ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } function showAddForm() { if ($this->selectionActive) return; printf( "
"; } function addRecord($dictionary = array()) { $name = trim($_REQUEST['name']); $info = trim($_REQUEST['info']); $name_servers = trim($_REQUEST['name_servers']); if ($_FILES['import_file']['tmp_name']) { $content = fread(fopen($_FILES['import_file']['tmp_name'], "r"), $_FILES['import_file']['size']); //print_r($content); if (!$imported_data = json_decode($content, true)) { printf("Error: reading imported data. "); return false; } //print_r($imported_data); if (!in_array('dns_zones', array_keys($imported_data))) { printf("
Error: Missing zones in imported data. "); return false; } if (!in_array('dns_records', array_keys($imported_data))) { return false; printf("
Error: Missing records in imported data. "); } foreach ($imported_data['customers'] as $customer) { // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth); $customer['credit'] = floatval($customer['credit']); $customer['balance'] = floatval($customer['balance']); // Call function $this->log_action('addAccount'); $result = $this->SoapEngine->soapclientCustomers->addAccount($customer); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); if ($error_fault->detail->exception->errorcode == 5001) { $result = $this->SoapEngine->soapclientCustomers->updateCustomer($customer); if (!$this->checkLogSoapError($result, true, true)) { printf('
Customer %s has been updated', $customer['id']); } } else { - $log = sprintf("SOAP request error from %s: %s (%s): %s", $this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); + $log = sprintf( + "SOAP request error from %s: %s (%s): %s", + $this->SoapEngine->SOAPurl, + $error_msg, + $error_fault->detail->exception->errorcode, + $error_fault->detail->exception->errorstring + ); syslog(LOG_NOTICE, $log); printf("
Error: $log"); } } else { printf('
Customer %s has been added', $customer['id']); } } $name_servers = array(); foreach ($imported_data['dns_zones'] as $zone) { flush(); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('addZone'); $result = $this->SoapEngine->soapclient->addZone($zone); $name_servers[$zone['name']] = $zone['nameservers']; if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); if ($error_fault->detail->exception->errorcode == 7001) { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('updateZone'); $result = $this->SoapEngine->soapclient->updateZone($zone); if (!$this->checkLogSoapError($result, true, true)) { printf('
Zone %s has been updated', $zone['name']); } } else { - $log = sprintf("SOAP request error from %s: %s (%s): %s", $this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); + $log = sprintf( + "SOAP request error from %s: %s (%s): %s", + $this->SoapEngine->SOAPurl, + $error_msg, + $error_fault->detail->exception->errorcode, + $error_fault->detail->exception->errorstring + ); syslog(LOG_NOTICE, $log); printf("
Error: $log"); } } else { printf('
Zone %s has been added', $zone['name']); } } $added = 0; $updated = 0; foreach ($imported_data['dns_records'] as $record) { flush(); if (in_array($record['name'], $name_servers[$record['zone']]) && $record['type'] == "A") { continue; } $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('addRecord'); $result = $this->SoapEngine->soapclient->addRecord($record); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); if ($error_fault->detail->exception->errorcode == 7003) { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('updateRecord'); $result = $this->SoapEngine->soapclient->updateRecord($record); if (!$this->checkLogSoapError($result, true, true)) { $added += 1; } } else { $log = sprintf( "SOAP request error from %s: %s (%s): %s", $this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring ); syslog(LOG_NOTICE, $log); printf("
Error: $log"); } } else { $added += 1; } } printf('
%d DNS records added and %d updated', $added, $updated); return true; } else { if (isset($this->SoapEngine->allow_none_local_dns_zones)) { $allow_none_local_dns_zones = $this->SoapEngine->allow_none_local_dns_zones; } else { $allow_none_local_dns_zones = false; } if (!strlen($name)) { printf("
Error: Missing zone name.
"); return false; } $lookup1 = dns_get_record($name); //dprint_r($lookup1); $ns_array1=explode(" ", trim($this->SoapEngine->name_servers)); if (empty($lookup1) || $allow_none_local_dns_zones) { $valid = 1; } else { $valid = 0; foreach ($lookup1 as $lrecord) { if ($lrecord['type'] == 'NS') { if (in_array($lrecord['target'], $ns_array1)) { $valid = 1 ; } } } } if ($valid==0) { printf("Error: DNS zone already exists on other server. Please contact our support if you plan to transfer this DNS zone to this system.
"); return false; } if (is_numeric($prefix)) { printf("Error: Numeric zone names are not allowed. Use ENUM port instead. "); return false; } list($customer, $reseller)=$this->customerFromLogin($dictionary); if (!trim($_REQUEST['ttl'])) { $ttl=3600; } else { $ttl = intval(trim($_REQUEST['ttl'])); } if ($name_servers) { $ns_array = explode(" ", trim($name_servers)); } elseif ($this->login_credentials['login_type'] != 'admin' && $this->SoapEngine->name_servers) { $ns_array = explode(" ", trim($this->SoapEngine->name_servers)); } else { $ns_array = array(); } $zone = array( 'name' => $name, 'ttl' => $ttl, 'info' => $info, 'customer' => intval($customer), 'reseller' => intval($reseller), 'nameservers' => $ns_array ); $function = array('commit' => array('name' => 'addZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('DNS zone %s has been added', $name))) ); $result = $this->SoapEngine->execute($function, $this->html); dprint_r($result); if ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } } function showSeachFormCustom() { printf( "
Updating zone %s...", $_REQUEST['name_filter']);
$filter = array('name' => $_REQUEST['name_filter']);
if (!$zone = $this->getRecord($filter)) {
return false;
}
$zone_old = $zone;
foreach (array_keys($this->Fields) as $item) {
$var_name = $item.'_form';
//printf(" |