Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Admin/Servers/ServerViewController.php
10284 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Admin\Servers;
4
5
use Illuminate\View\View;
6
use Illuminate\Http\Request;
7
use Pterodactyl\Models\Nest;
8
use Pterodactyl\Models\Server;
9
use Pterodactyl\Exceptions\DisplayException;
10
use Pterodactyl\Http\Controllers\Controller;
11
use Pterodactyl\Services\Servers\EnvironmentService;
12
use Pterodactyl\Repositories\Eloquent\NestRepository;
13
use Pterodactyl\Repositories\Eloquent\NodeRepository;
14
use Pterodactyl\Repositories\Eloquent\MountRepository;
15
use Pterodactyl\Traits\Controllers\JavascriptInjection;
16
use Pterodactyl\Repositories\Eloquent\LocationRepository;
17
use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;
18
19
class ServerViewController extends Controller
20
{
21
use JavascriptInjection;
22
23
/**
24
* ServerViewController constructor.
25
*/
26
public function __construct(
27
private DatabaseHostRepository $databaseHostRepository,
28
private LocationRepository $locationRepository,
29
private MountRepository $mountRepository,
30
private NestRepository $nestRepository,
31
private NodeRepository $nodeRepository,
32
private EnvironmentService $environmentService,
33
) {
34
}
35
36
/**
37
* Returns the index view for a server.
38
*/
39
public function index(Request $request, Server $server): View
40
{
41
return view('admin.servers.view.index', compact('server'));
42
}
43
44
/**
45
* Returns the server details page.
46
*/
47
public function details(Request $request, Server $server): View
48
{
49
return view('admin.servers.view.details', compact('server'));
50
}
51
52
/**
53
* Returns a view of server build settings.
54
*/
55
public function build(Request $request, Server $server): View
56
{
57
$allocations = $server->node->allocations->toBase();
58
59
return view('admin.servers.view.build', [
60
'server' => $server,
61
'assigned' => $allocations->where('server_id', $server->id)->sortBy('port')->sortBy('ip'),
62
'unassigned' => $allocations->where('server_id', null)->sortBy('port')->sortBy('ip'),
63
]);
64
}
65
66
/**
67
* Returns the server startup management page.
68
*
69
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
70
*/
71
public function startup(Request $request, Server $server): View
72
{
73
$nests = $this->nestRepository->getWithEggs();
74
$variables = $this->environmentService->handle($server);
75
76
$this->plainInject([
77
'server' => $server,
78
'server_variables' => $variables,
79
'nests' => $nests->map(function (Nest $item) {
80
return array_merge($item->toArray(), [
81
'eggs' => $item->eggs->keyBy('id')->toArray(),
82
]);
83
})->keyBy('id'),
84
]);
85
86
return view('admin.servers.view.startup', compact('server', 'nests'));
87
}
88
89
/**
90
* Returns all the databases that exist for the server.
91
*/
92
public function database(Request $request, Server $server): View
93
{
94
return view('admin.servers.view.database', [
95
'hosts' => $this->databaseHostRepository->all(),
96
'server' => $server,
97
]);
98
}
99
100
/**
101
* Returns all the mounts that exist for the server.
102
*/
103
public function mounts(Request $request, Server $server): View
104
{
105
$server->load('mounts');
106
107
return view('admin.servers.view.mounts', [
108
'mounts' => $this->mountRepository->getMountListForServer($server),
109
'server' => $server,
110
]);
111
}
112
113
/**
114
* Returns the base server management page, or an exception if the server
115
* is in a state that cannot be recovered from.
116
*
117
* @throws DisplayException
118
*/
119
public function manage(Request $request, Server $server): View
120
{
121
if ($server->status === Server::STATUS_INSTALL_FAILED) {
122
throw new DisplayException('This server is in a failed install state and cannot be recovered. Please delete and re-create the server.');
123
}
124
125
// Check if the panel doesn't have at least 2 nodes configured.
126
$nodes = $this->nodeRepository->all();
127
$canTransfer = false;
128
if (count($nodes) >= 2) {
129
$canTransfer = true;
130
}
131
132
\JavaScript::put([
133
'nodeData' => $this->nodeRepository->getNodesForServerCreation(),
134
]);
135
136
return view('admin.servers.view.manage', [
137
'server' => $server,
138
'locations' => $this->locationRepository->all(),
139
'canTransfer' => $canTransfer,
140
]);
141
}
142
143
/**
144
* Returns the server deletion page.
145
*/
146
public function delete(Request $request, Server $server): View
147
{
148
return view('admin.servers.view.delete', compact('server'));
149
}
150
}
151
152