Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Admin/Servers/CreateServerController.php
10284 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Admin\Servers;
4
5
use Illuminate\View\View;
6
use Pterodactyl\Models\Nest;
7
use Pterodactyl\Models\Node;
8
use Pterodactyl\Models\Location;
9
use Illuminate\Http\RedirectResponse;
10
use Prologue\Alerts\AlertsMessageBag;
11
use Pterodactyl\Http\Controllers\Controller;
12
use Pterodactyl\Repositories\Eloquent\NestRepository;
13
use Pterodactyl\Repositories\Eloquent\NodeRepository;
14
use Pterodactyl\Http\Requests\Admin\ServerFormRequest;
15
use Pterodactyl\Services\Servers\ServerCreationService;
16
17
class CreateServerController extends Controller
18
{
19
/**
20
* CreateServerController constructor.
21
*/
22
public function __construct(
23
private AlertsMessageBag $alert,
24
private NestRepository $nestRepository,
25
private NodeRepository $nodeRepository,
26
private ServerCreationService $creationService,
27
) {
28
}
29
30
/**
31
* Displays the create server page.
32
*
33
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
34
*/
35
public function index(): View|RedirectResponse
36
{
37
$nodes = Node::all();
38
if (count($nodes) < 1) {
39
$this->alert->warning(trans('admin/server.alerts.node_required'))->flash();
40
41
return redirect()->route('admin.nodes');
42
}
43
44
$nests = $this->nestRepository->getWithEggs();
45
46
\JavaScript::put([
47
'nodeData' => $this->nodeRepository->getNodesForServerCreation(),
48
'nests' => $nests->map(function (Nest $item) {
49
return array_merge($item->toArray(), [
50
'eggs' => $item->eggs->keyBy('id')->toArray(),
51
]);
52
})->keyBy('id'),
53
]);
54
55
return view('admin.servers.new', [
56
'locations' => Location::all(),
57
'nests' => $nests,
58
]);
59
}
60
61
/**
62
* Create a new server on the remote system.
63
*
64
* @throws \Illuminate\Validation\ValidationException
65
* @throws \Pterodactyl\Exceptions\DisplayException
66
* @throws \Pterodactyl\Exceptions\Service\Deployment\NoViableAllocationException
67
* @throws \Pterodactyl\Exceptions\Service\Deployment\NoViableNodeException
68
* @throws \Throwable
69
*/
70
public function store(ServerFormRequest $request): RedirectResponse
71
{
72
$data = $request->except(['_token']);
73
if (!empty($data['custom_image'])) {
74
$data['image'] = $data['custom_image'];
75
unset($data['custom_image']);
76
}
77
78
$server = $this->creationService->handle($data);
79
80
$this->alert->success(trans('admin/server.alerts.server_created'))->flash();
81
82
return new RedirectResponse('/admin/servers/view/' . $server->id);
83
}
84
}
85
86