Advertisement
Guest User

Bukget in Bgpanel

a guest
Aug 30th, 2014
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.88 KB | None | 0 0
  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5. * LICENSE:
  6. * This program is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. *
  19. *
  20. * @categories Games/Entertainment, Systems Administration
  21. * @package Bright Game Panel
  22. * @author warhawk3407 <warhawk3407@gmail.com> @NOSPAM
  23. * @copyleft 2013
  24. * @license GNU General Public License version 3.0 (GPLv3)
  25. * @version (Release 0) DEVELOPER BETA 9
  26. * @link http://www.bgpanel.net/
  27. */
  28.  
  29.  
  30.  
  31. $return = TRUE;
  32.  
  33.  
  34. require("configuration.php");
  35. require("include.php");
  36. require("./includes/func.ssh2.inc.php");
  37. require_once("./libs/phpseclib/Crypt/AES.php");
  38.  
  39.  
  40. if (isset($_POST['task']))
  41. {
  42. $task = mysql_real_escape_string($_POST['task']);
  43. }
  44. else if (isset($_GET['task']))
  45. {
  46. $task = mysql_real_escape_string($_GET['task']);
  47. }
  48.  
  49.  
  50. switch (@$task)
  51. {
  52. case 'addBukkitPlug':
  53. require_once("./libs/phpseclib/SFTP.php");
  54. ###
  55. $serverid = $_GET['serverid'];
  56. ###
  57. $error = '';
  58. ###
  59. if (empty($serverid))
  60. {
  61. $error .= T_('No ServerID specified !');
  62. }
  63. else
  64. {
  65. if (!is_numeric($serverid))
  66. {
  67. $error .= T_('Invalid ServerID. ');
  68. }
  69. else if (query_numrows( "SELECT `name` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" ) == 0)
  70. {
  71. $error .= T_('Invalid ServerID. ');
  72. }
  73. }
  74.  
  75. $ch = curl_init();
  76. curl_setopt($ch, CURLOPT_URL,"http://api.bukget.org/3/plugins/bukkit/".$_GET['id']."/latest");
  77. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  78. curl_setopt($ch, CURLOPT_USERAGENT, 'RedstonePower (BGP custom)');
  79. $server_output = curl_exec($ch);
  80.  
  81. curl_close ($ch);
  82.  
  83. $info = json_decode($server_output, true);
  84.  
  85. if(empty($info) || !empty($info['error']))
  86. {
  87. $error .= $info['error'];
  88. }
  89.  
  90. ###
  91. if (!empty($error))
  92. {
  93. $_SESSION['msg1'] = T_('Validation Error!');
  94. $_SESSION['msg2'] = $error;
  95. $_SESSION['msg-type'] = 'error';
  96. unset($error);
  97. header( 'Location: server.php' );
  98. die();
  99. }
  100. ###
  101. $status = query_fetch_assoc( "SELECT `status` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" );
  102. if ($status['status'] == 'Inactive')
  103. {
  104. $_SESSION['msg1'] = T_('Validation Error!');
  105. $_SESSION['msg2'] = T_('The server has been disabled.');
  106. $_SESSION['msg-type'] = 'error';
  107. header( 'Location: server.php' );
  108. die();
  109. }
  110. else if ($status['status'] == 'Pending')
  111. {
  112. $_SESSION['msg1'] = T_('Validation Error!');
  113. $_SESSION['msg2'] = T_('The server is pending.');
  114. $_SESSION['msg-type'] = 'error';
  115. header( 'Location: server.php' );
  116. die();
  117. }
  118. ###
  119. $server = query_fetch_assoc( "SELECT * FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."' LIMIT 1" );
  120. $box = query_fetch_assoc( "SELECT `ip`, `login`, `password`, `sshport`, `path` FROM `".DBPREFIX."box` WHERE `boxid` = '".$server['boxid']."' LIMIT 1" );
  121. ###
  122. // Rights
  123. $checkGroup = checkClientGroup($server['groupid'], $_SESSION['clientid']);
  124. if ($checkGroup == FALSE)
  125. {
  126. $_SESSION['msg1'] = T_('Error!');
  127. $_SESSION['msg2'] = T_('This is not your server!');
  128. $_SESSION['msg-type'] = 'error';
  129. header( 'Location: index.php' );
  130. die();
  131. }
  132. ###
  133. $aes = new Crypt_AES();
  134. $aes->setKeyLength(256);
  135. $aes->setKey(CRYPT_KEY);
  136.  
  137. // Get SFTP
  138. $sftp = new Net_SFTP($box['ip'], $box['sshport']);
  139. if (!$sftp->login($box['login'], $aes->decrypt($box['password'])))
  140. {
  141. $_SESSION['msg1'] = T_('Connection Error!');
  142. $_SESSION['msg2'] = '';
  143. $_SESSION['msg-type'] = 'error';
  144. header( "Location: server.php?id=".urlencode($serverid) );
  145. die();
  146. }
  147.  
  148. //$sftp->exec('');
  149. $query = 'wget --content-disposition -nv -q -o /dev/null -N -P "'.dirname($server['path']).'/plugins/" '.$info['versions'][0]['download'].' ;';
  150.  
  151. $uid = substr(uniqid(), 6, 8);
  152. $repopath = $box['path'].'/game-repositories/bukkitplugs/';
  153.  
  154.  
  155. $query .= "rm ".$repopath.'.cachescript ; ';
  156. $query .= "rm ".$repopath.'.cacheuid ; ';
  157.  
  158. $sftp->exec( "echo \"".addslashes($query)."\" > ".$repopath.'.cachescript ; chmod +x '.$repopath.'.cachescript' ); // Create install script
  159. $sftp->exec( 'screen -AdmS BukkitInstaller.Operation.'.$uid.' sh '.$repopath.'.cachescript' ); // Start cooking...
  160. $sftp->exec( "echo \"".$uid."\" > ".$repopath.'.cacheuid' ); // Store screen uid
  161.  
  162. $sftp->disconnect();
  163.  
  164. //Adding event to the database
  165. $message = mysql_real_escape_string($server['name']).' : plugin added: '.$info['plugin_name'];
  166. query_basic( "INSERT INTO `".DBPREFIX."log` SET `serverid` = '".$serverid."', `message` = '".$message."', `name` = '".$_SESSION['clientfirstname']." ".$_SESSION['clientlastname']."', `ip` = '".$_SERVER['REMOTE_ADDR']."'" );
  167. ###
  168. $_SESSION['msg1'] = T_('Plugin Successfully added! (Might take a moment to show up)');
  169. $_SESSION['msg2'] = T_('Plugin jar').' : '.htmlspecialchars($info['versions'][0]['filename'], ENT_QUOTES);
  170. $_SESSION['msg-type'] = 'success';
  171. header( "Location: server.php?id=".urlencode($serverid) );
  172. die();
  173. break;
  174.  
  175. case 'rmBukkitPlug':
  176. require_once("./libs/phpseclib/SFTP.php");
  177. ###
  178. $serverid = $_GET['serverid'];
  179. ###
  180. $error = '';
  181. ###
  182. if (empty($serverid))
  183. {
  184. $error .= T_('No ServerID specified !');
  185. }
  186. else
  187. {
  188. if (!is_numeric($serverid))
  189. {
  190. $error .= T_('Invalid ServerID. ');
  191. }
  192. else if (query_numrows( "SELECT `name` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" ) == 0)
  193. {
  194. $error .= T_('Invalid ServerID. ');
  195. }
  196. }
  197.  
  198. $ch = curl_init();
  199. curl_setopt($ch, CURLOPT_URL,"http://api.bukget.org/3/plugins/bukkit/".$_GET['id']."/latest");
  200. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  201. curl_setopt($ch, CURLOPT_USERAGENT, 'RedstonePower (BGP custom)');
  202. $server_output = curl_exec($ch);
  203.  
  204. curl_close ($ch);
  205.  
  206. $info = json_decode($server_output, true);
  207.  
  208. if(empty($info) || !empty($info['error']))
  209. {
  210. $error .= $info['error'];
  211. }
  212.  
  213. ###
  214. if (!empty($error))
  215. {
  216. $_SESSION['msg1'] = T_('Validation Error!');
  217. $_SESSION['msg2'] = $error;
  218. $_SESSION['msg-type'] = 'error';
  219. unset($error);
  220. header( 'Location: server.php' );
  221. die();
  222. }
  223. ###
  224. $status = query_fetch_assoc( "SELECT `status` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" );
  225. if ($status['status'] == 'Inactive')
  226. {
  227. $_SESSION['msg1'] = T_('Validation Error!');
  228. $_SESSION['msg2'] = T_('The server has been disabled.');
  229. $_SESSION['msg-type'] = 'error';
  230. header( 'Location: server.php' );
  231. die();
  232. }
  233. else if ($status['status'] == 'Pending')
  234. {
  235. $_SESSION['msg1'] = T_('Validation Error!');
  236. $_SESSION['msg2'] = T_('The server is pending.');
  237. $_SESSION['msg-type'] = 'error';
  238. header( 'Location: server.php' );
  239. die();
  240. }
  241. ###
  242. $server = query_fetch_assoc( "SELECT * FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."' LIMIT 1" );
  243. $box = query_fetch_assoc( "SELECT `ip`, `login`, `password`, `sshport` FROM `".DBPREFIX."box` WHERE `boxid` = '".$server['boxid']."' LIMIT 1" );
  244. ###
  245. // Rights
  246. $checkGroup = checkClientGroup($server['groupid'], $_SESSION['clientid']);
  247. if ($checkGroup == FALSE)
  248. {
  249. $_SESSION['msg1'] = T_('Error!');
  250. $_SESSION['msg2'] = T_('This is not your server!');
  251. $_SESSION['msg-type'] = 'error';
  252. header( 'Location: index.php' );
  253. die();
  254. }
  255. ###
  256. $aes = new Crypt_AES();
  257. $aes->setKeyLength(256);
  258. $aes->setKey(CRYPT_KEY);
  259.  
  260. // Get SFTP
  261. $sftp = new Net_SFTP($box['ip'], $box['sshport']);
  262. if (!$sftp->login($box['login'], $aes->decrypt($box['password'])))
  263. {
  264. $_SESSION['msg1'] = T_('Connection Error!');
  265. $_SESSION['msg2'] = '';
  266. $_SESSION['msg-type'] = 'error';
  267. header( "Location: server.php?id=".urlencode($serverid) );
  268. die();
  269. }
  270.  
  271. $sftp->delete(dirname($server['path']) . "/plugins/".$info['versions'][0]['filename']);
  272.  
  273. $sftp->disconnect();
  274.  
  275. //Adding event to the database
  276. $message = mysql_real_escape_string($server['name']).' : plugins deleted: '.$info['plugin_name'];
  277. query_basic( "INSERT INTO `".DBPREFIX."log` SET `serverid` = '".$serverid."', `message` = '".$message."', `name` = '".$_SESSION['clientfirstname']." ".$_SESSION['clientlastname']."', `ip` = '".$_SERVER['REMOTE_ADDR']."'" );
  278. ###
  279. $_SESSION['msg1'] = T_('Plugin Successfully deleted!');
  280. $_SESSION['msg2'] = T_('Plugin jar').' : '.htmlspecialchars($info['versions'][0]['filename'], ENT_QUOTES);
  281. $_SESSION['msg-type'] = 'success';
  282. header( "Location: server.php?id=".urlencode($serverid) );
  283. die();
  284. break;
  285.  
  286. case 'getserverlog':
  287. require_once("./libs/phpseclib/SFTP.php");
  288. ###
  289. $serverid = $_GET['serverid'];
  290. ###
  291. $error = '';
  292. ###
  293. if (empty($serverid))
  294. {
  295. $error .= T_('No ServerID specified !');
  296. }
  297. else
  298. {
  299. if (!is_numeric($serverid))
  300. {
  301. $error .= T_('Invalid ServerID. ');
  302. }
  303. else if (query_numrows( "SELECT `name` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" ) == 0)
  304. {
  305. $error .= T_('Invalid ServerID. ');
  306. }
  307. }
  308. ###
  309. if (!empty($error))
  310. {
  311. $_SESSION['msg1'] = T_('Validation Error!');
  312. $_SESSION['msg2'] = $error;
  313. $_SESSION['msg-type'] = 'error';
  314. unset($error);
  315. header( 'Location: server.php' );
  316. die();
  317. }
  318. ###
  319. $status = query_fetch_assoc( "SELECT `status` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" );
  320. if ($status['status'] == 'Inactive')
  321. {
  322. $_SESSION['msg1'] = T_('Validation Error!');
  323. $_SESSION['msg2'] = T_('The server has been disabled.');
  324. $_SESSION['msg-type'] = 'error';
  325. header( 'Location: server.php' );
  326. die();
  327. }
  328. else if ($status['status'] == 'Pending')
  329. {
  330. $_SESSION['msg1'] = T_('Validation Error!');
  331. $_SESSION['msg2'] = T_('The server is pending.');
  332. $_SESSION['msg-type'] = 'error';
  333. header( 'Location: server.php' );
  334. die();
  335. }
  336. ###
  337. $server = query_fetch_assoc( "SELECT * FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."' LIMIT 1" );
  338. $box = query_fetch_assoc( "SELECT `ip`, `login`, `password`, `sshport` FROM `".DBPREFIX."box` WHERE `boxid` = '".$server['boxid']."' LIMIT 1" );
  339. ###
  340. // Rights
  341. $checkGroup = checkClientGroup($server['groupid'], $_SESSION['clientid']);
  342. if ($checkGroup == FALSE)
  343. {
  344. $_SESSION['msg1'] = T_('Error!');
  345. $_SESSION['msg2'] = T_('This is not your server!');
  346. $_SESSION['msg-type'] = 'error';
  347. header( 'Location: index.php' );
  348. die();
  349. }
  350. ###
  351. $aes = new Crypt_AES();
  352. $aes->setKeyLength(256);
  353. $aes->setKey(CRYPT_KEY);
  354.  
  355. // Get SFTP
  356. $sftp = new Net_SFTP($box['ip'], $box['sshport']);
  357. if (!$sftp->login($box['login'], $aes->decrypt($box['password'])))
  358. {
  359. $_SESSION['msg1'] = T_('Connection Error!');
  360. $_SESSION['msg2'] = '';
  361. $_SESSION['msg-type'] = 'error';
  362. header( "Location: server.php?id=".urlencode($serverid) );
  363. die();
  364. }
  365.  
  366. $log = $sftp->get( dirname($server['path']).'/screenlog.0' );
  367.  
  368. $sftp->disconnect();
  369.  
  370. //Adding event to the database
  371. $message = mysql_real_escape_string($server['name']).' : screenlog downloaded';
  372. query_basic( "INSERT INTO `".DBPREFIX."log` SET `serverid` = '".$serverid."', `message` = '".$message."', `name` = '".$_SESSION['clientfirstname']." ".$_SESSION['clientlastname']."', `ip` = '".$_SERVER['REMOTE_ADDR']."'" );
  373. ###
  374. header('Content-type: text/plain');
  375. header('Content-Disposition: attachment; filename="'.$server['screen'].'_'.date('Y-m-d').'.screenlog"');
  376. echo $log;
  377. ###
  378. die();
  379. break;
  380.  
  381. case 'serverstart':
  382. require_once("./libs/gameinstaller/gameinstaller.php");
  383. ###
  384. $serverid = $_GET['serverid'];
  385. ###
  386. $error = '';
  387. ###
  388. if (empty($serverid))
  389. {
  390. $error .= T_('No ServerID specified !');
  391. }
  392. else
  393. {
  394. if (!is_numeric($serverid))
  395. {
  396. $error .= T_('Invalid ServerID. ');
  397. }
  398. else if (query_numrows( "SELECT `name` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" ) == 0)
  399. {
  400. $error .= T_('Invalid ServerID. ');
  401. }
  402. }
  403. ###
  404. if (!empty($error))
  405. {
  406. $_SESSION['msg1'] = T_('Validation Error!');
  407. $_SESSION['msg2'] = $error;
  408. $_SESSION['msg-type'] = 'error';
  409. unset($error);
  410. header( 'Location: server.php' );
  411. die();
  412. }
  413. ###
  414. $status = query_fetch_assoc( "SELECT `status`, `panelstatus` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" );
  415. if ($status['status'] == 'Inactive')
  416. {
  417. $_SESSION['msg1'] = T_('Validation Error!');
  418. $_SESSION['msg2'] = T_('The server has been disabled.');
  419. $_SESSION['msg-type'] = 'error';
  420. header( 'Location: server.php' );
  421. die();
  422. }
  423. else if ($status['status'] == 'Pending')
  424. {
  425. $_SESSION['msg1'] = T_('Validation Error!');
  426. $_SESSION['msg2'] = T_('The server is pending.');
  427. $_SESSION['msg-type'] = 'error';
  428. header( 'Location: server.php' );
  429. die();
  430. }
  431. else if ($status['panelstatus'] == 'Started')
  432. {
  433. $_SESSION['msg1'] = T_('Validation Error!');
  434. $_SESSION['msg2'] = T_('The server is already running!');
  435. $_SESSION['msg-type'] = 'error';
  436. header( 'Location: server.php' );
  437. die();
  438. }
  439. ###
  440. $server = query_fetch_assoc( "SELECT * FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."' LIMIT 1" );
  441. $serverIp = query_fetch_assoc( "SELECT `ip` FROM `".DBPREFIX."boxIp` WHERE `ipid` = '".$server['ipid']."' LIMIT 1");
  442. $box = query_fetch_assoc( "SELECT `ip`, `login`, `password`, `sshport` FROM `".DBPREFIX."box` WHERE `boxid` = '".$server['boxid']."' LIMIT 1" );
  443. ###
  444. // Rights
  445. $checkGroup = checkClientGroup($server['groupid'], $_SESSION['clientid']);
  446. if ($checkGroup == FALSE)
  447. {
  448. $_SESSION['msg1'] = T_('Error!');
  449. $_SESSION['msg2'] = T_('This is not your server!');
  450. $_SESSION['msg-type'] = 'error';
  451. header( 'Location: index.php' );
  452. die();
  453. }
  454. ###
  455. $aes = new Crypt_AES();
  456. $aes->setKeyLength(256);
  457. $aes->setKey(CRYPT_KEY);
  458. ###
  459. // Get SSH2 Object OR ERROR String
  460. $ssh = newNetSSH2($box['ip'], $box['sshport'], $box['login'], $aes->decrypt($box['password']));
  461. if (!is_object($ssh))
  462. {
  463. $_SESSION['msg1'] = T_('Connection Error!');
  464. $_SESSION['msg2'] = $ssh;
  465. $_SESSION['msg-type'] = 'error';
  466. header( "Location: server.php?id=".urlencode($serverid) );
  467. die();
  468. }
  469.  
  470. $gameInstaller = new GameInstaller( $ssh );
  471. ###
  472. $setGameServerPath = $gameInstaller->setGameServerPath( dirname($server['path']) );
  473. if ($setGameServerPath == FALSE) {
  474. $_SESSION['msg1'] = T_('Error!');
  475. $_SESSION['msg2'] = T_('Unable To Set Game Server Directory');
  476. $_SESSION['msg-type'] = 'error';
  477. header( "Location: server.php?id=".urlencode($serverid) );
  478. die();
  479. }
  480. ###
  481. $opStatus = $gameInstaller->checkOperation( 'installGame' );
  482. if ($opStatus == TRUE) {
  483. $_SESSION['msg1'] = T_('Unable To Start Game Server!');
  484. $_SESSION['msg2'] = T_('Operation in Progress!');
  485. $_SESSION['msg-type'] = 'error';
  486. header( "Location: server.php?id=".urlencode($serverid) );
  487. die();
  488. }
  489.  
  490. //We prepare the startline
  491. $startline = $server['startline'];
  492. ###
  493. if (preg_match("#\{ip\}#", $startline))
  494. {
  495. $startline = preg_replace("#\{ip\}#", $serverIp['ip'], $startline); //IP replacement
  496. }
  497. if (preg_match("#\{port\}#", $startline))
  498. {
  499. $startline = preg_replace("#\{port\}#", $server['port'], $startline); //Port replacement
  500. }
  501. if (preg_match("#\{slots\}#", $startline))
  502. {
  503. $startline = preg_replace("#\{slots\}#", $server['slots'], $startline); //Slots replacement
  504. }
  505. ###
  506. $n = 1;
  507. while ($n < 10)
  508. {
  509. if (preg_match("#\{cfg".$n."\}#", $startline))
  510. {
  511. $startline = preg_replace("#\{cfg".$n."\}#", $server['cfg'.$n], $startline); //CFG replacement
  512. }
  513. ++$n;
  514. }
  515. #-----------------+
  516. $cmd = "screen -AdmSL ".$server['screen']." nice -n ".$server['priority']." ".$startline;
  517. $ssh->exec('cd '.dirname($server['path']).'; '.$cmd."\n");
  518. #-----------------+
  519. if (preg_match("#^xvfb-run#", $server['startline']))
  520. {
  521. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  522. // Xvfb - virtual framebuffer X server for X - Xvfb pid backup
  523. sleep(3);
  524. $ssh->exec('cd '.dirname($server['path']).'; pgrep -u '.$box['login'].' Xvfb -n > xvfb.pid.tmp');
  525. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  526. }
  527. $ssh->disconnect();
  528.  
  529. //Mark the server as started
  530. query_basic( "UPDATE `".DBPREFIX."server` SET `panelstatus` = 'Started' WHERE `serverid` = '".$serverid."'" );
  531. ###
  532. //Adding event to the database
  533. $message = 'Server Started : '.mysql_real_escape_string($server['name']);
  534. query_basic( "INSERT INTO `".DBPREFIX."log` SET `serverid` = '".$serverid."', `message` = '".$message."', `name` = '".$_SESSION['clientfirstname']." ".$_SESSION['clientlastname']."', `ip` = '".$_SERVER['REMOTE_ADDR']."'" );
  535. ###
  536. $_SESSION['msg1'] = T_('Server Successfully Started!');
  537. $_SESSION['msg2'] = T_('With command').' : '.htmlspecialchars($startline, ENT_QUOTES);
  538. $_SESSION['msg-type'] = 'info';
  539. header( "Location: server.php?id=".urlencode($serverid) );
  540. die();
  541. break;
  542.  
  543. case 'serverstop':
  544. $serverid = $_GET['serverid'];
  545. ###
  546. $error = '';
  547. ###
  548. if (empty($serverid))
  549. {
  550. $error .= T_('No ServerID specified !');
  551. }
  552. else
  553. {
  554. if (!is_numeric($serverid))
  555. {
  556. $error .= T_('Invalid ServerID. ');
  557. }
  558. else if (query_numrows( "SELECT `name` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" ) == 0)
  559. {
  560. $error .= T_('Invalid ServerID. ');
  561. }
  562. }
  563. ###
  564. if (!empty($error))
  565. {
  566. $_SESSION['msg1'] = T_('Validation Error!');
  567. $_SESSION['msg2'] = $error;
  568. $_SESSION['msg-type'] = 'error';
  569. unset($error);
  570. header( 'Location: server.php' );
  571. die();
  572. }
  573. ###
  574. $status = query_fetch_assoc( "SELECT `status`, `panelstatus` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" );
  575. if ($status['status'] == 'Inactive')
  576. {
  577. $_SESSION['msg1'] = T_('Validation Error!');
  578. $_SESSION['msg2'] = T_('The server has been disabled.');
  579. $_SESSION['msg-type'] = 'error';
  580. header( 'Location: server.php' );
  581. die();
  582. }
  583. else if ($status['status'] == 'Pending')
  584. {
  585. $_SESSION['msg1'] = T_('Validation Error!');
  586. $_SESSION['msg2'] = T_('The server is pending.');
  587. $_SESSION['msg-type'] = 'error';
  588. header( 'Location: server.php' );
  589. die();
  590. }
  591. else if ($status['panelstatus'] == 'Stopped')
  592. {
  593. $_SESSION['msg1'] = T_('Validation Error!');
  594. $_SESSION['msg2'] = T_('The server is already stopped!');
  595. $_SESSION['msg-type'] = 'error';
  596. header( 'Location: server.php' );
  597. die();
  598. }
  599. ###
  600. $server = query_fetch_assoc( "SELECT * FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."' LIMIT 1" );
  601. $box = query_fetch_assoc( "SELECT `ip`, `login`, `password`, `sshport` FROM `".DBPREFIX."box` WHERE `boxid` = '".$server['boxid']."' LIMIT 1" );
  602. ###
  603. // Rights
  604. $checkGroup = checkClientGroup($server['groupid'], $_SESSION['clientid']);
  605. if ($checkGroup == FALSE)
  606. {
  607. $_SESSION['msg1'] = T_('Error!');
  608. $_SESSION['msg2'] = T_('This is not your server!');
  609. $_SESSION['msg-type'] = 'error';
  610. header( 'Location: index.php' );
  611. die();
  612. }
  613. ###
  614. $aes = new Crypt_AES();
  615. $aes->setKeyLength(256);
  616. $aes->setKey(CRYPT_KEY);
  617. ###
  618. // Get SSH2 Object OR ERROR String
  619. $ssh = newNetSSH2($box['ip'], $box['sshport'], $box['login'], $aes->decrypt($box['password']));
  620. if (!is_object($ssh))
  621. {
  622. $_SESSION['msg1'] = T_('Connection Error!');
  623. $_SESSION['msg2'] = $ssh;
  624. $_SESSION['msg-type'] = 'error';
  625. header( "Location: server.php?id=".urlencode($serverid) );
  626. die();
  627. }
  628.  
  629. $session = $ssh->exec( "screen -ls | awk '{ print $1 }' | grep '^[0-9]*\.".$server['screen']."$'"."\n" );
  630. $session = trim($session);
  631. #-----------------+
  632. $cmd = "screen -S ".$session." -X quit"."\n";
  633. $ssh->exec($cmd."\n");
  634. #-----------------+
  635. if (preg_match("#^xvfb-run#", $server['startline']))
  636. {
  637. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  638. // Xvfb - virtual framebuffer X server for X - TASK KILLER
  639. $ssh->exec('cd '.dirname($server['path']).'; kill $(cat xvfb.pid.tmp); rm xvfb.pid.tmp');
  640. sleep(3);
  641. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  642. }
  643. $ssh->disconnect();
  644.  
  645. //Mark the server as stopped
  646. query_basic( "UPDATE `".DBPREFIX."server` SET `panelstatus` = 'Stopped' WHERE `serverid` = '".$serverid."'" );
  647. ###
  648. //Adding event to the database
  649. $message = 'Server Stopped : '.mysql_real_escape_string($server['name']);
  650. query_basic( "INSERT INTO `".DBPREFIX."log` SET `serverid` = '".$serverid."', `message` = '".$message."', `name` = '".$_SESSION['clientfirstname']." ".$_SESSION['clientlastname']."', `ip` = '".$_SERVER['REMOTE_ADDR']."'" );
  651. ###
  652. $_SESSION['msg1'] = T_('Server Successfully Stopped!');
  653. $_SESSION['msg2'] = '';
  654. $_SESSION['msg-type'] = 'info';
  655. header( "Location: server.php?id=".urlencode($serverid) );
  656. die();
  657. break;
  658.  
  659. case 'serverreboot':
  660. $serverid = $_GET['serverid'];
  661. ###
  662. $error = '';
  663. ###
  664. if (empty($serverid))
  665. {
  666. $error .= T_('No ServerID specified !');
  667. }
  668. else
  669. {
  670. if (!is_numeric($serverid))
  671. {
  672. $error .= T_('Invalid ServerID. ');
  673. }
  674. else if (query_numrows( "SELECT `name` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" ) == 0)
  675. {
  676. $error .= T_('Invalid ServerID. ');
  677. }
  678. }
  679. ###
  680. if (!empty($error))
  681. {
  682. $_SESSION['msg1'] = T_('Validation Error!');
  683. $_SESSION['msg2'] = $error;
  684. $_SESSION['msg-type'] = 'error';
  685. unset($error);
  686. header( 'Location: server.php' );
  687. die();
  688. }
  689. ###
  690. $status = query_fetch_assoc( "SELECT `status`, `panelstatus` FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."'" );
  691. if ($status['status'] == 'Inactive')
  692. {
  693. $_SESSION['msg1'] = T_('Validation Error!');
  694. $_SESSION['msg2'] = T_('The server has been disabled.');
  695. $_SESSION['msg-type'] = 'error';
  696. header( 'Location: server.php' );
  697. die();
  698. }
  699. else if ($status['status'] == 'Pending')
  700. {
  701. $_SESSION['msg1'] = T_('Validation Error!');
  702. $_SESSION['msg2'] = T_('The server is pending.');
  703. $_SESSION['msg-type'] = 'error';
  704. header( 'Location: server.php' );
  705. die();
  706. }
  707. else if ($status['panelstatus'] == 'Stopped')
  708. {
  709. $_SESSION['msg1'] = T_('Validation Error!');
  710. $_SESSION['msg2'] = T_('The server is already stopped!');
  711. $_SESSION['msg-type'] = 'error';
  712. header( 'Location: server.php' );
  713. die();
  714. }
  715. ###
  716. $server = query_fetch_assoc( "SELECT * FROM `".DBPREFIX."server` WHERE `serverid` = '".$serverid."' LIMIT 1" );
  717. $serverIp = query_fetch_assoc( "SELECT `ip` FROM `".DBPREFIX."boxIp` WHERE `ipid` = '".$server['ipid']."' LIMIT 1");
  718. $box = query_fetch_assoc( "SELECT `ip`, `login`, `password`, `sshport` FROM `".DBPREFIX."box` WHERE `boxid` = '".$server['boxid']."' LIMIT 1" );
  719. ###
  720. // Rights
  721. $checkGroup = checkClientGroup($server['groupid'], $_SESSION['clientid']);
  722. if ($checkGroup == FALSE)
  723. {
  724. $_SESSION['msg1'] = T_('Error!');
  725. $_SESSION['msg2'] = T_('This is not your server!');
  726. $_SESSION['msg-type'] = 'error';
  727. header( 'Location: index.php' );
  728. die();
  729. }
  730. ###
  731. $aes = new Crypt_AES();
  732. $aes->setKeyLength(256);
  733. $aes->setKey(CRYPT_KEY);
  734. ###
  735. // Get SSH2 Object OR ERROR String
  736. $ssh = newNetSSH2($box['ip'], $box['sshport'], $box['login'], $aes->decrypt($box['password']));
  737. if (!is_object($ssh))
  738. {
  739. $_SESSION['msg1'] = T_('Connection Error!');
  740. $_SESSION['msg2'] = $ssh;
  741. $_SESSION['msg-type'] = 'error';
  742. header( "Location: server.php?id=".urlencode($serverid) );
  743. die();
  744. }
  745.  
  746. $session = $ssh->exec( "screen -ls | awk '{ print $1 }' | grep '^[0-9]*\.".$server['screen']."$'"."\n" );
  747. $session = trim($session);
  748. #-----------------+
  749. $cmd = "screen -S ".$session." -X quit"."\n";
  750. $ssh->exec($cmd."\n");
  751. #-----------------+
  752. if (preg_match("#^xvfb-run#", $server['startline']))
  753. {
  754. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  755. // Xvfb - virtual framebuffer X server for X - TASK KILLER
  756. $ssh->exec('cd '.dirname($server['path']).'; kill $(cat xvfb.pid.tmp); rm xvfb.pid.tmp');
  757. sleep(3);
  758. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  759. }
  760. ###
  761. query_basic( "UPDATE `".DBPREFIX."server` SET `panelstatus` = 'Stopped' WHERE `serverid` = '".$serverid."'" );
  762. ###
  763. usleep(2000);
  764. ###
  765. //We prepare the startline
  766. $startline = $server['startline'];
  767. ###
  768. if (preg_match("#\{ip\}#", $startline))
  769. {
  770. $startline = preg_replace("#\{ip\}#", $serverIp['ip'], $startline); //IP replacement
  771. }
  772. if (preg_match("#\{port\}#", $startline))
  773. {
  774. $startline = preg_replace("#\{port\}#", $server['port'], $startline); //Port replacement
  775. }
  776. if (preg_match("#\{slots\}#", $startline))
  777. {
  778. $startline = preg_replace("#\{slots\}#", $server['slots'], $startline); //Slots replacement
  779. }
  780. ###
  781. $n = 1;
  782. while ($n < 10)
  783. {
  784. if (preg_match("#\{cfg".$n."\}#", $startline))
  785. {
  786. $startline = preg_replace("#\{cfg".$n."\}#", $server['cfg'.$n], $startline); //CFG replacement
  787. }
  788. ++$n;
  789. }
  790. #-----------------+
  791. $cmd = "screen -AdmSL ".$server['screen']." nice -n ".$server['priority']." ".$startline;
  792. $ssh->exec('cd '.dirname($server['path']).'; '.$cmd."\n");
  793. #-----------------+
  794. if (preg_match("#^xvfb-run#", $server['startline']))
  795. {
  796. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  797. // Xvfb - virtual framebuffer X server for X - Xvfb pid backup
  798. sleep(3);
  799. $ssh->exec('cd '.dirname($server['path']).'; pgrep -u '.$box['login'].' Xvfb -n > xvfb.pid.tmp');
  800. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  801. }
  802. $ssh->disconnect();
  803.  
  804. query_basic( "UPDATE `".DBPREFIX."server` SET `panelstatus` = 'Started' WHERE `serverid` = '".$serverid."'" );
  805. ###
  806. //Adding event to the database
  807. $message = 'Server Rebooted : '.mysql_real_escape_string($server['name']);
  808. query_basic( "INSERT INTO `".DBPREFIX."log` SET `serverid` = '".$serverid."', `message` = '".$message."', `name` = '".$_SESSION['clientfirstname']." ".$_SESSION['clientlastname']."', `ip` = '".$_SERVER['REMOTE_ADDR']."'" );
  809. ###
  810. $_SESSION['msg1'] = T_('Server Successfully Rebooted!');
  811. $_SESSION['msg2'] = '';
  812. $_SESSION['msg-type'] = 'info';
  813. header( "Location: server.php?id=".urlencode($serverid) );
  814. die();
  815. break;
  816.  
  817. default:
  818. exit('<h1><b>Error</b></h1>');
  819. }
  820.  
  821. exit('<h1><b>403 Forbidden</b></h1>'); //If the task is incorrect or unspecified, we drop the user.
  822. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement