ftp_admin.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <script type="text/javascript" src="js/modules/ftp.js"></script>
  2. <?php
  3. /*
  4. *
  5. * OGP - Open Game Panel
  6. * Copyright (C) 2008 - 2018 The OGP Development Team
  7. *
  8. * http://www.opengamepanel.org/
  9. *
  10. * This program is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU General Public License
  12. * as published by the Free Software Foundation; either version 2
  13. * of the License, or any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public License
  21. * along with this program; if not, write to the Free Software
  22. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. *
  24. */
  25. function exec_ogp_module()
  26. {
  27. include_once('includes/lib_remote.php');
  28. global $db;
  29. global $view;
  30. if(isset($_POST['add_ftp_user']))
  31. {
  32. $success = true;
  33. $server_row = $db->getRemoteServer($_POST['remote_server_id']);
  34. $remote = new OGPRemoteLibrary($server_row['agent_ip'],$server_row['agent_port'],$server_row['encryption_key'],$server_row['timeout']);
  35. $post_ftp_login = strip_real_escape_string($_POST['ftp_login']);
  36. $post_ftp_password = strip_real_escape_string($_POST['ftp_password']);
  37. $post_full_path = strip_real_escape_string($_POST['full_path']);
  38. $host_stat = $remote->status_chk();
  39. // Validation
  40. if(strlen($post_ftp_login) > 20){
  41. print_failure( get_lang("ftp_account_username_too_long") );
  42. $success = false;
  43. }
  44. if(strlen($post_ftp_password) > 20){
  45. print_failure( get_lang("ftp_account_password_too_long") );
  46. $success = false;
  47. }
  48. $ftp_accounts_list = $remote->ftp_mgr("list");
  49. $ftp_accounts = explode("\n",$ftp_accounts_list);
  50. $user_exists = FALSE;
  51. foreach($ftp_accounts as $ftp_account)
  52. {
  53. if( $ftp_account != "" )
  54. {
  55. list($ftp_login, $ftp_path) = explode("\t",$ftp_account);
  56. $ftp_login = trim($ftp_login);
  57. if ($ftp_login == $post_ftp_login)
  58. {
  59. $user_exists = TRUE;
  60. break;
  61. }
  62. }
  63. }
  64. if( $user_exists === TRUE )
  65. {
  66. print_failure( get_lang("ftp_account_already_exists") );
  67. }
  68. else
  69. {
  70. if($success)
  71. $remote->ftp_mgr("useradd", $post_ftp_login, $post_ftp_password, $post_full_path);
  72. }
  73. }
  74. if(isset($_POST['del_ftp_user_y']))
  75. {
  76. $ftp_login = strip_real_escape_string($_POST['ftp_login']);
  77. $server_row = $db->getRemoteServer($_POST['remote_server_id']);
  78. $remote = new OGPRemoteLibrary($server_row['agent_ip'],$server_row['agent_port'],$server_row['encryption_key'],$server_row['timeout']);
  79. $remote->ftp_mgr("userdel", $ftp_login);
  80. $home_info = $db->getHomeByFtpLogin($server_row['remote_server_id'], $ftp_login);
  81. $db->changeFtpStatus('disabled',$home_info['home_id']);
  82. }
  83. if(isset($_POST['edit_ftp_user']))
  84. {
  85. $server_row = $db->getRemoteServer($_POST['remote_server_id']);
  86. $remote = new OGPRemoteLibrary($server_row['agent_ip'],$server_row['agent_port'],$server_row['encryption_key'],$server_row['timeout']);
  87. $ftp_login = strip_real_escape_string($_POST['ftp_login']);
  88. $settings = "";
  89. foreach($_POST as $key => $value)
  90. {
  91. if($key != "edit_ftp_user" and $key != "ftp_login" and $key != "remote_server_id")
  92. {
  93. $clean_value = strip_real_escape_string($value);
  94. $account_settings .= $key."\t".$clean_value."\n";
  95. }
  96. }
  97. $remote->ftp_mgr("usermod", $ftp_login, $account_settings );
  98. }
  99. echo "<h2>" . get_lang("ftp_admin") . "</h2>";
  100. $servers = $db->getRemoteServers();
  101. if($servers !== false)
  102. {
  103. echo "
  104. <tr>
  105. <td colspan='3'>
  106. <form method=POST >
  107. <table class='center' style='width:100%'>
  108. <tr>
  109. <td>
  110. ".get_lang("remote_server")." <select style='width:250px' name='remote_server_id'>
  111. ";
  112. foreach($servers as $server_row)
  113. {
  114. $display_ip = checkDisplayPublicIP($server_row['display_public_ip'],$server_row['agent_ip']);
  115. echo "
  116. <option value='".$server_row['remote_server_id']."'>".$server_row['remote_server_name']." (".$display_ip.":".$server_row['agent_port'].")</option>
  117. ";
  118. }
  119. echo "
  120. </select>
  121. </td>
  122. <td>".get_lang("login")."<input type=text name='ftp_login'/></td>
  123. <td>".get_lang("password")."<input type=text name='ftp_password'/></td>
  124. <td>".get_lang("full_path")."<input type=text name='full_path'/></td>
  125. </tr>
  126. <tr>
  127. <td colspan='4'>
  128. <input style='width:100%;' type=submit name='add_ftp_user' value='".get_lang("add_ftp_account")."' />
  129. </td>
  130. </tr>
  131. </table>
  132. </form>
  133. </td>
  134. </tr>
  135. <table id='servermonitor' class='tablesorter' data-sortlist='[[2,0]]'>
  136. <thead>
  137. <tr>
  138. <th class='header sorter-false'></th>
  139. <th>".get_lang('remote_server')."</th>
  140. <th>".get_lang('login')."</th>
  141. <th>".get_lang('server_name')."</th>
  142. <th>".get_lang('full_path')."</th>
  143. </tr>
  144. </thead>
  145. <tbody>
  146. ";
  147. foreach ( $servers as $server_row )
  148. {
  149. $display_ip = checkDisplayPublicIP($server_row['display_public_ip'],$server_row['agent_ip']);
  150. $remote = new OGPRemoteLibrary($server_row['agent_ip'],$server_row['agent_port'],$server_row['encryption_key'],$server_row['timeout']);
  151. $host_stat = $remote->status_chk();
  152. $status = ( $host_stat === 0 or $host_stat === -1 ) ? "<span class='failure'>". get_lang("offline") ."</span>" : "<span class='success'>". get_lang("online") ."</span>";
  153. if( $host_stat === 1)
  154. {
  155. $ftp_accounts_list = $remote->ftp_mgr("list");
  156. $ftp_accounts = explode("\n", $ftp_accounts_list);
  157. foreach($ftp_accounts as $ftp_account)
  158. {
  159. if( !empty($ftp_account))
  160. {
  161. list($ftp_login, $ftp_path) = explode("\t", $ftp_account);
  162. $ftp_login = trim($ftp_login);
  163. $home_info = $db->getHomeByFtpLogin($server_row['remote_server_id'], $ftp_login);
  164. $expandme = ( ( isset($_POST['ftp_login']) and $ftp_login == strip_real_escape_string($_POST['ftp_login']) ) AND ( isset($_POST['remote_server_id']) and $home_info['remote_server_id'] == $_POST['remote_server_id'] ) ) ? "expandme" : "";
  165. $home_name = isset( $home_info['home_name'] ) ? $home_info['home_name'] : $ftp_path;
  166. $output = "
  167. <tr class='maintr ".$expandme."'>
  168. <td class='collapsible'></td>
  169. <td>".$server_row['remote_server_name']." (".$display_ip.")</td>
  170. <td><b style='color:red'>".$ftp_login."</b></td>
  171. <td>".htmlentities($home_name)."</td>
  172. <td>".$ftp_path."</td>
  173. </tr>
  174. <tr class='expand-child'>
  175. <td colspan='5'>
  176. <form method='POST'>
  177. <table class='center' style='width:100%'>
  178. <tr>
  179. <td>
  180. <table class='center' style='width:100%'>
  181. ";
  182. $account_details = $remote->ftp_mgr("show", $ftp_login);
  183. $ftp_account_detail_list = explode("\n",$account_details);
  184. foreach($ftp_account_detail_list as $detail_line)
  185. {
  186. if( !empty($detail_line))
  187. {
  188. list($key,$value) = explode(" : ",$detail_line);
  189. $key = trim($key);
  190. $value = trim($value);
  191. $blacklist = array("Login", "Password", "UID", "GID", "ftp_user_id", "username",
  192. "username_prefix", "password", "sys_userid", "sys_groupid",
  193. "sys_perm_user", "sys_perm_group", "sys_perm_other",
  194. "server_id", "parent_domain_id", "uid", "gid" );
  195. if(in_array($key, $blacklist))
  196. {
  197. continue;
  198. }
  199. if(substr($value, -1) == ')')
  200. {
  201. $value_parts = explode(" ", $value);
  202. if(is_numeric($value_parts[0]))
  203. {
  204. if(count($value_parts) > 1)
  205. {
  206. $value = array_shift($value_parts);
  207. $advert = implode(" ", $value_parts);
  208. }
  209. }
  210. else
  211. {
  212. $first_pos = array_shift($value_parts);
  213. $parts = preg_split('/:|-/', $first_pos);
  214. if(count(array_filter($parts, 'is_numeric')) === 2)
  215. {
  216. $value = $first_pos;
  217. $advert = implode(" ", $value_parts);
  218. }
  219. }
  220. }
  221. if($key == "Allowed local IPs" or $key == "ul_ratio" or $key == "ForceSsl" or (count($ftp_account_detail_list) == 4 and $key == "Directory"))
  222. {
  223. $output .= "
  224. </table>
  225. </td>
  226. <td>
  227. <table class='center' style='width:100%'>
  228. ";
  229. }
  230. if($key == "Directory")
  231. {
  232. $value = str_replace( "/./", "", $value );
  233. }
  234. $readOnly = ($key == "Username") ? ' readonly' : '';
  235. $showAdvert = (isset($advert)) ? $advert : '';
  236. $output .= "
  237. <tr>
  238. <td>".$key."</td>
  239. <td>
  240. <input type=text name='".$key."' value='".$value."'".$readOnly."/>
  241. </td>
  242. <td>
  243. ".$showAdvert."
  244. </td>
  245. </tr>
  246. ";
  247. unset($key, $value, $advert);
  248. }
  249. }
  250. $output .= "
  251. <tr>
  252. <td colspan='2'>
  253. <center>
  254. <input type=hidden name='remote_server_id' value='".$server_row['remote_server_id']."'/>
  255. <input type=hidden name='ftp_login' value='" . str_replace('"', '&quot;', $ftp_login) . "'/>
  256. <input type=submit name='edit_ftp_user' value='". get_lang("change_account_details") ."' />
  257. </center>
  258. </td>
  259. <td>
  260. <input type='image' name='del_ftp_user' onsubmit='submit-form();' src='modules/administration/images/remove.gif'>". get_lang("remove_account") ."</input>
  261. </td>
  262. </tr>
  263. </table>
  264. </td>
  265. </tr>
  266. </table>
  267. </form>
  268. </td>
  269. </tr>
  270. ";
  271. echo $output;
  272. }
  273. }
  274. } // end: host_stat === 1
  275. } // end: foreach $servers as $server_row
  276. }else
  277. {
  278. echo get_lang('no_remote_servers');
  279. }
  280. echo "
  281. </tbody>
  282. </table>
  283. ";
  284. }