NodeController.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. namespace App\Http\Controllers\User;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Node;
  5. use App\Models\NodeHeartbeat;
  6. use App\Services\ProxyService;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. use Response;
  10. class NodeController extends Controller
  11. {
  12. public function index(): \Illuminate\Http\Response
  13. { // 节点列表
  14. $user = auth()->user();
  15. // 获取当前用户可用节点
  16. $nodeList = $user->nodes()->whereIn('is_display', [1, 3])->with(['labels', 'level_table'])->get();
  17. $onlineNode = NodeHeartbeat::recently()->distinct()->pluck('node_id')->toArray();
  18. foreach ($nodeList as $node) {
  19. // 节点在线状态
  20. $node->offline = ! in_array($node->id, $onlineNode, true);
  21. }
  22. return Response::view('user.nodeList', [
  23. 'nodesGeo' => $nodeList->pluck('name', 'geo')->toArray(),
  24. 'nodeList' => $nodeList,
  25. ]);
  26. }
  27. public function show(Request $request, Node $node): JsonResponse
  28. { // 节点详细
  29. $proxyServer = new ProxyService;
  30. $server = $proxyServer->getProxyConfig($node);
  31. return Response::json(['status' => 'success', 'data' => $proxyServer->getUserProxyConfig($server, $request->input('type') !== 'text'), 'title' => $server['type']]);
  32. }
  33. }