vpanel-stack/panel/classes/Panel/Vdns.php

119 lines
2.8 KiB
PHP

<?php
/**
* vpanel-stack
* https://git.stack-source.com/msb/vpanel-stack
* Copyright (c) 2022 Matthew Saunders Brown <matthewsaundersbrown@gmail.com>
* GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
*/
namespace Panel;
class Vdns extends \Panel {
function beforeRoute($f3) {
parent::beforeRoute($f3);
if ($f3->get('VDNSADMIN') != '1') {
$f3->reroute('/');
}
}
public static function verifyZoneExists($zone) {
global $f3;
exec("/usr/local/bin/vdns-zone-ext.sh -z $zone", $output, $result_code);
if ($result_code == 0 && $output[0] == 'true') {
return TRUE;
} else {
return FALSE;
}
}
public static function returnZoneDefaultsArray($zone) {
global $f3;
if ($defaults_array = $f3->call('\Panel::vGet', array("vdns-zone-def.sh -z $zone -c", FALSE))) {
return $defaults_array;
} else {
return FALSE;
}
}
public static function returnZoneDefaultsNameserverArray($zone) {
global $f3;
if ($defaults_array = $f3->call('\Panel\Vdns::returnZoneDefaultsArray', $zone)) {
$defaults_ns_array = array();
foreach($defaults_array as $record_array) {
if ($record_array['type'] == "NS") {
$defaults_ns_array[] = $record_array['content'];
}
}
sort($defaults_ns_array);
return $defaults_ns_array;
} else {
return FALSE;
}
}
public static function returnNameserverArray($zone) {
global $f3;
$ns_array = array();
if ($dns_ns_array = @dns_get_record("$zone", DNS_NS)) {
foreach ($dns_ns_array as $record_array) {
$ns_array[] = $record_array['target'];
}
sort($ns_array);
return $ns_array;
} else {
return FALSE;
}
}
public static function returnNameserverStatus($zone) {
global $f3;
if ($defaults_ns_array = $f3->call('\Panel\Vdns::returnZoneDefaultsNameserverArray', $zone)) {
if ($ns_array = $f3->call('\Panel\Vdns::returnNameserverArray', $zone)) {
if ($f3->get('VDNSADDITIONALVALIDNAMERVERS') != '' && is_array($f3->get('VDNSADDITIONALVALIDNAMERVERS'))) {
$defaults_ns_array = array_merge($defaults_ns_array, $f3->get('VDNSADDITIONALVALIDNAMERVERS'));
}
/* check for any nameserver match */
foreach ($ns_array as $k=>$v) {
if (in_array($v, $defaults_ns_array)) {
return "Verified";
}
}
/* not valid matches found, set pending */
return "Pending";
/* check for exact match */
// if ($defaults_ns_array === $ns_array) {
// return "Verified";
// } else {
// return "Pending";
// }
} else {
return "Unknown";
}
} else {
return "Error";
}
}
}