UserController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace App\Controllers\Mu;
  3. use App\Models\Node;
  4. use App\Models\TrafficLog;
  5. use App\Models\User;
  6. use App\Controllers\BaseController;
  7. use App\Utils\Tools;
  8. class UserController extends BaseController
  9. {
  10. // User List
  11. public function index($request, $response, $args)
  12. {
  13. $node = Node::where('node_ip', '=', $_SERVER['REMOTE_ADDR'])->where(
  14. static function ($query) {
  15. $query->where('sort', '=', 0)
  16. ->orWhere('sort', '=', 10)->orWhere('sort', '=', 12);
  17. }
  18. )->first();
  19. $node->node_heartbeat = time();
  20. $node->save();
  21. if ($node->node_group != 0) {
  22. $users_raw = User::where(
  23. static function ($query) use ($node) {
  24. $query->where(
  25. static function ($query1) use ($node) {
  26. $query1->where('class', '>=', $node->node_class)
  27. ->where('node_group', '=', $node->node_group);
  28. }
  29. )->orwhere('is_admin', 1);
  30. }
  31. )
  32. ->where('enable', 1)->where('expire_in', '>', date('Y-m-d H:i:s'))->get();
  33. } else {
  34. $users_raw = User::where(
  35. static function ($query) use ($node) {
  36. $query->where(
  37. static function ($query1) use ($node) {
  38. $query1->where('class', '>=', $node->node_class);
  39. }
  40. )->orwhere('is_admin', 1);
  41. }
  42. )->where('enable', 1)->where('expire_in', '>', date('Y-m-d H:i:s'))->get();
  43. }
  44. if (($node->node_bandwidth_limit != 0) && $node->node_bandwidth_limit < $node->node_bandwidth) {
  45. $users = null;
  46. $res = [
  47. 'ret' => 1,
  48. 'data' => $users
  49. ];
  50. return $this->echoJson($response, $res);
  51. }
  52. $key_list = array('method', 'id', 'port', 'passwd', 'u', 'd', 'enable',
  53. 't', 'transfer_enable', 'switch', 'email');
  54. $users_output = array();
  55. foreach ($users_raw as $user_raw) {
  56. if ($user_raw->transfer_enable > $user_raw->u + $user_raw->d) {
  57. $user_raw = Tools::keyFilter($user_raw, $key_list);
  58. $users_output[] = $user_raw;
  59. }
  60. }
  61. $res = [
  62. 'ret' => 1,
  63. 'msg' => 'ok',
  64. 'data' => $users_output
  65. ];
  66. return $this->echoJson($response, $res);
  67. }
  68. // Update Traffic
  69. public function addTraffic($request, $response, $args)
  70. {
  71. $id = $args['id'];
  72. $u = $request->getParam('u');
  73. $d = $request->getParam('d');
  74. $nodeId = $request->getParam('node_id');
  75. $node = Node::find($nodeId);
  76. $node->node_bandwidth = $node->node_bandwidth + $d + $u;
  77. $node->save();
  78. $rate = $node->traffic_rate;
  79. $user = User::find($id);
  80. $user->t = time();
  81. $user->u += ($u * $rate);
  82. $user->d += ($d * $rate);
  83. if (!$user->save()) {
  84. $res = [
  85. 'ret' => 0,
  86. 'msg' => 'update failed',
  87. ];
  88. //return $this->echoJson($response, $res);
  89. }
  90. // log
  91. $traffic = new TrafficLog();
  92. $traffic->user_id = $id;
  93. $traffic->u = $u;
  94. $traffic->d = $d;
  95. $traffic->node_id = $nodeId;
  96. $traffic->rate = $rate;
  97. $traffic->traffic = Tools::flowAutoShow(($u + $d) * $rate);
  98. $traffic->log_time = time();
  99. $traffic->save();
  100. $res = [
  101. 'ret' => 1,
  102. 'msg' => 'ok',
  103. ];
  104. return $this->echoJson($response, $res);
  105. }
  106. }