index.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <?php
  2. use function Hestiacp\quoteshellarg\quoteshellarg;
  3. ob_start();
  4. $TAB = "DNS";
  5. // Main include
  6. include $_SERVER["DOCUMENT_ROOT"] . "/inc/main.php";
  7. // Check domain name
  8. if (empty($_GET["domain"])) {
  9. header("Location: /list/dns/");
  10. exit();
  11. }
  12. // Edit as someone else?
  13. if ($_SESSION["userContext"] === "admin" && !empty($_GET["user"])) {
  14. $user = quoteshellarg($_GET["user"]);
  15. $user_plain = htmlentities($_GET["user"]);
  16. }
  17. // List ip addresses
  18. exec(HESTIA_CMD . "v-list-user-ips " . $user . " json", $output, $return_var);
  19. $v_ips = json_decode(implode("", $output), true);
  20. unset($output);
  21. // List dns domain
  22. if (!empty($_GET["domain"]) && empty($_GET["record_id"])) {
  23. $v_domain = quoteshellarg($_GET["domain"]);
  24. exec(
  25. HESTIA_CMD . "v-list-dns-domain " . $user . " " . $v_domain . " json",
  26. $output,
  27. $return_var,
  28. );
  29. check_return_code_redirect($return_var, $output, "/list/dns/");
  30. $data = json_decode(implode("", $output), true);
  31. unset($output);
  32. // Parse dns domain
  33. $v_username = $user;
  34. $v_domain = $_GET["domain"];
  35. $v_ip = $data[$v_domain]["IP"];
  36. $v_template = $data[$v_domain]["TPL"];
  37. $v_ttl = $data[$v_domain]["TTL"];
  38. $v_dnssec = $data[$v_domain]["DNSSEC"];
  39. $v_exp = $data[$v_domain]["EXP"];
  40. $v_soa = $data[$v_domain]["SOA"];
  41. $v_date = $data[$v_domain]["DATE"];
  42. $v_time = $data[$v_domain]["TIME"];
  43. $v_suspended = $data[$v_domain]["SUSPENDED"];
  44. if ($v_suspended == "yes") {
  45. $v_status = "suspended";
  46. } else {
  47. $v_status = "active";
  48. }
  49. // List dns templates
  50. exec(HESTIA_CMD . "v-list-dns-templates json", $output, $return_var);
  51. $templates = json_decode(implode("", $output), true);
  52. unset($output);
  53. }
  54. // List dns record
  55. if (!empty($_GET["domain"]) && !empty($_GET["record_id"])) {
  56. $v_domain = quoteshellarg($_GET["domain"]);
  57. $v_record_id = quoteshellarg($_GET["record_id"]);
  58. exec(
  59. HESTIA_CMD . "v-list-dns-records " . $user . " " . $v_domain . " 'json'",
  60. $output,
  61. $return_var,
  62. );
  63. check_return_code_redirect($return_var, $output, "/list/dns/");
  64. $data = json_decode(implode("", $output), true);
  65. unset($output);
  66. // Parse dns record
  67. $v_username = $user;
  68. $v_domain = $_GET["domain"];
  69. $v_record_id = $_GET["record_id"];
  70. $v_rec = $data[$v_record_id]["RECORD"];
  71. $v_type = $data[$v_record_id]["TYPE"];
  72. $v_val = $data[$v_record_id]["VALUE"];
  73. $v_priority = $data[$v_record_id]["PRIORITY"];
  74. $v_suspended = $data[$v_record_id]["SUSPENDED"];
  75. if ($v_suspended == "yes") {
  76. $v_status = "suspended";
  77. } else {
  78. $v_status = "active";
  79. }
  80. $v_date = $data[$v_record_id]["DATE"];
  81. $v_time = $data[$v_record_id]["TIME"];
  82. $v_ttl = $data[$v_record_id]["TTL"];
  83. }
  84. // Check POST request for dns domain
  85. if (!empty($_POST["save"]) && !empty($_GET["domain"]) && empty($_GET["record_id"])) {
  86. $v_domain = quoteshellarg($_POST["v_domain"]);
  87. // Check token
  88. verify_csrf($_POST);
  89. // Change domain IP
  90. if ($v_ip != $_POST["v_ip"] && empty($_SESSION["error_msg"])) {
  91. $v_ip = quoteshellarg($_POST["v_ip"]);
  92. exec(
  93. HESTIA_CMD .
  94. "v-change-dns-domain-ip " .
  95. $user .
  96. " " .
  97. $v_domain .
  98. " " .
  99. $v_ip .
  100. " 'no'",
  101. $output,
  102. $return_var,
  103. );
  104. check_return_code($return_var, $output);
  105. $restart_dns = "yes";
  106. unset($output);
  107. }
  108. // Change domain template
  109. if ($v_template != $_POST["v_template"] && empty($_SESSION["error_msg"])) {
  110. $v_template = quoteshellarg($_POST["v_template"]);
  111. exec(
  112. HESTIA_CMD .
  113. "v-change-dns-domain-tpl " .
  114. $user .
  115. " " .
  116. $v_domain .
  117. " " .
  118. $v_template .
  119. " 'no'",
  120. $output,
  121. $return_var,
  122. );
  123. check_return_code($return_var, $output);
  124. unset($output);
  125. $restart_dns = "yes";
  126. }
  127. // Change SOA record
  128. if ($v_soa != $_POST["v_soa"] && empty($_SESSION["error_msg"])) {
  129. $v_soa = quoteshellarg($_POST["v_soa"]);
  130. exec(
  131. HESTIA_CMD .
  132. "v-change-dns-domain-soa " .
  133. $user .
  134. " " .
  135. $v_domain .
  136. " " .
  137. $v_soa .
  138. " 'no'",
  139. $output,
  140. $return_var,
  141. );
  142. check_return_code($return_var, $output);
  143. unset($output);
  144. $restart_dns = "yes";
  145. }
  146. // Change expiration date
  147. if ($v_exp != $_POST["v_exp"] && empty($_SESSION["error_msg"])) {
  148. $v_exp = quoteshellarg($_POST["v_exp"]);
  149. exec(
  150. HESTIA_CMD .
  151. "v-change-dns-domain-exp " .
  152. $user .
  153. " " .
  154. $v_domain .
  155. " " .
  156. $v_exp .
  157. " 'no'",
  158. $output,
  159. $return_var,
  160. );
  161. check_return_code($return_var, $output);
  162. unset($output);
  163. }
  164. // Change domain ttl
  165. if ($v_ttl != $_POST["v_ttl"] && empty($_SESSION["error_msg"])) {
  166. $v_ttl = quoteshellarg($_POST["v_ttl"]);
  167. exec(
  168. HESTIA_CMD .
  169. "v-change-dns-domain-ttl " .
  170. $user .
  171. " " .
  172. $v_domain .
  173. " " .
  174. $v_ttl .
  175. " 'no'",
  176. $output,
  177. $return_var,
  178. );
  179. check_return_code($return_var, $output);
  180. unset($output);
  181. $restart_dns = "yes";
  182. }
  183. // Change domain dnssec
  184. if ($_POST["v_dnssec"] == "" && $v_dnssec == "yes" && empty($_SESSION["error_msg"])) {
  185. exec(
  186. HESTIA_CMD . "v-change-dns-domain-dnssec " . $user . " " . $v_domain . " 'no'",
  187. $output,
  188. $return_var,
  189. );
  190. check_return_code($return_var, $output);
  191. unset($output);
  192. $v_dnssec = "no";
  193. $restart_dns = "yes";
  194. }
  195. // Change domain dnssec
  196. if ($_POST["v_dnssec"] == "yes" && $v_dnssec !== "yes" && empty($_SESSION["error_msg"])) {
  197. exec(
  198. HESTIA_CMD . "v-change-dns-domain-dnssec " . $user . " " . $v_domain . " 'yes'",
  199. $output,
  200. $return_var,
  201. );
  202. check_return_code($return_var, $output);
  203. unset($output);
  204. $v_dnssec = "yes";
  205. $restart_dns = "yes";
  206. }
  207. // Restart dns server
  208. if (!empty($restart_dns) && empty($_SESSION["error_msg"])) {
  209. exec(HESTIA_CMD . "v-restart-dns", $output, $return_var);
  210. check_return_code($return_var, $output);
  211. unset($output);
  212. }
  213. // Set success message
  214. if (empty($_SESSION["error_msg"])) {
  215. $_SESSION["ok_msg"] = _("Changes have been saved.");
  216. }
  217. // Restart dns server
  218. if (empty($_SESSION["error_msg"])) {
  219. exec(HESTIA_CMD . "v-restart-dns", $output, $return_var);
  220. check_return_code($return_var, $output);
  221. unset($output);
  222. }
  223. }
  224. // Check POST request for dns record
  225. if (!empty($_POST["save"]) && !empty($_GET["domain"]) && !empty($_GET["record_id"])) {
  226. // Check token
  227. verify_csrf($_POST);
  228. // Protect input
  229. $v_domain = quoteshellarg($_POST["v_domain"]);
  230. $v_record_id = quoteshellarg($_POST["v_record_id"]);
  231. // Change dns record
  232. if (
  233. $v_rec != $_POST["v_rec"] ||
  234. $v_type != $_POST["v_type"] ||
  235. $v_val != $_POST["v_val"] ||
  236. $v_priority != $_POST["v_priority"] ||
  237. ($v_ttl != $_POST["v_ttl"] && empty($_SESSION["error_msg"]))
  238. ) {
  239. $v_rec = quoteshellarg($_POST["v_rec"]);
  240. $v_type = quoteshellarg($_POST["v_type"]);
  241. $v_val = quoteshellarg($_POST["v_val"]);
  242. $v_priority = quoteshellarg($_POST["v_priority"]);
  243. $v_ttl = quoteshellarg($_POST["v_ttl"]);
  244. exec(
  245. HESTIA_CMD .
  246. "v-change-dns-record " .
  247. $user .
  248. " " .
  249. $v_domain .
  250. " " .
  251. $v_record_id .
  252. " " .
  253. $v_rec .
  254. " " .
  255. $v_type .
  256. " " .
  257. $v_val .
  258. " " .
  259. $v_priority .
  260. " yes " .
  261. $v_ttl,
  262. $output,
  263. $return_var,
  264. );
  265. check_return_code($return_var, $output);
  266. $v_rec = $_POST["v_rec"];
  267. $v_type = $_POST["v_type"];
  268. $v_val = $_POST["v_val"];
  269. unset($output);
  270. $restart_dns = "yes";
  271. }
  272. // Change dns record id
  273. if ($_GET["record_id"] != $_POST["v_record_id"] && empty($_SESSION["error_msg"])) {
  274. $v_old_record_id = quoteshellarg($_GET["record_id"]);
  275. exec(
  276. HESTIA_CMD .
  277. "v-change-dns-record-id " .
  278. $user .
  279. " " .
  280. $v_domain .
  281. " " .
  282. $v_old_record_id .
  283. " " .
  284. $v_record_id,
  285. $output,
  286. $return_var,
  287. );
  288. check_return_code($return_var, $output);
  289. unset($output);
  290. $restart_dns = "yes";
  291. }
  292. // Restart dns server
  293. if (!empty($restart_dns) && empty($_SESSION["error_msg"])) {
  294. exec(HESTIA_CMD . "v-restart-dns", $output, $return_var);
  295. check_return_code($return_var, $output);
  296. unset($output);
  297. }
  298. // Set success message
  299. if (empty($_SESSION["error_msg"])) {
  300. $_SESSION["ok_msg"] = _("Changes have been saved.");
  301. }
  302. // Change url if record id was changed
  303. if (empty($_SESSION["error_msg"]) && $_GET["record_id"] != $_POST["v_record_id"]) {
  304. header(
  305. "Location: /edit/dns/?domain=" .
  306. $_GET["domain"] .
  307. "&record_id=" .
  308. $_POST["v_record_id"],
  309. );
  310. exit();
  311. }
  312. }
  313. // Render page
  314. if (empty($_GET["record_id"])) {
  315. // Display body for dns domain
  316. render_page($user, $TAB, "edit_dns");
  317. } else {
  318. if (empty($data[$_GET["record_id"]])) {
  319. header("Location: /list/dns/");
  320. $_SESSION["error_msg"] = _("Error: unknown record ID.");
  321. }
  322. // Display body for dns record
  323. render_page($user, $TAB, "edit_dns_rec");
  324. }
  325. // Flush session messages
  326. unset($_SESSION["error_msg"]);
  327. unset($_SESSION["ok_msg"]);