util.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. $(function(){
  2. $("#tabs").tabs();
  3. $("#loading").removeClass('hide').addClass('show');
  4. var select_agent = $('#translation').attr('data-select_agent'),
  5. target_empty = $('#translation').attr('data-target_empty'),
  6. command_empty = $('#translation').attr('data-command_empty'),
  7. agent_invalid = $('#translation').attr('data-agent_invalid'),
  8. post_failed = $('#translation').attr('data-post_failed'),
  9. select_server = $('#translation').attr('data-select_server'),
  10. select_server_option = $('#translation').attr('data-select_server_option');
  11. // Load the agents via an external script so the user isn't waiting an eternity if they have several agents and multiple are offline
  12. $.getJSON("home.php?m=util&p=agents&type=cleared", function(data){
  13. var agents = "";
  14. var agentsOnline = 0;
  15. $("#loading_agents").removeClass('show').addClass('hide');
  16. $("#loading").removeClass('show').addClass('hide');
  17. $("#options").removeClass('hide').addClass('show');
  18. agents += "<label for=\"agent\">" + select_agent + "</label>\r\n"
  19. agents += "<select id=\"agent\" name=\"agent\">\r\n"
  20. for(var i = 0; i<data.length; ++i){
  21. agents += "\t<option value=\"" + data[i]['id'] + "\"" + (data[i]['status']===0?" disabled":"") + ">" + data[i]['name'] +"</option>\r\n";
  22. if(data[i]['status'] == 1){
  23. ++agentsOnline;
  24. }
  25. }
  26. agents += "</select>";
  27. if(agentsOnline == 0){
  28. $("#options").removeClass('show').addClass('hide');
  29. $("#agents_offline").removeClass('hide').addClass('show');
  30. // Hide the sourcemod add admin form if all agents are offline.
  31. $("#addadmin_form").addClass('hide');
  32. $("#all_servers_offline").removeClass('hide').addClass('show');
  33. }else if($("#command option").length == 0){
  34. $("#options").removeClass('show').addClass('hide');
  35. $("#no_commands").removeClass('hide').addClass('show');
  36. }else{
  37. $("#select_agent").html(agents);
  38. }
  39. }).fail(function(){
  40. $("#loading_agents").removeClass('show').addClass('hide');
  41. $("#loading").removeClass('show').addClass('hide');
  42. $("#loading_failed").removeClass('hide').addClass('show');
  43. });
  44. // Handle the network_tools form.
  45. $("#network_tools").on("submit", function(e){
  46. var target = $("#remote_target").val();
  47. var agent = $("#agent").val();
  48. var command = $("#command").val();
  49. // Some validation browser-side. Still need to do the same server-side.
  50. if(target.length === 0){
  51. // target input is empty.
  52. $("#output").removeClass('hide').addClass('show').html("<pre>" + target_empty + "</pre>");
  53. }else if(agent.length === 0){
  54. // We'll only get to this point if there's no agents, or all agents are offline but the form was still submitted.
  55. $("#output").removeClass('hide').addClass('show').html("<pre>" + agent_invalid + "</pre>");
  56. }else if(command.length === 0){
  57. // We'll only get to this point if there's no command specified.
  58. $("#output").removeClass('hide').addClass('show').html("<pre>" + command_empty + "</pre>");
  59. }else{
  60. $("#loading").removeClass('hide').addClass('show');
  61. $("#output").removeClass('show').addClass('hide');
  62. $("#network_tools button").prop({disabled:true}); // Disable the submit button if we're about to post - preventing stuff being ran several times via spamming the button and/or enter.
  63. $.post("home.php?m=util&p=network_tools&type=cleared", $("#network_tools").serialize(), function(postCommand){
  64. $("#loading").removeClass('show').addClass('hide');
  65. $("#output").removeClass('hide').addClass('show').html("<pre>" + postCommand + "</pre>");
  66. $("#network_tools button").prop({disabled:false});
  67. }).fail(function(){
  68. $("#loading").removeClass('show').addClass('hide');
  69. $("#output").removeClass('hide').addClass('show').html("<pre>" + post_failed + "</pre>");
  70. $("#network_tools button").prop({disabled:false});
  71. });
  72. }
  73. e.preventDefault();
  74. });// ./end network_tools form handling.
  75. // ----- Sourcemod Admins -----
  76. $.getJSON("home.php?m=util&p=addadmin_helper&type=cleared", function(gs){
  77. if(gs.length === 0){
  78. $("#no_servers").removeClass('hide').addClass('show');
  79. }else{
  80. var games = "";
  81. $("#add_admin").removeClass('hide').addClass('show');
  82. games += "<label for=\"gameserver_id\">" + select_server + "</label>\r\n"
  83. games += "<select id=\"gameserver_id\" name=\"gameserver_id\">\r\n"
  84. games += "<option value=\"0\" selected>" + select_server_option + "</option>\r\n"
  85. for(var i = 0; i<gs.length; ++i){
  86. games += "\t<option value=\"" + gs[i]['home_id'] + "\">" + gs[i]['home_name'] +"</option>\r\n";
  87. }
  88. games += "</select>";
  89. $("#games").html(games);
  90. $("#gameserver_id").change(function(){
  91. var home = $("#gameserver_id").val();
  92. var gameserver_id = $("#gameserver_id").val();
  93. // although the disabled attribute is put on the option, set all the values to 0 if it's somehow chosen again via the form being edited
  94. if(gameserver_id == 0){
  95. $("#remote_server_id").val(0);
  96. $("#gameserver_name").val(0);
  97. $("#gameserver_ip").val(0);
  98. $("#gameserver_port").val(0);
  99. }else{
  100. for(var i = 0; i<gs.length; ++i){
  101. if(home === gs[i]['home_id']){
  102. $("option[value='0']").attr("disabled", "disabled");
  103. $("#remote_server_id").val(gs[i]['remote_server_id']);
  104. $("#gameserver_name").val(gs[i]['game_name']);
  105. $("#gameserver_ip").val(gs[i]['ip']);
  106. $("#gameserver_port").val(gs[i]['port']);
  107. break;
  108. }
  109. }
  110. }
  111. });
  112. }
  113. }); // ./end Sourcemod Admins
  114. $("#sourcemod_perms").change(function(){
  115. var sourcemod_perms = $("#sourcemod_perms").val();
  116. if(sourcemod_perms === 'root'){
  117. $("#sourcemod_flagList").removeClass('show').addClass('hide');
  118. $('.item input[type="checkbox"]').prop('checked', false);
  119. }else{
  120. $("#sourcemod_flagList").removeClass('hide').addClass('show');
  121. }
  122. });
  123. // Process the sourcemod admin form on submission.
  124. $("#addadmin_form").on("submit", function(e){
  125. $("#addadmin_form button").prop({disabled:true});
  126. var errors = 0;
  127. var remoteId = $("#remote_server_id").val();
  128. var gameName = $("#gameserver_name").val();
  129. var gameIp = $("#gameserver_ip").val();
  130. var gamePort = $("#gameserver_port").val();
  131. var addSteamid = $("#addSteamid").val();
  132. var immunity = $("#immunity").val();
  133. // Set the message divs back to defaults.
  134. $("#invalid_server").removeClass('show').addClass('hide');
  135. $("#invalid_steamid_admin").removeClass('show').addClass('hide');
  136. $("#invalid_response_admin").removeClass('show').addClass('hide');
  137. $("#invalid_immunity").removeClass('show').addClass('hide');
  138. $("#addadmin_response").removeClass('show').addClass('hide');
  139. if(remoteId.length === 0 || gameName.length === 0 || gameIp.length === 0 || gamePort.length === 0){
  140. $("#invalid_server").removeClass('hide').addClass('show');
  141. ++errors;
  142. }
  143. if(!(addSteamid.match(/^STEAM_[01]:[01]:\d+$/))){
  144. $("#invalid_steamid_admin").removeClass('hide').addClass('show');
  145. ++errors;
  146. }
  147. if(immunity.length > 2 || isNaN(immunity)){
  148. $("#invalid_immunity").removeClass('hide').addClass('show');
  149. ++errors;
  150. }
  151. if(errors === 0){
  152. $.post("home.php?m=util&p=addadmin_helper&type=cleared", $("#addadmin_form").serialize(), function(postCommand){
  153. $("#addadmin_response").removeClass('hide').addClass('show').html(postCommand);
  154. $("#addadmin_form button").prop({disabled:false});
  155. }).fail(function(){
  156. $("#invalid_response_admin").removeClass('hide').addClass('show');
  157. $("#addadmin_form button").prop({disabled:false});
  158. });
  159. }else{
  160. $("#addadmin_form button").prop({disabled:false});
  161. }
  162. e.preventDefault();
  163. }); // add_admin form handling
  164. // ----- AMX mod Admins -----
  165. $.getJSON("home.php?m=util&p=amx_addadmin_helper&type=cleared", function(gs){
  166. if(gs.length === 0){
  167. $("#amx_no_servers").removeClass('hide').addClass('show');
  168. }else{
  169. var games = "";
  170. $("#amx_add_admin").removeClass('hide').addClass('show');
  171. games += "<label for=\"amx_gameserver_id\">" + select_server + "</label>\r\n"
  172. games += "<select id=\"amx_gameserver_id\" name=\"amx_gameserver_id\">\r\n"
  173. games += "<option value=\"0\" selected>" + select_server_option + "</option>\r\n"
  174. for(var i = 0; i<gs.length; ++i){
  175. games += "\t<option value=\"" + gs[i]['home_id'] + "\">" + gs[i]['home_name'] +"</option>\r\n";
  176. }
  177. games += "</select>";
  178. $("#amx_games").html(games);
  179. $("#amx_gameserver_id").change(function(){
  180. var home = $("#amx_gameserver_id").val();
  181. var gameserver_id = $("#amx_gameserver_id").val();
  182. // although the disabled attribute is put on the option, set all the values to 0 if it's somehow chosen again via the form being edited
  183. if(gameserver_id == 0){
  184. $("#amx_remote_server_id").val(0);
  185. $("#amx_gameserver_name").val(0);
  186. $("#amx_gameserver_ip").val(0);
  187. $("#amx_gameserver_port").val(0);
  188. }else{
  189. for(var i = 0; i<gs.length; ++i){
  190. if(home === gs[i]['home_id']){
  191. $("option[value='0']").attr("disabled", "disabled");
  192. $("#amx_remote_server_id").val(gs[i]['remote_server_id']);
  193. $("#amx_gameserver_name").val(gs[i]['game_name']);
  194. $("#amx_gameserver_ip").val(gs[i]['ip']);
  195. $("#amx_gameserver_port").val(gs[i]['port']);
  196. break;
  197. }
  198. }
  199. }
  200. });
  201. }
  202. }); // ./end AMX mod Admins
  203. $("#amx_mod_perms").change(function(){
  204. var amx_mod_perms = $("#amx_mod_perms").val();
  205. if(amx_mod_perms === 'root'){
  206. $("#amx_mod_flagList").removeClass('show').addClass('hide');
  207. $('.amx_item input[type="checkbox"]').prop('checked', false);
  208. }else{
  209. $("#amx_mod_flagList").removeClass('hide').addClass('show');
  210. }
  211. });
  212. $("#amx_login_type").change(function(){
  213. var amx_login_type = $("#amx_login_type").val();
  214. if(amx_login_type === 'amx_login_steamid'){
  215. $("#amx_login_nick_pass").removeClass('show').addClass('hide');
  216. $("#amx_Nickname").prop('required',false);
  217. $("#amx_Password").prop('required',false);
  218. $("#amx_Steamid").prop('required',true);
  219. $("#amx_login_steamid").removeClass('hide').addClass('show');
  220. }else{
  221. $("#amx_login_steamid").removeClass('show').addClass('hide');
  222. $("#amx_Nickname").prop('required',true);
  223. $("#amx_Password").prop('required',true);
  224. $("#amx_Steamid").prop('required',false);
  225. $("#amx_login_nick_pass").removeClass('hide').addClass('show');
  226. }
  227. });
  228. // Process the amx mod admin form on submission.
  229. $("#amx_addadmin_form").on("submit", function(e){
  230. $("#amx_addadmin_form button").prop({disabled:true});
  231. var errors = 0;
  232. var remoteId = $("#amx_remote_server_id").val();
  233. var gameName = $("#amx_gameserver_name").val();
  234. var gameIp = $("#amx_gameserver_ip").val();
  235. var gamePort = $("#amx_gameserver_port").val();
  236. var login_type = $("#amx_login_type").val();
  237. // Set the message divs back to defaults.
  238. $("#amx_invalid_server").removeClass('show').addClass('hide');
  239. $("#amx_invalid_nickname_admin").removeClass('show').addClass('hide');
  240. $("#amx_invalid_password_admin").removeClass('show').addClass('hide');
  241. $("#amx_invalid_steamid_admin").removeClass('show').addClass('hide');
  242. $("#amx_invalid_response_admin").removeClass('show').addClass('hide');
  243. $("#amx_addadmin_response").removeClass('show').addClass('hide');
  244. if(login_type == 'amx_login_steamid')
  245. {
  246. var Steamid = $("#amx_Steamid").val();
  247. if(!(Steamid.match(/^STEAM_[01]:[01]:\d+$/))){
  248. $("#amx_invalid_steamid_admin").removeClass('hide').addClass('show');
  249. ++errors;
  250. }
  251. }
  252. else
  253. {
  254. var Nickname = $("#amx_Nickname").val();
  255. var Password = $("#amx_Password").val();
  256. if(!(Nickname.match(/^[^\s][A-zÀ-ÿ0-9 !@)(,}/|\.:?;{#$%&*+=-]{1,28}[^\s]$/))){
  257. $("#amx_invalid_nickname_admin").removeClass('hide').addClass('show');
  258. ++errors;
  259. }
  260. if(!(Password.match(/^[^\s][A-zÀ-ÿ0-9 !@)(,}/|\.:?;{#$%&*+=-]{1,28}[^\s]$/))){
  261. $("#amx_invalid_password_admin").removeClass('hide').addClass('show');
  262. ++errors;
  263. }
  264. }
  265. if(remoteId.length === 0 || gameName.length === 0 || gameIp.length === 0 || gamePort.length === 0){
  266. $("#amx_invalid_server").removeClass('hide').addClass('show');
  267. ++errors;
  268. }
  269. if(errors === 0){
  270. $.post("home.php?m=util&p=amx_addadmin_helper&type=cleared", $("#amx_addadmin_form").serialize(), function(postCommand){
  271. $("#amx_addadmin_response").removeClass('hide').addClass('show').html(postCommand);
  272. $("#amx_addadmin_form button").prop({disabled:false});
  273. }).fail(function(){
  274. $("#amx_invalid_response_admin").removeClass('hide').addClass('show');
  275. $("#amx_addadmin_form button").prop({disabled:false});
  276. });
  277. }else{
  278. $("#amx_addadmin_form button").prop({disabled:false});
  279. }
  280. e.preventDefault();
  281. }); // add_admin form handling
  282. // ----- Steam Converter -----
  283. $("#steam_converter").on("submit", function(e){
  284. $("#steam_converter button").prop({disabled:true});
  285. $.post("home.php?m=util&p=steamid_converter&type=cleared", $("#steam_converter").serialize(), function(steam_data){
  286. var json = $.parseJSON(steam_data);
  287. if(json.length === 0){
  288. $("#steam_info").removeClass('show').addClass('hide');
  289. $("#invalid_steamid").removeClass('hide').addClass('show');
  290. $("#invalid_response").removeClass('show').addClass('hide');
  291. $("#steam_converter button").prop({disabled:false});
  292. }else{
  293. $("#steam_info").removeClass('hide').addClass('show');
  294. $("#invalid_steamid").removeClass('show').addClass('hide');
  295. $("#invalid_response").removeClass('show').addClass('hide');
  296. $("#steamLink").html('<b>Profile Link:</b> ' + json.steamProfile);
  297. $("#steamId").html('<b>Legacy ID:</b> ' + json.steamId);
  298. $("#steamId3").html('<b>SteamID3:</b> ' + json.steamId3);
  299. $("#steamId64").html('<b>SteamID64:</b> ' + json.communityId);
  300. $("#steam_converter button").prop({disabled:false});
  301. }
  302. }).fail(function(){
  303. $("#invalid_steamid").removeClass('show').addClass('hide');
  304. $("#steam_info").removeClass('show').addClass('hide');
  305. $("#invalid_response").removeClass('hide').addClass('show');
  306. });
  307. e.preventDefault();
  308. }); // ./end steam_converter form handling.
  309. $("#your-address").click(function(){
  310. $("#remote_target").val($("#your-address").text());
  311. });
  312. });