Muv2.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Http\Models\SsNode;
  4. use Closure;
  5. use Response;
  6. use Redirect;
  7. class Muv2
  8. {
  9. /**
  10. * 用于支持GO版本V2ray
  11. *
  12. * @param $request
  13. * @param Closure $next
  14. *
  15. * @return \Illuminate\Http\JsonResponse|mixed
  16. */
  17. public function handle($request, Closure $next)
  18. {
  19. \Log::info(json_encode($request->header()));
  20. # v2ray客户端提交参数说明
  21. # https://github.com/catpie/musdk-go/blob/master/http.go
  22. # 传入参数:
  23. # Token:mu_key
  24. # ServiceType:5 ---> https://github.com/catpie/musdk-go/blob/master/ret.go
  25. # Content-Type:application/json
  26. //$serviceType = $request->header('ServiceType'); //
  27. //$agent = $request->header('user-agent'); // Go-http-client/1.1
  28. // 验证MU_KEY
  29. $token = $request->header("Token", '');
  30. if ($token != $_ENV['MU_KEY']) {
  31. return Response::json([
  32. 'ret' => 0,
  33. 'msg' => 'Invalid Token.'
  34. ], 401);
  35. }
  36. // 验证IP是否在节点IP列表当中
  37. $ip = getClientIp();
  38. $node = SsNode::query()->where('ip', $ip)->orWhere('ipv6', $ip)->first();
  39. if (!$node && $ip != '127.0.0.1') {
  40. return Response::json([
  41. 'ret' => 0,
  42. 'msg' => 'Invalid Token.'
  43. ], 401);
  44. }
  45. return $next($request);
  46. }
  47. }