index.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. use function Hestiacp\quoteshellarg\quoteshellarg;
  3. ob_start();
  4. $TAB = "WEB";
  5. // Main include
  6. include $_SERVER["DOCUMENT_ROOT"] . "/inc/main.php";
  7. // Check POST request
  8. if (!empty($_POST["ok"])) {
  9. // Check token
  10. verify_csrf($_POST);
  11. // Check for empty fields
  12. if (empty($_POST["v_domain"])) {
  13. $errors[] = _("Domain");
  14. }
  15. if (empty($_POST["v_ip"])) {
  16. $errors[] = _("IP Address");
  17. }
  18. if (!empty($errors[0])) {
  19. foreach ($errors as $i => $error) {
  20. if ($i == 0) {
  21. $error_msg = $error;
  22. } else {
  23. $error_msg = $error_msg . ", " . $error;
  24. }
  25. }
  26. $_SESSION["error_msg"] = sprintf(_('Field "%s" can not be blank.'), $error_msg);
  27. }
  28. // Set domain to lowercase and remove www prefix
  29. $v_domain = preg_replace("/^www\./i", "", $_POST["v_domain"]);
  30. $v_domain = strtolower($v_domain);
  31. // Define domain ip address
  32. $v_ip = quoteshellarg($_POST["v_ip"]);
  33. // Using public IP instead of internal IP when creating DNS
  34. // Gets public IP from 'v-list-user-ips' command (that reads /hestia/data/ips/ip), precisely from 'NAT' field
  35. $v_public_ip = $v_ip;
  36. $v_clean_ip = $_POST["v_ip"]; // clean_ip = IP without quotas
  37. exec(HESTIA_CMD . "v-list-user-ips " . $user . " json", $output, $return_var);
  38. $ips = json_decode(implode("", $output), true);
  39. unset($output);
  40. if (
  41. isset($ips[$v_clean_ip]) &&
  42. isset($ips[$v_clean_ip]["NAT"]) &&
  43. trim($ips[$v_clean_ip]["NAT"]) != ""
  44. ) {
  45. $v_public_ip = trim($ips[$v_clean_ip]["NAT"]);
  46. $v_public_ip = quoteshellarg($v_public_ip);
  47. }
  48. // Define domain aliases
  49. $v_aliases = "";
  50. // Define proxy extensions
  51. $_POST["v_proxy_ext"] = "";
  52. exec(HESTIA_CMD . "v-list-user " . $user . " json", $output, $return_var);
  53. $user_config = json_decode(implode("", $output), true);
  54. unset($output);
  55. $v_template = $user_config[$user_plain]["WEB_TEMPLATE"];
  56. $v_backend_template = $user_config[$user_plain]["BACKEND_TEMPLATE"];
  57. $v_proxy_template = $user_config[$user_plain]["PROXY_TEMPLATE"];
  58. // Add web domain
  59. if (empty($_SESSION["error_msg"])) {
  60. exec(
  61. HESTIA_CMD .
  62. "v-add-web-domain " .
  63. $user .
  64. " " .
  65. quoteshellarg($v_domain) .
  66. " " .
  67. $v_ip .
  68. " 'yes'",
  69. $output,
  70. $return_var,
  71. );
  72. check_return_code($return_var, $output);
  73. unset($output);
  74. $domain_added = empty($_SESSION["error_msg"]);
  75. }
  76. if (empty($_POST["v_dns"])) {
  77. $_POST["v_dns"] = "no";
  78. }
  79. if (empty($_POST["v_mail"])) {
  80. $_POST["v_mail"] = "no";
  81. }
  82. // Add DNS domain
  83. if ($_POST["v_dns"] == "on" && empty($_SESSION["error_msg"])) {
  84. exec(
  85. HESTIA_CMD .
  86. "v-add-dns-domain " .
  87. $user .
  88. " " .
  89. quoteshellarg($v_domain) .
  90. " " .
  91. $v_public_ip .
  92. " '' '' '' '' '' '' '' '' 'no'",
  93. $output,
  94. $return_var,
  95. );
  96. check_return_code($return_var, $output);
  97. unset($output);
  98. }
  99. // Add mail domain
  100. if ($_POST["v_mail"] == "on" && empty($_SESSION["error_msg"])) {
  101. exec(
  102. HESTIA_CMD . "v-add-mail-domain " . $user . " " . quoteshellarg($v_domain),
  103. $output,
  104. $return_var,
  105. );
  106. check_return_code($return_var, $output);
  107. unset($output);
  108. }
  109. // Flush field values on success
  110. if (empty($_SESSION["error_msg"])) {
  111. $_SESSION["ok_msg"] = htmlify_trans(
  112. sprintf(_("Domain {%s} has been created successfully."), htmlentities($v_domain)),
  113. "</a>",
  114. '<a href="/edit/web/?domain=' . htmlentities($v_domain) . '">',
  115. );
  116. unset($v_domain);
  117. unset($v_aliases);
  118. }
  119. }
  120. // Define user variables
  121. $v_aliases = "";
  122. // List user package
  123. exec(HESTIA_CMD . "v-list-user " . $user . " json", $output, $return_var);
  124. $user_config = json_decode(implode("", $output), true);
  125. unset($output);
  126. // List web templates and set default values
  127. exec(HESTIA_CMD . "v-list-web-templates json", $output, $return_var);
  128. $templates = json_decode(implode("", $output), true);
  129. unset($output);
  130. $v_template = !empty($_POST["v_template"])
  131. ? $_POST["v_template"]
  132. : $user_config[$user_plain]["WEB_TEMPLATE"];
  133. // List backend templates
  134. if (!empty($_SESSION["WEB_BACKEND"])) {
  135. exec(HESTIA_CMD . "v-list-web-templates-backend json", $output, $return_var);
  136. $backend_templates = json_decode(implode("", $output), true);
  137. unset($output);
  138. $v_backend_template = !empty($_POST["v_backend_template"])
  139. ? $_POST["v_backend_template"]
  140. : $user_config[$user_plain]["BACKEND_TEMPLATE"];
  141. }
  142. // List proxy templates
  143. if (!empty($_SESSION["PROXY_SYSTEM"])) {
  144. exec(HESTIA_CMD . "v-list-web-templates-proxy json", $output, $return_var);
  145. $proxy_templates = json_decode(implode("", $output), true);
  146. unset($output);
  147. $v_proxy_template = !empty($_POST["v_proxy_template"])
  148. ? $_POST["v_proxy_template"]
  149. : $user_config[$user_plain]["PROXY_TEMPLATE"];
  150. }
  151. // List IP addresses
  152. exec(HESTIA_CMD . "v-list-user-ips " . $user . " json", $output, $return_var);
  153. $ips = json_decode(implode("", $output), true);
  154. unset($output);
  155. // Get all user domains
  156. exec(HESTIA_CMD . "v-list-web-domains " . $user . " json", $output, $return_var);
  157. $user_domains = json_decode(implode("", $output), true);
  158. $user_domains = array_keys($user_domains);
  159. unset($output);
  160. $accept = $_GET["accept"] ?? "";
  161. $v_domain = $_POST["domain"] ?? "";
  162. // Render page
  163. render_page($user, $TAB, "add_web");
  164. // Flush session messages
  165. unset($_SESSION["error_msg"]);
  166. unset($_SESSION["ok_msg"]);