index.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. // Init
  3. error_reporting(NULL);
  4. ob_start();
  5. session_start();
  6. $TAB = 'PACKAGE';
  7. include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
  8. // Check user
  9. if ($_SESSION['user'] != 'admin') {
  10. header("Location: /list/user");
  11. exit;
  12. }
  13. // Check POST request
  14. if (!empty($_POST['ok'])) {
  15. // Check token
  16. if ((!isset($_POST['token'])) || ($_SESSION['token'] != $_POST['token'])) {
  17. header('location: /login/');
  18. exit;
  19. }
  20. // Check empty fields
  21. if (empty($_POST['v_package'])) $errors[] = __('package');
  22. if (empty($_POST['v_web_template'])) $errors[] = __('web template');
  23. if (!empty($_SESSION['WEB_BACKEND'])) {
  24. if (empty($_POST['v_backend_template'])) $errors[] = __('backend template');
  25. }
  26. if (!empty($_SESSION['PROXY_SYSTEM'])) {
  27. if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template');
  28. }
  29. if (empty($_POST['v_dns_template'])) $errors[] = __('dns template');
  30. if (empty($_POST['v_shell'])) $errrors[] = __('shell');
  31. if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains');
  32. if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases');
  33. if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains');
  34. if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records');
  35. if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains');
  36. if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts');
  37. if (!isset($_POST['v_databases'])) $errors[] = __('databases');
  38. if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs');
  39. if (!isset($_POST['v_backups'])) $errors[] = __('backups');
  40. if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota');
  41. if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth');
  42. if (empty($_POST['v_ns1'])) $errors[] = __('ns1');
  43. if (empty($_POST['v_ns2'])) $errors[] = __('ns2');
  44. if (!empty($errors[0])) {
  45. foreach ($errors as $i => $error) {
  46. if ( $i == 0 ) {
  47. $error_msg = $error;
  48. } else {
  49. $error_msg = $error_msg.", ".$error;
  50. }
  51. }
  52. $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
  53. }
  54. $v_package = $_POST['v_package'];
  55. $v_web_template = $_POST['v_web_template'];
  56. $v_backend_template = $_POST['v_backend_template'];
  57. $v_proxy_template = $_POST['v_proxy_template'];
  58. $v_dns_template = $_POST['v_dns_template'];
  59. $v_shell = $_POST['v_shell'];
  60. $v_web_domains = $_POST['v_web_domains'];
  61. $v_web_aliases = $_POST['v_web_aliases'];
  62. $v_dns_domains = $_POST['v_dns_domains'];
  63. $v_dns_records = $_POST['v_dns_records'];
  64. $v_mail_domains = $_POST['v_mail_domains'];
  65. $v_mail_accounts = $_POST['v_mail_accounts'];
  66. $v_databases = $_POST['v_databases'];
  67. $v_cron_jobs = $_POST['v_cron_jobs'];
  68. $v_backups = $_POST['v_backups'];
  69. $v_disk_quota = $_POST['v_disk_quota'];
  70. $v_bandwidth = $_POST['v_bandwidth'];
  71. $v_ns1 = trim($_POST['v_ns1'], '.');
  72. $v_ns2 = trim($_POST['v_ns2'], '.');
  73. $v_ns3 = trim($_POST['v_ns3'], '.');
  74. $v_ns4 = trim($_POST['v_ns4'], '.');
  75. $v_ns5 = trim($_POST['v_ns5'], '.');
  76. $v_ns6 = trim($_POST['v_ns6'], '.');
  77. $v_ns7 = trim($_POST['v_ns7'], '.');
  78. $v_ns8 = trim($_POST['v_ns8'], '.');
  79. $v_ns = $v_ns1.",".$v_ns2;
  80. if (!empty($v_ns3)) $v_ns .= ",".$v_ns3;
  81. if (!empty($v_ns4)) $v_ns .= ",".$v_ns4;
  82. if (!empty($v_ns5)) $v_ns .= ",".$v_ns5;
  83. if (!empty($v_ns6)) $v_ns .= ",".$v_ns6;
  84. if (!empty($v_ns7)) $v_ns .= ",".$v_ns7;
  85. if (!empty($v_ns8)) $v_ns .= ",".$v_ns8;
  86. $v_time = date('H:i:s');
  87. $v_date = date('Y-m-d');
  88. // Create temporary dir
  89. if (empty($_SESSION['error_msg'])) {
  90. exec('mktemp -d', $output, $return_var);
  91. $tmpdir = $output[0];
  92. check_return_code($return_var, $output);
  93. unset($output);
  94. }
  95. // Create package file
  96. if (empty($_SESSION['error_msg'])) {
  97. $a_pkg = [
  98. 'WEB_TEMPLATE' => $v_web_template,
  99. 'BACKEND_TEMPLATE' => !empty($_SESSION['WEB_BACKEND']) ? $v_backend_template : null,
  100. 'PROXY_TEMPLATE' => !empty($_SESSION['PROXY_SYSTEM']) ? $v_proxy_template : null,
  101. 'DNS_TEMPLATE' => $v_dns_template,
  102. 'WEB_DOMAINS' => $v_web_domains,
  103. 'WEB_ALIASES' => $v_web_aliases,
  104. 'DNS_DOMAINS' => $v_dns_domains,
  105. 'DNS_RECORDS' => $v_dns_records,
  106. 'MAIL_DOMAINS' => $v_mail_domains,
  107. 'MAIL_ACCOUNTS' => $v_mail_accounts,
  108. 'DATABASES' => $v_databases,
  109. 'CRON_JOBS' => $v_cron_jobs,
  110. 'DISK_QUOTA' => $v_disk_quota,
  111. 'BANDWIDTH' => $v_bandwidth,
  112. 'NS' => $v_ns,
  113. 'SHELL' => $v_shell,
  114. 'BACKUPS' => $v_backups,
  115. 'TIME' => $v_time,
  116. 'DATE' => $v_date,
  117. ];
  118. $pkg = '';
  119. foreach ($a_pkg as $key => $value) {
  120. if (is_null($value)) continue;
  121. $pkg .= $key . '=' . escapeshellarg($value) . "\n";
  122. }
  123. $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w');
  124. fwrite($fp, $pkg);
  125. fclose($fp);
  126. }
  127. // Add new package
  128. if (empty($_SESSION['error_msg'])) {
  129. v_exec('v-add-user-package', [$tmpdir, $v_package]);
  130. }
  131. // Remove tmpdir
  132. safe_exec('rm', ['-rf', $tmpdir]);
  133. // Flush field values on success
  134. if (empty($_SESSION['error_msg'])) {
  135. $_SESSION['ok_msg'] = __('PACKAGE_CREATED_OK', htmlentities($_POST['v_package']), htmlentities($_POST['v_package']));
  136. unset($v_package);
  137. }
  138. }
  139. // Header
  140. include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
  141. // Panel
  142. top_panel($user,$TAB);
  143. // List web temmplates
  144. v_exec('v-list-web-templates', ['json'], false, $output);
  145. $web_templates = json_decode($output, true);
  146. // List web templates for backend
  147. if (!empty($_SESSION['WEB_BACKEND'])) {
  148. v_exec('v-list-web-templates-backend', ['json'], false, $output);
  149. $backend_templates = json_decode($output, true);
  150. }
  151. // List web templates for proxy
  152. if (!empty($_SESSION['PROXY_SYSTEM'])) {
  153. v_exec('v-list-web-templates-proxy', ['json'], false, $output);
  154. $proxy_templates = json_decode($output, true);
  155. }
  156. // List DNS templates
  157. v_exec('v-list-dns-templates', ['json'], false, $output);
  158. $dns_templates = json_decode($output, true);
  159. // List system shells
  160. v_exec('v-list-sys-shells', ['json'], false, $output);
  161. $shells = json_decode($output, true);
  162. // Set default values
  163. if (empty($v_web_template)) $v_web_template = 'default';
  164. if (empty($v_backend_template)) $v_backend_template = 'default';
  165. if (empty($v_proxy_template)) $v_proxy_template = 'default';
  166. if (empty($v_dns_template)) $v_dns_template = 'default';
  167. if (empty($v_shell)) $v_shell = 'nologin';
  168. if (empty($v_web_domains)) $v_web_domains = '1';
  169. if (empty($v_web_aliases)) $v_web_aliases = '1';
  170. if (empty($v_dns_domains)) $v_dns_domains = '1';
  171. if (empty($v_dns_records)) $v_dns_records = '1';
  172. if (empty($v_mail_domains)) $v_mail_domains = '1';
  173. if (empty($v_mail_accounts)) $v_mail_accounts = '1';
  174. if (empty($v_databases)) $v_databases = '1';
  175. if (empty($v_cron_jobs)) $v_cron_jobs = '1';
  176. if (empty($v_backups)) $v_backups = '1';
  177. if (empty($v_disk_quota)) $v_disk_quota = '1000';
  178. if (empty($v_bandwidth)) $v_bandwidth = '1000';
  179. if (empty($v_ns1)) $v_ns1 = 'ns1.example.ltd';
  180. if (empty($v_ns2)) $v_ns2 = 'ns2.example.ltd';
  181. // Display body
  182. include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_package.html');
  183. // Flush session messages
  184. unset($_SESSION['error_msg']);
  185. unset($_SESSION['ok_msg']);
  186. // Footer
  187. include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');