You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							356 lines
						
					
					
						
							8.4 KiB
						
					
					
				
			
		
		
	
	
							356 lines
						
					
					
						
							8.4 KiB
						
					
					
				<?php
 | 
						|
use function Hestiacp\quoteshellarg\quoteshellarg;
 | 
						|
 | 
						|
ob_start();
 | 
						|
$TAB = "DNS";
 | 
						|
 | 
						|
// Main include
 | 
						|
include $_SERVER["DOCUMENT_ROOT"] . "/inc/main.php";
 | 
						|
 | 
						|
// Check domain name
 | 
						|
if (empty($_GET["domain"])) {
 | 
						|
	header("Location: /list/dns/");
 | 
						|
	exit();
 | 
						|
}
 | 
						|
 | 
						|
// Edit as someone else?
 | 
						|
if ($_SESSION["userContext"] === "admin" && !empty($_GET["user"])) {
 | 
						|
	$user = quoteshellarg($_GET["user"]);
 | 
						|
	$user_plain = htmlentities($_GET["user"]);
 | 
						|
}
 | 
						|
 | 
						|
// List ip addresses
 | 
						|
exec(HESTIA_CMD . "v-list-user-ips " . $user . " json", $output, $return_var);
 | 
						|
$v_ips = json_decode(implode("", $output), true);
 | 
						|
unset($output);
 | 
						|
 | 
						|
// List dns domain
 | 
						|
if (!empty($_GET["domain"]) && empty($_GET["record_id"])) {
 | 
						|
	$v_domain = quoteshellarg($_GET["domain"]);
 | 
						|
	exec(
 | 
						|
		HESTIA_CMD . "v-list-dns-domain " . $user . " " . $v_domain . " json",
 | 
						|
		$output,
 | 
						|
		$return_var,
 | 
						|
	);
 | 
						|
	check_return_code_redirect($return_var, $output, "/list/dns/");
 | 
						|
	$data = json_decode(implode("", $output), true);
 | 
						|
	unset($output);
 | 
						|
 | 
						|
	// Parse dns domain
 | 
						|
	$v_username = $user;
 | 
						|
	$v_domain = $_GET["domain"];
 | 
						|
	$v_ip = $data[$v_domain]["IP"];
 | 
						|
	$v_template = $data[$v_domain]["TPL"];
 | 
						|
	$v_ttl = $data[$v_domain]["TTL"];
 | 
						|
	$v_dnssec = $data[$v_domain]["DNSSEC"];
 | 
						|
	$v_exp = $data[$v_domain]["EXP"];
 | 
						|
	$v_soa = $data[$v_domain]["SOA"];
 | 
						|
	$v_date = $data[$v_domain]["DATE"];
 | 
						|
	$v_time = $data[$v_domain]["TIME"];
 | 
						|
	$v_suspended = $data[$v_domain]["SUSPENDED"];
 | 
						|
	if ($v_suspended == "yes") {
 | 
						|
		$v_status = "suspended";
 | 
						|
	} else {
 | 
						|
		$v_status = "active";
 | 
						|
	}
 | 
						|
 | 
						|
	// List dns templates
 | 
						|
	exec(HESTIA_CMD . "v-list-dns-templates json", $output, $return_var);
 | 
						|
	$templates = json_decode(implode("", $output), true);
 | 
						|
	unset($output);
 | 
						|
}
 | 
						|
 | 
						|
// List dns record
 | 
						|
if (!empty($_GET["domain"]) && !empty($_GET["record_id"])) {
 | 
						|
	$v_domain = quoteshellarg($_GET["domain"]);
 | 
						|
	$v_record_id = quoteshellarg($_GET["record_id"]);
 | 
						|
	exec(
 | 
						|
		HESTIA_CMD . "v-list-dns-records " . $user . " " . $v_domain . " 'json'",
 | 
						|
		$output,
 | 
						|
		$return_var,
 | 
						|
	);
 | 
						|
	check_return_code_redirect($return_var, $output, "/list/dns/");
 | 
						|
	$data = json_decode(implode("", $output), true);
 | 
						|
	unset($output);
 | 
						|
	// Parse dns record
 | 
						|
	$v_username = $user;
 | 
						|
	$v_domain = $_GET["domain"];
 | 
						|
	$v_record_id = $_GET["record_id"];
 | 
						|
	$v_rec = $data[$v_record_id]["RECORD"];
 | 
						|
	$v_type = $data[$v_record_id]["TYPE"];
 | 
						|
	$v_val = $data[$v_record_id]["VALUE"];
 | 
						|
	$v_priority = $data[$v_record_id]["PRIORITY"];
 | 
						|
	$v_suspended = $data[$v_record_id]["SUSPENDED"];
 | 
						|
	if ($v_suspended == "yes") {
 | 
						|
		$v_status = "suspended";
 | 
						|
	} else {
 | 
						|
		$v_status = "active";
 | 
						|
	}
 | 
						|
	$v_date = $data[$v_record_id]["DATE"];
 | 
						|
	$v_time = $data[$v_record_id]["TIME"];
 | 
						|
	$v_ttl = $data[$v_record_id]["TTL"];
 | 
						|
}
 | 
						|
 | 
						|
// Check POST request for dns domain
 | 
						|
if (!empty($_POST["save"]) && !empty($_GET["domain"]) && empty($_GET["record_id"])) {
 | 
						|
	$v_domain = quoteshellarg($_POST["v_domain"]);
 | 
						|
 | 
						|
	// Check token
 | 
						|
	verify_csrf($_POST);
 | 
						|
 | 
						|
	// Change domain IP
 | 
						|
	if ($v_ip != $_POST["v_ip"] && empty($_SESSION["error_msg"])) {
 | 
						|
		$v_ip = quoteshellarg($_POST["v_ip"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-domain-ip " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_ip .
 | 
						|
				" 'no'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		$restart_dns = "yes";
 | 
						|
		unset($output);
 | 
						|
	}
 | 
						|
 | 
						|
	// Change domain template
 | 
						|
	if ($v_template != $_POST["v_template"] && empty($_SESSION["error_msg"])) {
 | 
						|
		$v_template = quoteshellarg($_POST["v_template"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-domain-tpl " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_template .
 | 
						|
				" 'no'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
 | 
						|
	// Change SOA record
 | 
						|
	if ($v_soa != $_POST["v_soa"] && empty($_SESSION["error_msg"])) {
 | 
						|
		$v_soa = quoteshellarg($_POST["v_soa"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-domain-soa " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_soa .
 | 
						|
				" 'no'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
 | 
						|
	// Change expiration date
 | 
						|
	if ($v_exp != $_POST["v_exp"] && empty($_SESSION["error_msg"])) {
 | 
						|
		$v_exp = quoteshellarg($_POST["v_exp"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-domain-exp " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_exp .
 | 
						|
				" 'no'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
	}
 | 
						|
 | 
						|
	// Change domain ttl
 | 
						|
	if ($v_ttl != $_POST["v_ttl"] && empty($_SESSION["error_msg"])) {
 | 
						|
		$v_ttl = quoteshellarg($_POST["v_ttl"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-domain-ttl " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_ttl .
 | 
						|
				" 'no'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
	// Change domain dnssec
 | 
						|
	if ($_POST["v_dnssec"] == "" && $v_dnssec == "yes" && empty($_SESSION["error_msg"])) {
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD . "v-change-dns-domain-dnssec " . $user . " " . $v_domain . " 'no'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
		$v_dnssec = "no";
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
 | 
						|
	// Change domain dnssec
 | 
						|
	if ($_POST["v_dnssec"] == "yes" && $v_dnssec !== "yes" && empty($_SESSION["error_msg"])) {
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD . "v-change-dns-domain-dnssec " . $user . " " . $v_domain . " 'yes'",
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
		$v_dnssec = "yes";
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
 | 
						|
	// Restart dns server
 | 
						|
	if (!empty($restart_dns) && empty($_SESSION["error_msg"])) {
 | 
						|
		exec(HESTIA_CMD . "v-restart-dns", $output, $return_var);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
	}
 | 
						|
 | 
						|
	// Set success message
 | 
						|
	if (empty($_SESSION["error_msg"])) {
 | 
						|
		$_SESSION["ok_msg"] = _("Changes have been saved.");
 | 
						|
	}
 | 
						|
	// Restart dns server
 | 
						|
	if (empty($_SESSION["error_msg"])) {
 | 
						|
		exec(HESTIA_CMD . "v-restart-dns", $output, $return_var);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Check POST request for dns record
 | 
						|
if (!empty($_POST["save"]) && !empty($_GET["domain"]) && !empty($_GET["record_id"])) {
 | 
						|
	// Check token
 | 
						|
	verify_csrf($_POST);
 | 
						|
 | 
						|
	// Protect input
 | 
						|
	$v_domain = quoteshellarg($_POST["v_domain"]);
 | 
						|
	$v_record_id = quoteshellarg($_POST["v_record_id"]);
 | 
						|
 | 
						|
	// Change dns record
 | 
						|
	if (
 | 
						|
		$v_rec != $_POST["v_rec"] ||
 | 
						|
		$v_type != $_POST["v_type"] ||
 | 
						|
		$v_val != $_POST["v_val"] ||
 | 
						|
		$v_priority != $_POST["v_priority"] ||
 | 
						|
		($v_ttl != $_POST["v_ttl"] && empty($_SESSION["error_msg"]))
 | 
						|
	) {
 | 
						|
		$v_rec = quoteshellarg($_POST["v_rec"]);
 | 
						|
		$v_type = quoteshellarg($_POST["v_type"]);
 | 
						|
		$v_val = quoteshellarg($_POST["v_val"]);
 | 
						|
		$v_priority = quoteshellarg($_POST["v_priority"]);
 | 
						|
		$v_ttl = quoteshellarg($_POST["v_ttl"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-record " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_record_id .
 | 
						|
				" " .
 | 
						|
				$v_rec .
 | 
						|
				" " .
 | 
						|
				$v_type .
 | 
						|
				" " .
 | 
						|
				$v_val .
 | 
						|
				" " .
 | 
						|
				$v_priority .
 | 
						|
				" yes " .
 | 
						|
				$v_ttl,
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		$v_rec = $_POST["v_rec"];
 | 
						|
		$v_type = $_POST["v_type"];
 | 
						|
		$v_val = $_POST["v_val"];
 | 
						|
		unset($output);
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
 | 
						|
	// Change dns record id
 | 
						|
	if ($_GET["record_id"] != $_POST["v_record_id"] && empty($_SESSION["error_msg"])) {
 | 
						|
		$v_old_record_id = quoteshellarg($_GET["record_id"]);
 | 
						|
		exec(
 | 
						|
			HESTIA_CMD .
 | 
						|
				"v-change-dns-record-id " .
 | 
						|
				$user .
 | 
						|
				" " .
 | 
						|
				$v_domain .
 | 
						|
				" " .
 | 
						|
				$v_old_record_id .
 | 
						|
				" " .
 | 
						|
				$v_record_id,
 | 
						|
			$output,
 | 
						|
			$return_var,
 | 
						|
		);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
		$restart_dns = "yes";
 | 
						|
	}
 | 
						|
 | 
						|
	// Restart dns server
 | 
						|
	if (!empty($restart_dns) && empty($_SESSION["error_msg"])) {
 | 
						|
		exec(HESTIA_CMD . "v-restart-dns", $output, $return_var);
 | 
						|
		check_return_code($return_var, $output);
 | 
						|
		unset($output);
 | 
						|
	}
 | 
						|
 | 
						|
	// Set success message
 | 
						|
	if (empty($_SESSION["error_msg"])) {
 | 
						|
		$_SESSION["ok_msg"] = _("Changes have been saved.");
 | 
						|
	}
 | 
						|
 | 
						|
	// Change url if record id was changed
 | 
						|
	if (empty($_SESSION["error_msg"]) && $_GET["record_id"] != $_POST["v_record_id"]) {
 | 
						|
		header(
 | 
						|
			"Location: /edit/dns/?domain=" .
 | 
						|
				$_GET["domain"] .
 | 
						|
				"&record_id=" .
 | 
						|
				$_POST["v_record_id"],
 | 
						|
		);
 | 
						|
		exit();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Render page
 | 
						|
if (empty($_GET["record_id"])) {
 | 
						|
	// Display body for dns domain
 | 
						|
	render_page($user, $TAB, "edit_dns");
 | 
						|
} else {
 | 
						|
	if (empty($data[$_GET["record_id"]])) {
 | 
						|
		header("Location: /list/dns/");
 | 
						|
		$_SESSION["error_msg"] = _("Error: unknown record ID.");
 | 
						|
	}
 | 
						|
	// Display body for dns record
 | 
						|
	render_page($user, $TAB, "edit_dns_rec");
 | 
						|
}
 | 
						|
 | 
						|
// Flush session messages
 | 
						|
unset($_SESSION["error_msg"]);
 | 
						|
unset($_SESSION["ok_msg"]);
 |