V2RayController.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace App\Http\Controllers\Api\WebApi;
  3. use App\Helpers\WebApiResponse;
  4. use App\Models\Node;
  5. use App\Models\NodeCertificate;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Routing\Controller;
  8. class V2RayController extends Controller
  9. {
  10. use WebApiResponse;
  11. public function getNodeInfo(Node $node): JsonResponse // 获取节点信息
  12. {
  13. $cert = NodeCertificate::whereDomain($node->profile['v2_host'])->first();
  14. $tlsProvider = ! empty($node->profile['tls_provider']) ? $node->profile['tls_provider'] : sysConfig('v2ray_tls_provider');
  15. return $this->succeed([
  16. 'id' => $node->id,
  17. 'is_udp' => (bool) $node->is_udp,
  18. 'speed_limit' => $node->getRawOriginal('speed_limit'),
  19. 'client_limit' => $node->client_limit,
  20. 'push_port' => $node->push_port,
  21. 'redirect_url' => (string) sysConfig('redirect_url', ''),
  22. 'secret' => $node->auth->secret,
  23. 'key' => $cert ? $cert->key : '',
  24. 'pem' => $cert ? $cert->pem : '',
  25. 'v2_license' => (string) sysConfig('v2ray_license'),
  26. 'v2_alter_id' => (int) $node->profile['v2_alter_id'],
  27. 'v2_port' => $node->port,
  28. 'v2_method' => $node->profile['method'] ?? '',
  29. 'v2_net' => $node->profile['v2_net'] ?? '',
  30. 'v2_type' => $node->profile['v2_type'] ?? '',
  31. 'v2_host' => $node->profile['v2_host'] ?? '',
  32. 'v2_path' => $node->profile['v2_path'] ?? '',
  33. 'v2_tls' => (bool) ($node->profile['v2_tls'] ?? false),
  34. 'v2_tls_provider' => $tlsProvider,
  35. ]);
  36. }
  37. public function getUserList(Node $node): JsonResponse // 获取节点可用的用户列表
  38. {
  39. foreach ($node->users() as $user) {
  40. $data[] = [
  41. 'uid' => $user->id,
  42. 'vmess_uid' => $user->vmess_id,
  43. 'speed_limit' => $user->getRawOriginal('speed_limit'),
  44. ];
  45. }
  46. return $this->succeed($data ?? [], ['updateTime' => time()]);
  47. }
  48. public function addCertificate(Node $node): JsonResponse // 上报节点伪装域名证书信息
  49. {
  50. if (request()->has(['key', 'pem'])) {
  51. $cert = NodeCertificate::whereDomain($node->v2_host)->firstOrCreate(['domain' => $node->server]);
  52. if ($cert && $cert->update(['key' => request('key'), 'pem' => request('pem')])) {
  53. return $this->succeed();
  54. }
  55. }
  56. return $this->failed([400201, '上报节点伪装域名证书失败,请检查字段']);
  57. }
  58. }