1
0

blocked.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. print "<div id=\"cont\">";
  13. print "<font color=red><b>".WEB_auth_unknown."</b></font>";
  14. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.simple.php");
  15. exit;
  16. }
  17. // === 2. Преобразуем IP в BIGINT (беззнаковый) ===
  18. $ip_long = sprintf('%u', ip2long($auth_ip));
  19. // === 3. Находим авторизацию и пользователя за один JOIN ===
  20. $sql = "
  21. SELECT
  22. ul.id AS user_id,
  23. ul.login,
  24. ul.description,
  25. ul.enabled AS user_enabled,
  26. ul.blocked AS user_blocked,
  27. ul.month_quota,
  28. ul.day_quota,
  29. ul.filter_group_id,
  30. ul.queue_id,
  31. ua.id AS auth_id,
  32. ua.ip_int,
  33. ua.enabled AS auth_enabled,
  34. ua.blocked AS auth_blocked,
  35. ua.month_quota AS auth_month_quota,
  36. ua.day_quota AS auth_day_quota
  37. FROM user_auth ua
  38. JOIN user_list ul ON ua.user_id = ul.id
  39. WHERE ua.ip_int = ? AND ua.deleted = 0 AND ul.deleted = 0
  40. ";
  41. $record = get_record_sql($db_link, $sql, [$ip_long]);
  42. if (!$record) {
  43. print "<div id=\"cont\">";
  44. print "<font color=red><b>".WEB_cell_ip . "&nbsp;" . htmlspecialchars($auth_ip, ENT_QUOTES) . "&nbsp; - " . WEB_unknown . "!</b></font>";
  45. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.simple.php");
  46. exit;
  47. }
  48. // === 4. Подготавливаем данные ===
  49. $auth_id = $record['auth_id'];
  50. $user_id = $record['user_id'];
  51. $KB = get_const('KB') ? 1024 : 1000;
  52. // Квоты пользователя
  53. $user_month_quota = ($record['month_quota'] ?? 0) * $KB * $KB;
  54. $user_day_quota = ($record['day_quota'] ?? 0) * $KB * $KB;
  55. // Квоты IP (auth)
  56. $auth_month_quota = ($record['auth_month_quota'] ?? $record['month_quota'] ?? 0) * $KB * $KB;
  57. $auth_day_quota = ($record['auth_day_quota'] ?? $record['day_quota'] ?? 0) * $KB * $KB;
  58. // === 5. Вычисляем временные границы ===
  59. $now = new DateTime();
  60. $date1 = $now->format('Y-m-d 00:00:00');
  61. $date2 = $now->format('Y-m-d 23:59:59');
  62. $date1m = $now->format('Y-m-01 00:00:00');
  63. $date2m = (clone $now)->modify('last day of this month')->format('Y-m-d 23:59:59');
  64. // === 6. Получаем трафик за день и месяц ===
  65. $day_traffic = get_record_sql($db_link, "
  66. SELECT
  67. SUM(CASE WHEN ua.id = ? THEN us.byte_in ELSE 0 END) AS auth_in,
  68. SUM(CASE WHEN ua.id = ? THEN us.byte_out ELSE 0 END) AS auth_out,
  69. SUM(us.byte_in) AS user_in,
  70. SUM(us.byte_out) AS user_out
  71. FROM user_stats us
  72. JOIN user_auth ua ON us.auth_id = ua.id
  73. WHERE us.ts >= ? AND us.ts < ? AND ua.user_id = ? AND ua.deleted = 0
  74. ", [$auth_id, $auth_id, $date1, $date2, $user_id]);
  75. $month_traffic = get_record_sql($db_link, "
  76. SELECT
  77. SUM(CASE WHEN ua.id = ? THEN us.byte_in ELSE 0 END) AS auth_in,
  78. SUM(CASE WHEN ua.id = ? THEN us.byte_out ELSE 0 END) AS auth_out,
  79. SUM(us.byte_in) AS user_in,
  80. SUM(us.byte_out) AS user_out
  81. FROM user_stats us
  82. JOIN user_auth ua ON us.auth_id = ua.id
  83. WHERE us.ts >= ? AND us.ts < ? AND ua.user_id = ? AND ua.deleted = 0
  84. ", [$auth_id, $auth_id, $date1m, $date2m, $user_id]);
  85. $day_auth_sum_in = $day_traffic['auth_in'] ?? 0;
  86. $day_auth_sum_out = $day_traffic['auth_out'] ?? 0;
  87. $day_user_sum_in = $day_traffic['user_in'] ?? 0;
  88. $day_user_sum_out = $day_traffic['user_out'] ?? 0;
  89. $month_auth_sum_in = $month_traffic['auth_in'] ?? 0;
  90. $month_auth_sum_out = $month_traffic['auth_out'] ?? 0;
  91. $month_user_sum_in = $month_traffic['user_in'] ?? 0;
  92. $month_user_sum_out = $month_traffic['user_out'] ?? 0;
  93. ?>
  94. <div id="cont">
  95. <table>
  96. <tr>
  97. <td><b><?php echo WEB_msg_now; ?></b></td>
  98. <td><?php print GetNowTimeString(); ?></td>
  99. </tr>
  100. <tr>
  101. <td><b><?php echo WEB_cell_login; ?></b></td>
  102. <td><?php print htmlspecialchars($record['login'], ENT_QUOTES); ?></td>
  103. </tr>
  104. <tr>
  105. <td><b><?php echo WEB_cell_description; ?></b></td>
  106. <td><?php print htmlspecialchars($record['description'], ENT_QUOTES); ?></td>
  107. </tr>
  108. <tr>
  109. <td><?php echo WEB_msg_access_login; ?></td>
  110. <td><b>
  111. <?php
  112. if ($record['user_enabled'] && !$record['user_blocked']) {
  113. echo WEB_msg_enabled;
  114. } else {
  115. if (!$record['user_enabled']) {
  116. echo '<font color="red">' . WEB_msg_disabled . '</font>&nbsp;';
  117. }
  118. if ($record['user_blocked']) {
  119. echo '<font color="red">' . WEB_msg_traffic_blocked . '</font>';
  120. }
  121. }
  122. ?>
  123. </b></td>
  124. </tr>
  125. <!-- Аналогично для IP-статуса -->
  126. <tr>
  127. <td><?php echo WEB_msg_access_ip; ?></td>
  128. <td><b>
  129. <?php
  130. $user_active = $record['user_enabled'] && !$record['user_blocked'];
  131. $auth_active = $user_active && $record['auth_enabled'] && !$record['auth_blocked'];
  132. if ($auth_active) {
  133. echo WEB_msg_enabled;
  134. } else {
  135. // Если пользователь неактивен — IP выключен из-за пользователя
  136. if (!$user_active) {
  137. echo '<font color="red">' . WEB_msg_disabled . '</font>&nbsp;';
  138. } elseif (!$record['auth_enabled']) {
  139. echo '<font color="red">' . WEB_msg_disabled . '</font>&nbsp;';
  140. }
  141. if ($record['auth_blocked']) {
  142. echo '<font color="red">' . WEB_msg_traffic_blocked . '</font>';
  143. }
  144. }
  145. ?>
  146. </b></td>
  147. </tr>
  148. <tr><td><?php echo WEB_cell_filter; ?></td><td><?php print get_group($db_link, $record["filter_group_id"]); ?> </td></tr>
  149. <tr><td><?php echo WEB_cell_shaper; ?></td><td><?php print get_queue($db_link, $record["queue_id"]); ?></td></tr>
  150. <tr><td><?php echo WEB_cell_login_quote_month; ?> </td><td><?php print fbytes($user_month_quota); ?> </td></tr>
  151. <tr><td><?php echo WEB_cell_login_quote_day; ?> </td><td><?php print fbytes($user_day_quota); ?> </td></tr>
  152. <tr><td><?php echo WEB_cell_ip_quote_month; ?> </td><td><?php print fbytes($auth_month_quota); ?> </td></tr>
  153. <tr><td><?php echo WEB_cell_ip_quote_day; ?> </td><td><?php print fbytes($auth_day_quota); ?> </td></tr>
  154. <!-- Трафик -->
  155. <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>
  156. <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>
  157. <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>
  158. <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>
  159. <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>
  160. <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>
  161. </table>
  162. <?php
  163. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.simple.php");
  164. ?>