Index.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use app\common\model\UserTraffic;
  5. use fast\Random;
  6. use think\Queue;
  7. /**
  8. * 首页接口
  9. */
  10. class Index extends Api
  11. {
  12. protected $noNeedLogin = ['*'];
  13. protected $noNeedRight = ['*'];
  14. /**
  15. * 首页
  16. *
  17. */
  18. public function index()
  19. {
  20. $proxy_ip = $this->request->request('local_addr');
  21. $user_ip = $this->request->request('client_addr');
  22. $service = $this->request->request('service');
  23. $is_sps = $this->request->request('sps')=='1';
  24. $account = $this->request->request('user');
  25. $password = $this->request->request('pass');
  26. $target = $this->request->request('target');
  27. if (!$account || !$password) {
  28. return $this->err();
  29. }
  30. $ret = $this->auth->login($account, $password);
  31. if ($ret) {
  32. $user = \app\common\model\User::where(['username'=>$account])->find();
  33. $nowTime = time();
  34. $usable = UserTraffic::where('uid', $user->id)
  35. ->where('is_usable', '1')
  36. ->where('start_time', '<', $nowTime)
  37. ->where('expired_time', '>', $nowTime)
  38. ->find();
  39. if (!$usable) {
  40. return $this->err();
  41. }
  42. $user_ip = explode(":",$user_ip)[0];
  43. \app\common\model\User::where(['id'=>$this->auth->id])->update(['loginip'=>$user_ip]);
  44. header("userconns:1000"); // 用户的最大连接数,不限制为0或者不设置这个头部。
  45. header("ipconns:2000"); // 用户IP的最大连接数,不限制为0或者不设置这个头部。
  46. //header("userrate:3000"); // 用户的单个TCP连接速率限制,单位:字节/秒,不限制为0或者不设置这个头部。
  47. //header("iprate:8000"); // 用户IP的单个TCP连接速率限制,单位:字节/秒,不限制为0或者不设置这个头部。
  48. //header("UPSTREAM:http://127.0.0.1:3500?parent-type=tcp"); // 使用的上级,没有为空,或者不设置这个头部。
  49. header("HTTP/1.1 204 No Content");
  50. exit;
  51. return 'true';
  52. } else {
  53. return $this->err();
  54. }
  55. }
  56. /**
  57. * 功能: 流量上报, 生成队列, 后台进程处理流量数据
  58. * @return bool|void
  59. */
  60. public function traffic()
  61. {
  62. $jobData = $this->request->request();
  63. $jobHandlerClassName = "app\job\FlowLog";
  64. $jobName = "FlowLog";
  65. $jobData['time'] = time();
  66. $ret = Queue::push($jobHandlerClassName, $jobData, $jobName);
  67. if ($ret) {
  68. return header('HTTP/1.0 204 Success');
  69. }
  70. return false;
  71. }
  72. // 状态上报
  73. public function status()
  74. {
  75. #接收proxy post过来的数据
  76. $userArr = $this->request->request('user');
  77. $ipArr = $this->request->request('ip');
  78. //无效用户列表
  79. $badUsers=[];
  80. $userArr = explode(',',$userArr);
  81. $badUsers = \app\common\model\User::whereIn('mobile', $userArr)->where("traffic > ifnull(total_traffic, traffic-1)")->column('mobile');
  82. $data = ["user"=>implode(",",$badUsers ?? []),"ip"=>""];
  83. // $data = ["user"=>implode(",",[]),"ip"=>""];
  84. echo json_encode($data);
  85. exit;
  86. }
  87. public function birth()
  88. {
  89. $username = time().Random::numeric(3);
  90. $password = Random::numeric(6);
  91. $email = $password."@qq.com";
  92. $mobile = Random::numeric(6).Random::numeric(5);
  93. $ret = $this->auth->register($username, $password, $email, $mobile, []);
  94. if ($ret) {
  95. $user = $this->auth->getUserinfo();
  96. $data = ['userinfo' => $user];
  97. $this->success(__('Sign up successful'), $data);
  98. } else {
  99. $this->error($this->auth->getError());
  100. }
  101. }
  102. public function err(){
  103. header("HTTP/1.1 404 No Content");
  104. return "";
  105. }
  106. }