api.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. function pingServer($hostname, $port) {
  3. $sock = socket_create(AF_INET, SOCK_STREAM, getprotobyname("tcp"));
  4. if (!$sock)
  5. return false;
  6. if (!@socket_connect($sock, $hostname, $port)) {
  7. error_log("Failed to connect to ${hostname}:${port}");
  8. return false;
  9. }
  10. socket_close($sock);
  11. return true;
  12. }
  13. if (isset($_GET["command"])) {
  14. switch ($_GET["command"]) {
  15. case "version":
  16. $fic = substr(file_get_contents("./.git/HEAD"), 5);
  17. if ($fic === FALSE) {
  18. header("HTTP/1.1 500 Server error");
  19. break;
  20. }
  21. $fic = file_get_contents("./.git/".trim($fic));
  22. if ($fic === FALSE) {
  23. header("HTTP/1.1 500 Server error");
  24. break;
  25. }
  26. echo json_encode(trim($fic));
  27. break;
  28. case "servers":
  29. require_once("./inc/servers.php");
  30. echo json_encode(getServers());
  31. break;
  32. case "channels":
  33. require_once("./inc/channels.php");
  34. echo json_encode(getChannels());
  35. break;
  36. case "ping":
  37. require_once("./.htconfig.php");
  38. require_once("inc/servers.php");
  39. if (!isset($_GET["key"]) || $_GET["key"] !== API_KEY) {
  40. $state = getServersState();
  41. if (!$state) {
  42. header("HTTP/0.0 500 Internal Server Error");
  43. die;
  44. }
  45. echo json_encode($state);
  46. die;
  47. }
  48. require_once("./inc/servers.php");
  49. $result = [];
  50. foreach (getServers() as $i => $attrs) {
  51. $success = false;
  52. foreach ($attrs["ports"] as $port => $unused) {
  53. if (pingServer($i, $port)) {
  54. $success = true;
  55. break;
  56. }
  57. }
  58. $result[$i] = $success;
  59. }
  60. $result = array(
  61. "result" => $result,
  62. "date" => time()
  63. );
  64. writeServersState($result);
  65. }
  66. }
  67. ?>