Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Admin/Nodes/NodeViewController.php
10284 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Admin\Nodes;
4
5
use Illuminate\View\View;
6
use Illuminate\Http\Request;
7
use Pterodactyl\Models\Node;
8
use Illuminate\Support\Collection;
9
use Pterodactyl\Models\Allocation;
10
use Pterodactyl\Http\Controllers\Controller;
11
use Pterodactyl\Repositories\Eloquent\NodeRepository;
12
use Pterodactyl\Repositories\Eloquent\ServerRepository;
13
use Pterodactyl\Traits\Controllers\JavascriptInjection;
14
use Pterodactyl\Services\Helpers\SoftwareVersionService;
15
use Pterodactyl\Repositories\Eloquent\LocationRepository;
16
17
class NodeViewController extends Controller
18
{
19
use JavascriptInjection;
20
21
/**
22
* NodeViewController constructor.
23
*/
24
public function __construct(
25
private LocationRepository $locationRepository,
26
private NodeRepository $repository,
27
private ServerRepository $serverRepository,
28
private SoftwareVersionService $versionService,
29
) {
30
}
31
32
/**
33
* Returns index view for a specific node on the system.
34
*/
35
public function index(Request $request, Node $node): View
36
{
37
$node = $this->repository->loadLocationAndServerCount($node);
38
39
return view('admin.nodes.view.index', [
40
'node' => $node,
41
'stats' => $this->repository->getUsageStats($node),
42
'version' => $this->versionService,
43
]);
44
}
45
46
/**
47
* Returns the settings page for a specific node.
48
*/
49
public function settings(Request $request, Node $node): View
50
{
51
return view('admin.nodes.view.settings', [
52
'node' => $node,
53
'locations' => $this->locationRepository->all(),
54
]);
55
}
56
57
/**
58
* Return the node configuration page for a specific node.
59
*/
60
public function configuration(Request $request, Node $node): View
61
{
62
return view('admin.nodes.view.configuration', compact('node'));
63
}
64
65
/**
66
* Return the node allocation management page.
67
*/
68
public function allocations(Request $request, Node $node): View
69
{
70
$node = $this->repository->loadNodeAllocations($node);
71
72
$this->plainInject(['node' => Collection::make([$node])->only(['id'])]);
73
74
return view('admin.nodes.view.allocation', [
75
'node' => $node,
76
'allocations' => Allocation::query()->where('node_id', $node->id)
77
->groupBy('ip')
78
->orderByRaw('INET_ATON(ip) ASC')
79
->get(['ip']),
80
]);
81
}
82
83
/**
84
* Return a listing of servers that exist for this specific node.
85
*/
86
public function servers(Request $request, Node $node): View
87
{
88
$this->plainInject([
89
'node' => Collection::make([$node->makeVisible(['daemon_token_id', 'daemon_token'])])
90
->only(['scheme', 'fqdn', 'daemonListen', 'daemon_token_id', 'daemon_token']),
91
]);
92
93
return view('admin.nodes.view.servers', [
94
'node' => $node,
95
'servers' => $this->serverRepository->loadAllServersForNode($node->id, 25),
96
]);
97
}
98
}
99
100