V2rayController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Components\Yzy;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Models\Coupon;
  6. use App\Http\Models\CouponLog;
  7. use App\Http\Models\Goods;
  8. use App\Http\Models\GoodsLabel;
  9. use App\Http\Models\Order;
  10. use App\Http\Models\Payment;
  11. use App\Http\Models\PaymentCallback;
  12. use App\Http\Models\ReferralLog;
  13. use App\Http\Models\SsNode;
  14. use App\Http\Models\User;
  15. use App\Http\Models\UserLabel;
  16. use Illuminate\Http\Request;
  17. use Log;
  18. use DB;
  19. class V2rayController extends Controller
  20. {
  21. protected static $config;
  22. function __construct()
  23. {
  24. self::$config = $this->systemConfig();
  25. }
  26. //V2ray 用户
  27. public function users(Request $request)
  28. {
  29. $node_id = $request->route('id');
  30. $ssr_node = SsNode::query()->where('id', $node_id)->first(); // 节点是否存在
  31. if ($ssr_node == null) {
  32. $res = [
  33. "ret" => 0
  34. ];
  35. return Response::json($res, 400);
  36. }
  37. // 找出该节点的标签id
  38. $ssr_node_label = SsNodeLabel::query()->where('node_id', $node_id)->pluck('label_id');
  39. //找出有这个标签的用户
  40. $user_with_label = UserLabel::query()->whereIn('label_id', $ssr_node_label)->pluck('user_id');
  41. //提取用户信息
  42. $userids = User::query()->whereIn('id', $user_with_label)->where('enable', 1)->where('id', '<>', self::$config['free_node_users_id'])->pluck('id')->toArray();
  43. $users = User::query()->where('id', '<>', self::$config['free_node_users_id'])->select(
  44. "id", "username", "passwd", "t", "u", "d", "transfer_enable",
  45. "port", "protocol", "obfs", "enable", "expire_time as expire_time_d", "method",
  46. "v2ray_uuid", "v2ray_level", "v2ray_alter_id")->get();
  47. $data = [];
  48. foreach ($users as $user) {
  49. //datetime 转timestamp
  50. $user['switch'] = 1;
  51. $user['email'] = $user['username'];
  52. $user['expire_time'] = strval((new \DateTime($user['expire_time_d']))->getTimestamp());
  53. if (in_array($user->id, $userids)) {
  54. $user->enable = 1;
  55. } else {
  56. $user->enable = 0;
  57. }
  58. //v2ray用户信息
  59. $user->v2ray_user = [
  60. "uuid" => $user->v2ray_uuid,
  61. "email" => sprintf("%[email protected]", $user->v2ray_uuid),
  62. "alter_id" => $user->v2ray_alter_id,
  63. "level" => $user->v2ray_level,
  64. ];
  65. array_push($data, $user);
  66. }
  67. if (self::$config['is_free_node']) {
  68. if (self::$config['free_node_id'] == $node_id) {
  69. $user = User::query()->whereIn('id', $user_with_label)->where('id', self::$config['free_node_users_id'])->select(
  70. "id", "enable", "username", "passwd", "t", "u", "d", "transfer_enable",
  71. "port", "protocol", "obfs", "enable", "expire_time as expire_time_d", "method",
  72. "v2ray_uuid", "v2ray_level", "v2ray_alter_id")->first();
  73. //datetime 转timestamp
  74. $user['switch'] = 1;
  75. $user['email'] = $user['username'];
  76. $user['expire_time'] = strval((new \DateTime($user['expire_time_d']))->getTimestamp());
  77. //v2ray用户信息
  78. $user->v2ray_user = [
  79. "uuid" => $user->v2ray_uuid,
  80. "email" => sprintf("%[email protected]", $user->v2ray_uuid),
  81. "alter_id" => $user->v2ray_alter_id,
  82. "level" => $user->v2ray_level,
  83. ];
  84. array_push($data, $user);
  85. }
  86. }
  87. $load = '1';
  88. $uptime = time();
  89. $log = new SsNodeInfo();
  90. $log->node_id = $node_id;
  91. $log->load = $load;
  92. $log->uptime = $uptime;
  93. $log->log_time = time();
  94. $log->save();
  95. $res = [
  96. 'msg' => 'ok',
  97. 'data' => $data,
  98. ];
  99. return Response::json($res);
  100. }
  101. //写在线用户日志
  102. public function onlineUserLog(Request $request)
  103. {
  104. $node_id = $request->route('id');
  105. $count = $request->get('count');
  106. $log = new SsNodeOnlineLog();
  107. $log->node_id = $node_id;
  108. $log->online_user = $count;
  109. $log->log_time = time();
  110. if (!$log->save()) {
  111. $res = [
  112. "ret" => 0,
  113. "msg" => "update failed",
  114. ];
  115. return response()->json($res);
  116. }
  117. $res = [
  118. "ret" => 1,
  119. "msg" => "ok",
  120. ];
  121. return response()->json($res);
  122. }
  123. //节点信息
  124. public function info(Request $request)
  125. {
  126. $node_id = $request->route('id');
  127. $load = $request->get('load');
  128. $uptime = $request->get('uptime');
  129. $log = new SsNodeInfo();
  130. $log->node_id = $node_id;
  131. $log->load = $load;
  132. $log->uptime = $uptime;
  133. $log->log_time = time();
  134. if (!$log->save()) {
  135. $res = [
  136. "ret" => 0,
  137. "msg" => "update failed",
  138. ];
  139. return response()->json($res);
  140. }
  141. $res = [
  142. "ret" => 1,
  143. "msg" => "ok",
  144. ];
  145. return response()->json($res);
  146. }
  147. //PostTraffic
  148. public function postTraffic(Request $request)
  149. {
  150. $nodeId = $request->route('id');
  151. $node = SsNode::query()->where('id', $nodeId)->first();
  152. $rate = $node->traffic_rate;
  153. $input = $request->getContent();
  154. $datas = json_decode($input, true);
  155. foreach ($datas as $data) {
  156. $user = User::query()->where('id', $data['user_id'])->first();
  157. if (!$user) {
  158. continue;
  159. }
  160. $user->t = time();
  161. $user->u = $user->u + ($data['u'] * $rate);
  162. $user->d = $user->d + ($data['d'] * $rate);
  163. $user->save();
  164. // 写usertrafficlog
  165. $totalTraffic = flowAutoShow(($data['u'] + $data['d']) * $rate);
  166. $traffic = new UserTrafficLog();
  167. $traffic->user_id = $data['user_id'];
  168. $traffic->u = $data['u'];
  169. $traffic->d = $data['d'];
  170. $traffic->node_id = $nodeId;
  171. $traffic->rate = $rate;
  172. $traffic->traffic = $totalTraffic;
  173. $traffic->log_time = time();
  174. $traffic->save();
  175. }
  176. $res = [
  177. 'ret' => 1,
  178. "msg" => "ok",
  179. ];
  180. return response()->json($res);
  181. }
  182. //V2ray Users
  183. public function v2rayUsers(Request $request)
  184. {
  185. $node = SsNode::query()->where('id', $request->route('id'))->first();
  186. $users = User::query()->where('enable', 1)->where('id', '<>', self::$config['free_node_users_id'])->get();
  187. $v = new V2rayGenerator();
  188. $v->setPort($node->v2ray_port);
  189. foreach ($users as $user) {
  190. $email = sprintf("%[email protected]", $user->v2ray_uuid);
  191. $v->addUser($user->v2ray_uuid, $user->v2ray_level, $user->v2ray_alter_id, $email);
  192. }
  193. if (self::$config['is_free_node']) {
  194. if ($request->route('id') == self::$config['free_node_id']) {
  195. $freeuser = User::query()->where('enable', 1)->where('id', self::$config['free_node_users_id'])->first();
  196. $email = sprintf("%[email protected]", $freeuser->v2ray_uuid);
  197. $v->addUser($freeuser->v2ray_uuid, $freeuser->v2ray_level, $freeuser->v2ray_alter_id, $email);
  198. }
  199. }
  200. return Response::json($v->getArr());
  201. }
  202. //用户列表
  203. public function index()
  204. {
  205. $users= User::query()->where('enable',1)->select(
  206. "id","username","passwd","t","u","d","transfer_enable",
  207. "port","protocol","obfs","enable","expire_time as expire_time_d","method",
  208. "v2ray_uuid","v2ray_level","v2ray_alter_id")->get();
  209. foreach($users as $user){
  210. //datetime 转timestamp
  211. $user['switch']=1;
  212. $user['email']=$user['username'];
  213. $user['expire_time']=strval((new \DateTime($user['expire_time_d']))->getTimestamp());
  214. }
  215. $res = [
  216. "data" => $users
  217. ];
  218. return response()->json($res);
  219. }
  220. //更新流量到user表
  221. public function addTraffic(Request $request, $response, $args)
  222. {
  223. $id = $request->route('id');
  224. $u = $request->get('u');
  225. $d = $request->get('d');
  226. $nodeId = $request->get('node_id');
  227. $node = SsNode::query()->find($nodeId)->get();
  228. $rate = $node->traffic_rate;
  229. $user = User::query()->find($id)->get();
  230. $user->t = time();
  231. $user->u = $user->u + ($u * $rate);
  232. $user->d = $user->d + ($d * $rate);
  233. if (!$user->save()) {
  234. $res = [
  235. "msg" => "update failed",
  236. ];
  237. return response()->json($res,400);
  238. }
  239. // 写usertrafficlog
  240. $totalTraffic = flowAutoShow(($u + $d) * $rate);
  241. $traffic = new UserTrafficLog();
  242. $traffic->user_id = $id;
  243. $traffic->u = $u;
  244. $traffic->d = $d;
  245. $traffic->node_id = $nodeId;
  246. $traffic->rate = $rate;
  247. $traffic->traffic = $totalTraffic;
  248. $traffic->log_time = time();
  249. $traffic->save();
  250. $res = [
  251. 'ret' => 1,
  252. "msg" => "ok",
  253. ];
  254. return response()->json($res);
  255. }
  256. }