filetp.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. $sql->query('SELECT `uid`, `address`, `game`, `status` FROM `control_servers` WHERE `id`="'.$sid.'" LIMIT 1');
  5. $server = $sql->get();
  6. ctrl::nav($server, $id, $sid, 'filetp');
  7. $frouter = explode('/', ctrl::route($server, 'filetp', $go));
  8. if(end($frouter) == 'noaccess.php')
  9. include(SEC.'control/servers/noaccess.php');
  10. else{
  11. $sql->query('SELECT `uid`, `ftp`, `ftp_passwd` FROM `control_servers` WHERE `id`="'.$sid.'" LIMIT 1');
  12. $server = array_merge($server, $sql->get());
  13. $sql->query('SELECT `address` FROM `control` WHERE `id`="'.$id.'" LIMIT 1');
  14. $unit = $sql->get();
  15. $ip = sys::first(explode(':', $unit['address']));
  16. $html->nav('Список подключенных серверов', $cfg['http'].'control');
  17. $html->nav('Список игровых серверов #'.$id, $cfg['http'].'control/id/'.$id);
  18. $html->nav($server['address'], $cfg['http'].'control/id/'.$id.'/server/'.$sid);
  19. $html->nav('FileTP');
  20. // Путь для Proftpd
  21. $homedir = '/servers/'.$server['uid'];
  22. // Путь для файлового менеджера
  23. $dir = '/';
  24. $aData = array(
  25. 'root' => $dir,
  26. 'host' => $ip,
  27. 'login' => $server['uid'],
  28. 'passwd' => $server['ftp_passwd']
  29. );
  30. if($go)
  31. {
  32. if(isset($url['action']) AND in_array($url['action'], array('on', 'off', 'change', 'logs')))
  33. {
  34. $sql->query('SELECT `passwd`, `sql_login`, `sql_passwd`, `sql_port`, `sql_ftp` FROM `control` WHERE `id`="'.$id.'" LIMIT 1');
  35. $unit = array_merge($unit, $sql->get());
  36. include(LIB.'ssh.php');
  37. // Проверка соединения с ssh сервером
  38. if(!$ssh->auth($unit['passwd'], $unit['address']))
  39. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  40. }else{
  41. include(LIB.'ftp.php');
  42. $ftp = new ftp;
  43. // Проверка соединения с ftp сервером
  44. if(!$ftp->auth($aData['host'], $aData['login'], $aData['passwd']))
  45. {
  46. if(isset($url['action']))
  47. {
  48. if($url['action'] == 'search')
  49. sys::out('Не удалось соединиться с ftp-сервером.');
  50. sys::outjs(array('e' => 'Не удалось соединиться с ftp-сервером.'));
  51. }
  52. sys::out();
  53. }
  54. }
  55. // Выполнение операций
  56. if(isset($url['action']))
  57. switch($url['action'])
  58. {
  59. case 'on':
  60. if($server['ftp'])
  61. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  62. $used = sys::int($ssh->get('cd /servers/'.$server['uid'].' && du -b | tail -1'));
  63. if($used < 1)
  64. sys::back($cfg['http'].'help/action/create');
  65. $bytes = $server['hdd']*1048576;
  66. $server['ftp_passwd'] = isset($server['ftp_passwd'][1]) ? $server['ftp_passwd'] : sys::passwd(8);
  67. $qSql = 'DELETE FROM users WHERE username=\''.$server['uid'].'\';'
  68. .'INSERT INTO users set username=\''.$server['uid'].'\', password=\''.$server['ftp_passwd'].'\', uid=\''.$server['uid'].'\', gid=\'1000\', homedir=\''.$homedir.'\', shell=\'/bin/false\';';
  69. $ssh->set('screen -dmS ftp'.$server['uid'].' mysql -P '.$unit['sql_port'].' -u'.$unit['sql_login'].' -p'.$unit['sql_passwd'].' --database '.$unit['sql_ftp'].' -e "'.$qSql.'"');
  70. $sql->query('UPDATE `control_servers` SET `ftp`="1", `ftp_passwd`="'.$server['ftp_passwd'].'" WHERE `id`="'.$sid.'" LIMIT 1');
  71. $mcache->delete('ctrl_server_filetp_'.$sid);
  72. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  73. case 'change':
  74. if(!$server['ftp'])
  75. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  76. $passwd = sys::passwd(8);
  77. $qSql = "UPDATE users set password='".$passwd."' WHERE username='".$server['uid']."' LIMIT 1";
  78. $ssh->set('screen -dmS ftp'.$server['uid'].' mysql -P '.$unit['sql_port'].' -u'.$unit['sql_login'].' -p'.$unit['sql_passwd'].' --database '.$unit['sql_ftp'].' -e '.'"'.$qSql.'"');
  79. $sql->query('UPDATE `control_servers` SET `ftp_passwd`="'.$passwd.'" WHERE `id`="'.$sid.'" LIMIT 1');
  80. $mcache->delete('ctrl_server_filetp_'.$sid);
  81. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  82. case 'off':
  83. if(!$server['ftp'])
  84. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  85. $qSql = 'DELETE FROM users WHERE username=\''.$server['uid'].'\';';
  86. $ssh->set('screen -dmS ftp'.$server['uid'].' mysql -P '.$unit['sql_port'].' -u'.$unit['sql_login'].' -p'.$unit['sql_passwd'].' --database '.$unit['sql_ftp'].' -e "'.$qSql.'"');
  87. $sql->query('UPDATE `control_servers` SET `ftp`="0" WHERE `id`="'.$sid.'" LIMIT 1');
  88. $mcache->delete('ctrl_server_filetp_'.$sid);
  89. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/filetp');
  90. case 'rename':
  91. $ftp->rename(json_decode($_POST['path']), json_decode($_POST['name']), json_decode($_POST['newname']));
  92. case 'edit':
  93. $ftp->edit_file(json_decode($_POST['path']), json_decode($_POST['name']));
  94. case 'create':
  95. if(isset($url['folder']))
  96. $ftp->mkdir(json_decode($_POST['path']), json_decode($_POST['name']));
  97. $ftp->touch(json_decode($_POST['path']), json_decode($_POST['name']), json_decode($_POST['text']));
  98. case 'delete':
  99. if(isset($url['folder']))
  100. $ftp->rmdir(json_decode($_POST['path']), json_decode($_POST['name']));
  101. $ftp->rmfile(json_decode($_POST['path']).'/'.json_decode($_POST['name']));
  102. case 'chmod':
  103. $ftp->chmod(json_decode($_POST['path']), json_decode($_POST['name']), sys::int($_POST['chmod']));
  104. case 'search':
  105. $text = isset($_POST['find']) ? sys::first(explode('.', json_decode($_POST['find']))) : sys::out();
  106. if(!isset($text[2]))
  107. sys::out('Для выполнения поиска, необходимо больше данных');
  108. $ftp->search($text, $id);
  109. case 'logs':
  110. $logs = $mcache->get('ctrl_filetp_logs_'.$sid);
  111. if(!$logs)
  112. {
  113. include(LIB.'ftp.php');
  114. $ftp = new ftp;
  115. $logs = $ftp->logs($ssh->get('cat /var/log/proftpd/xferlog | grep "/'.$server['uid'].'/" | awk \'{print $2"\\\"$3"\\\"$4"\\\"$5"\\\"$7"\\\"$8"\\\"$9"\\\"$12}\' | tail -50'), $server['uid']);
  116. $mcache->set('ctrl_filetp_logs_'.$sid, $logs, false, 300);
  117. }
  118. sys::out($logs);
  119. }
  120. if(!isset($_POST['path'])) $_POST['path'] = json_encode($aData['root']);
  121. sys::out($ftp->view($ftp->read(json_decode($_POST['path'])), $sid));
  122. }
  123. if($mcache->get('ctrl_server_filetp_'.$sid) != '')
  124. $html->arr['main'] = $mcache->get('ctrl_server_filetp_'.$sid);
  125. else{
  126. if($server['ftp'])
  127. {
  128. $html->get('filetp_on', 'sections/control/servers/games/filetp');
  129. $html->set('address', 'ftp://'.$aData['login'].':'.$aData['passwd'].'@'.$aData['host']);
  130. $html->set('server', $aData['host']);
  131. $html->set('login', $aData['login']);
  132. $html->set('passwd', $aData['passwd']);
  133. $html->set('path', $aData['root']);
  134. }else
  135. $html->get('filetp_off', 'sections/control/servers/games/filetp');
  136. $html->set('id', $id);
  137. $html->set('server', $sid);
  138. $html->pack('main');
  139. $mcache->set('ctrl_server_filetp_'.$sid, $html->arr['main'], false, 10);
  140. }
  141. }
  142. ?>