UserController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. function ($query) {
  15. $query->where("sort", "=", 0)
  16. ->orWhere("sort", "=", 10);
  17. }
  18. )->first();
  19. $node->node_heartbeat=time();
  20. $node->save();
  21. if ($node->node_group!=0) {
  22. $users_raw = User::where(
  23. function ($query) use ($node){
  24. $query->where(
  25. 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. function ($query) use ($node){
  36. $query->where(
  37. 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) {
  45. if ($node->node_bandwidth_limit<$node->node_bandwidth) {
  46. $users=null;
  47. $res = [
  48. "ret" => 1,
  49. "data" => $users
  50. ];
  51. return $this->echoJson($response, $res);
  52. }
  53. }
  54. $key_list = array('method', 'id', 'port', 'passwd', 'u', 'd', 'enable',
  55. 't', 'transfer_enable', 'switch');
  56. $users_output = array();
  57. foreach ($users as $user_raw) {
  58. if ($user_raw->transfer_enable > $user_raw->u + $user_raw->d) {
  59. $user_raw = Tools::keyFilter($user_raw, $key_list);
  60. array_push($users_output, $user_raw);
  61. }
  62. }
  63. $res = [
  64. "ret" => 1,
  65. "msg" => "ok",
  66. "data" => $users
  67. ];
  68. return $this->echoJson($response, $res);
  69. }
  70. // Update Traffic
  71. public function addTraffic($request, $response, $args)
  72. {
  73. $id = $args['id'];
  74. $u = $request->getParam('u');
  75. $d = $request->getParam('d');
  76. $nodeId = $request->getParam('node_id');
  77. $node = Node::find($nodeId);
  78. $node->node_bandwidth=$node->node_bandwidth+$d+$u;
  79. $node->save();
  80. $rate = $node->traffic_rate;
  81. $user = User::find($id);
  82. $user->t = time();
  83. $user->u = $user->u + ($u * $rate);
  84. $user->d = $user->d + ($d * $rate);
  85. if (!$user->save()) {
  86. $res = [
  87. "ret" => 0,
  88. "msg" => "update failed",
  89. ];
  90. //return $this->echoJson($response, $res);
  91. }
  92. // log
  93. $traffic = new TrafficLog();
  94. $traffic->user_id = $id;
  95. $traffic->u = $u;
  96. $traffic->d = $d;
  97. $traffic->node_id = $nodeId;
  98. $traffic->rate = $rate;
  99. $traffic->traffic = Tools::flowAutoShow(($u + $d) * $rate);
  100. $traffic->log_time = time();
  101. $traffic->save();
  102. $res = [
  103. "ret" => 1,
  104. "msg" => "ok",
  105. ];
  106. return $this->echoJson($response, $res);
  107. }
  108. }