blocked.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. define("CONFIG", 1);
  3. define("SQL", 1);
  4. require_once ($_SERVER['DOCUMENT_ROOT']."/cfg/config.php");
  5. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/sql.php");
  6. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/common.php");
  7. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
  8. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header_public.php");
  9. // === 1. Безопасное получение IP ===
  10. $auth_ip = get_user_ip();
  11. if (!$auth_ip || !filter_var($auth_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
  12. die("<font color=red><b>Invalid IP detected!</b></font>");
  13. }
  14. // === 2. Преобразуем IP в BIGINT (беззнаковый) ===
  15. $ip_long = sprintf('%u', ip2long($auth_ip));
  16. // === 3. Находим авторизацию и пользователя за один JOIN ===
  17. $sql = "
  18. SELECT
  19. ua.*, ul.*
  20. FROM user_auth ua
  21. JOIN user_list ul ON ua.user_id = ul.id
  22. WHERE ua.ip_int = ? AND ua.deleted = 0 AND ul.deleted = 0
  23. ";
  24. $record = get_record_sql($db_link, $sql, [$ip_long]);
  25. if (!$record) {
  26. die("<font color=red><b>" . WEB_cell_ip . "&nbsp;" . htmlspecialchars($auth_ip, ENT_QUOTES) . "&nbsp; - " . WEB_unknown . "!</b></font>");
  27. }
  28. // === 4. Подготавливаем данные ===
  29. $id = $record['id'];
  30. $user_id = $record['user_id'];
  31. $KB = get_const('KB') ? 1024 : 1000;
  32. // Квоты пользователя
  33. $user_month_quota = ($record['month_quota'] ?? 0) * $KB * $KB;
  34. $user_day_quota = ($record['day_quota'] ?? 0) * $KB * $KB;
  35. // Квоты IP (auth)
  36. $auth_month_quota = ($record['auth_month_quota'] ?? $record['month_quota'] ?? 0) * $KB * $KB;
  37. $auth_day_quota = ($record['auth_day_quota'] ?? $record['day_quota'] ?? 0) * $KB * $KB;
  38. // === 5. Получаем трафик за день и месяц за 2 запроса (без циклов!) ===
  39. $params_day = [$date1, $date2, $user_id];
  40. $params_month = [$date1m, $date2m, $user_id];
  41. // Трафик по всем auth этого пользователя
  42. $day_traffic = get_record_sql($db_link, "
  43. SELECT
  44. SUM(CASE WHEN ua.id = ? THEN us.byte_in ELSE 0 END) AS auth_in,
  45. SUM(CASE WHEN ua.id = ? THEN us.byte_out ELSE 0 END) AS auth_out,
  46. SUM(us.byte_in) AS user_in,
  47. SUM(us.byte_out) AS user_out
  48. FROM user_stats us
  49. JOIN user_auth ua ON us.auth_id = ua.id
  50. WHERE us.ts >= ? AND us.ts < ? AND ua.user_id = ? AND ua.deleted = 0
  51. ", [$id, $id, $date1, $date2, $user_id]);
  52. $month_traffic = get_record_sql($db_link, "
  53. SELECT
  54. SUM(CASE WHEN ua.id = ? THEN us.byte_in ELSE 0 END) AS auth_in,
  55. SUM(CASE WHEN ua.id = ? THEN us.byte_out ELSE 0 END) AS auth_out,
  56. SUM(us.byte_in) AS user_in,
  57. SUM(us.byte_out) AS user_out
  58. FROM user_stats us
  59. JOIN user_auth ua ON us.auth_id = ua.id
  60. WHERE us.ts >= ? AND us.ts < ? AND ua.user_id = ? AND ua.deleted = 0
  61. ", [$id, $id, $date1m, $date2m, $user_id]);
  62. $day_auth_sum_in = $day_traffic['auth_in'] ?? 0;
  63. $day_auth_sum_out = $day_traffic['auth_out'] ?? 0;
  64. $day_user_sum_in = $day_traffic['user_in'] ?? 0;
  65. $day_user_sum_out = $day_traffic['user_out'] ?? 0;
  66. $month_auth_sum_in = $month_traffic['auth_in'] ?? 0;
  67. $month_auth_sum_out = $month_traffic['auth_out'] ?? 0;
  68. $month_user_sum_in = $month_traffic['user_in'] ?? 0;
  69. $month_user_sum_out = $month_traffic['user_out'] ?? 0;
  70. ?>
  71. <div id="cont">
  72. <table>
  73. <tr>
  74. <td><b><?php echo WEB_msg_now; ?></b></td>
  75. <td><?php print GetNowTimeString(); ?></td>
  76. </tr>
  77. <tr>
  78. <td><b><?php echo WEB_cell_login; ?></b></td>
  79. <td><?php print htmlspecialchars($record['login'], ENT_QUOTES); ?></td>
  80. </tr>
  81. <tr>
  82. <td><b><?php echo WEB_cell_fio; ?></b></td>
  83. <td><?php print htmlspecialchars($record['fio'], ENT_QUOTES); ?></td>
  84. </tr>
  85. <tr>
  86. <td><?php echo WEB_msg_access_login; ?></td>
  87. <td><b>
  88. <?php if ($record['enabled'] && !$record['blocked']): ?>
  89. <?php echo WEB_msg_enabled; ?>
  90. <?php else: ?>
  91. <?php if (!$record['enabled']): ?>
  92. <font color="red"><?php echo WEB_msg_disabled; ?></font>&nbsp;
  93. <?php endif; ?>
  94. <?php if ($record['blocked']): ?>
  95. <font color="red"><?php echo WEB_msg_traffic_blocked; ?></font>
  96. <?php endif; ?>
  97. <?php endif; ?>
  98. </b></td>
  99. </tr>
  100. <!-- Аналогично для IP-статуса -->
  101. <tr>
  102. <td><?php echo WEB_msg_access_ip; ?></td>
  103. <td><b>
  104. <?php if ($record['enabled'] && !$record['blocked'] && $record['auth_enabled'] /*?*/): ?>
  105. <?php echo WEB_msg_enabled; ?>
  106. <?php else: ?>
  107. <?php if (!$record['enabled'] /* или auth_enabled */): ?>
  108. <font color="red"><?php echo WEB_msg_disabled; ?></font>&nbsp;
  109. <?php endif; ?>
  110. <?php if ($record['auth_blocked'] /*?*/): ?>
  111. <font color="red"><?php echo WEB_msg_traffic_blocked; ?></font>
  112. <?php endif; ?>
  113. <?php endif; ?>
  114. </b></td>
  115. </tr>
  116. <tr><td><?php echo WEB_cell_filter; ?></td><td><?php print get_group($db_link, $record["filter_group_id"]); ?> </td></tr>
  117. <tr><td><?php echo WEB_cell_shaper; ?></td><td><?php print get_queue($db_link, $record["queue_id"]); ?></td></tr>
  118. <tr><td><?php echo WEB_cell_login_quote_month; ?> </td><td><?php print fbytes($user_month_quota); ?> </td></tr>
  119. <tr><td><?php echo WEB_cell_login_quote_day; ?> </td><td><?php print fbytes($user_day_quota); ?> </td></tr>
  120. <tr><td><?php echo WEB_cell_ip_quote_month; ?> </td><td><?php print fbytes($auth_month_quota); ?> </td></tr>
  121. <tr><td><?php echo WEB_cell_ip_quote_day; ?> </td><td><?php print fbytes($auth_day_quota); ?> </td></tr>
  122. <!-- Трафик -->
  123. <tr class='data'><td><b><?php echo WEB_traffic_stats . " " . WEB_cell_ip; ?></b></td><td><?php echo htmlspecialchars($auth_ip, ENT_QUOTES); ?></td></tr>
  124. <tr class='data'><td><?php echo WEB_public_day_traffic; ?></td><td><?php echo fbytes($day_auth_sum_in) . " / " . fbytes($day_auth_sum_out); ?></td></tr>
  125. <tr class='data'><td><?php echo WEB_public_month_traffic; ?></td><td><?php echo fbytes($month_auth_sum_in) . " / " . fbytes($month_auth_sum_out); ?></td></tr>
  126. <tr class='data'><td><b><?php echo WEB_traffic_stats . " " . WEB_cell_login; ?></b></td><td><?php echo htmlspecialchars($record['login'], ENT_QUOTES); ?></td></tr>
  127. <tr class='data'><td><?php echo WEB_public_day_traffic; ?></td><td><?php echo fbytes($day_user_sum_in) . " / " . fbytes($day_user_sum_out); ?></td></tr>
  128. <tr class='data'><td><?php echo WEB_public_month_traffic; ?></td><td><?php echo fbytes($month_user_sum_in) . " / " . fbytes($month_user_sum_out); ?></td></tr>
  129. </table>
  130. <?php
  131. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.php");
  132. ?>