Skip to content

Commit 2848d18

Browse files
committed
Break server creation logic into own controller
1 parent 634c1ca commit 2848d18

File tree

3 files changed

+134
-85
lines changed

3 files changed

+134
-85
lines changed
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Servers;
4+
5+
use JavaScript;
6+
use Illuminate\Http\RedirectResponse;
7+
use Prologue\Alerts\AlertsMessageBag;
8+
use Pterodactyl\Http\Controllers\Controller;
9+
use Pterodactyl\Repositories\Eloquent\NestRepository;
10+
use Pterodactyl\Repositories\Eloquent\NodeRepository;
11+
use Pterodactyl\Http\Requests\Admin\ServerFormRequest;
12+
use Pterodactyl\Repositories\Eloquent\ServerRepository;
13+
use Pterodactyl\Services\Servers\ServerCreationService;
14+
use Pterodactyl\Repositories\Eloquent\LocationRepository;
15+
16+
class CreateServerController extends Controller
17+
{
18+
/**
19+
* @var \Pterodactyl\Repositories\Eloquent\ServerRepository
20+
*/
21+
private $repository;
22+
23+
/**
24+
* @var \Pterodactyl\Repositories\Eloquent\NodeRepository
25+
*/
26+
private $nodeRepository;
27+
28+
/**
29+
* @var \Prologue\Alerts\AlertsMessageBag
30+
*/
31+
private $alert;
32+
33+
/**
34+
* @var \Pterodactyl\Repositories\Eloquent\NestRepository
35+
*/
36+
private $nestRepository;
37+
38+
/**
39+
* @var \Pterodactyl\Repositories\Eloquent\LocationRepository
40+
*/
41+
private $locationRepository;
42+
43+
/**
44+
* @var \Pterodactyl\Services\Servers\ServerCreationService
45+
*/
46+
private $creationService;
47+
48+
/**
49+
* CreateServerController constructor.
50+
*
51+
* @param \Prologue\Alerts\AlertsMessageBag $alert
52+
* @param \Pterodactyl\Repositories\Eloquent\NestRepository $nestRepository
53+
* @param \Pterodactyl\Repositories\Eloquent\LocationRepository $locationRepository
54+
* @param \Pterodactyl\Repositories\Eloquent\NodeRepository $nodeRepository
55+
* @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository
56+
* @param \Pterodactyl\Services\Servers\ServerCreationService $creationService
57+
*/
58+
public function __construct(
59+
AlertsMessageBag $alert,
60+
NestRepository $nestRepository,
61+
LocationRepository $locationRepository,
62+
NodeRepository $nodeRepository,
63+
ServerRepository $repository,
64+
ServerCreationService $creationService
65+
) {
66+
$this->repository = $repository;
67+
$this->nodeRepository = $nodeRepository;
68+
$this->alert = $alert;
69+
$this->nestRepository = $nestRepository;
70+
$this->locationRepository = $locationRepository;
71+
$this->creationService = $creationService;
72+
}
73+
74+
/**
75+
* Displays the create server page.
76+
*
77+
* @return \Illuminate\Contracts\View\Factory
78+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
79+
*/
80+
public function index()
81+
{
82+
$nodes = $this->nodeRepository->all();
83+
if (count($nodes) < 1) {
84+
$this->alert->warning(trans('admin/server.alerts.node_required'))->flash();
85+
86+
return redirect()->route('admin.nodes');
87+
}
88+
89+
$nests = $this->nestRepository->getWithEggs();
90+
91+
Javascript::put([
92+
'nodeData' => $this->nodeRepository->getNodesForServerCreation(),
93+
'nests' => $nests->map(function ($item) {
94+
return array_merge($item->toArray(), [
95+
'eggs' => $item->eggs->keyBy('id')->toArray(),
96+
]);
97+
})->keyBy('id'),
98+
]);
99+
100+
return view('admin.servers.new', [
101+
'locations' => $this->locationRepository->all(),
102+
'nests' => $nests,
103+
]);
104+
}
105+
106+
/**
107+
* Create a new server on the remote system.
108+
*
109+
* @param \Pterodactyl\Http\Requests\Admin\ServerFormRequest $request
110+
* @return \Illuminate\Http\RedirectResponse
111+
*
112+
* @throws \Illuminate\Validation\ValidationException
113+
* @throws \Pterodactyl\Exceptions\DisplayException
114+
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
115+
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
116+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
117+
* @throws \Pterodactyl\Exceptions\Service\Deployment\NoViableAllocationException
118+
* @throws \Pterodactyl\Exceptions\Service\Deployment\NoViableNodeException
119+
*/
120+
public function store(ServerFormRequest $request)
121+
{
122+
$server = $this->creationService->handle(
123+
$request->validated()
124+
);
125+
126+
$this->alert->success(
127+
trans('admin/server.alerts.server_created')
128+
)->flash();
129+
130+
return RedirectResponse::create('/admin/servers/view/' . $server->id);
131+
}
132+
}

app/Http/Controllers/Admin/ServersController.php

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
use Pterodactyl\Exceptions\DisplayException;
1818
use Pterodactyl\Http\Controllers\Controller;
1919
use Pterodactyl\Services\Servers\SuspensionService;
20-
use Pterodactyl\Http\Requests\Admin\ServerFormRequest;
21-
use Pterodactyl\Services\Servers\ServerCreationService;
2220
use Pterodactyl\Services\Servers\ServerDeletionService;
2321
use Pterodactyl\Services\Servers\ReinstallServerService;
2422
use Pterodactyl\Services\Servers\ContainerRebuildService;
@@ -27,13 +25,11 @@
2725
use Pterodactyl\Services\Servers\DetailsModificationService;
2826
use Pterodactyl\Services\Servers\StartupModificationService;
2927
use Pterodactyl\Contracts\Repository\NestRepositoryInterface;
30-
use Pterodactyl\Contracts\Repository\NodeRepositoryInterface;
3128
use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;
3229
use Pterodactyl\Services\Databases\DatabaseManagementService;
3330
use Illuminate\Contracts\Config\Repository as ConfigRepository;
3431
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
3532
use Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface;
36-
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;
3733
use Pterodactyl\Contracts\Repository\AllocationRepositoryInterface;
3834
use Pterodactyl\Http\Requests\Admin\Servers\Databases\StoreServerDatabaseRequest;
3935

@@ -94,21 +90,11 @@ class ServersController extends Controller
9490
*/
9591
protected $detailsModificationService;
9692

97-
/**
98-
* @var \Pterodactyl\Contracts\Repository\LocationRepositoryInterface
99-
*/
100-
protected $locationRepository;
101-
10293
/**
10394
* @var \Pterodactyl\Contracts\Repository\NestRepositoryInterface
10495
*/
10596
protected $nestRepository;
10697

107-
/**
108-
* @var \Pterodactyl\Contracts\Repository\NodeRepositoryInterface
109-
*/
110-
protected $nodeRepository;
111-
11298
/**
11399
* @var \Pterodactyl\Services\Servers\ReinstallServerService
114100
*/
@@ -119,11 +105,6 @@ class ServersController extends Controller
119105
*/
120106
protected $repository;
121107

122-
/**
123-
* @var \Pterodactyl\Services\Servers\ServerCreationService
124-
*/
125-
protected $service;
126-
127108
/**
128109
* @var \Pterodactyl\Services\Servers\StartupModificationService
129110
*/
@@ -142,15 +123,12 @@ class ServersController extends Controller
142123
* @param \Pterodactyl\Services\Servers\BuildModificationService $buildModificationService
143124
* @param \Illuminate\Contracts\Config\Repository $config
144125
* @param \Pterodactyl\Services\Servers\ContainerRebuildService $containerRebuildService
145-
* @param \Pterodactyl\Services\Servers\ServerCreationService $service
146126
* @param \Pterodactyl\Services\Databases\DatabaseManagementService $databaseManagementService
147127
* @param \Pterodactyl\Services\Databases\DatabasePasswordService $databasePasswordService
148128
* @param \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface $databaseRepository
149129
* @param \Pterodactyl\Repositories\Eloquent\DatabaseHostRepository $databaseHostRepository
150130
* @param \Pterodactyl\Services\Servers\ServerDeletionService $deletionService
151131
* @param \Pterodactyl\Services\Servers\DetailsModificationService $detailsModificationService
152-
* @param \Pterodactyl\Contracts\Repository\LocationRepositoryInterface $locationRepository
153-
* @param \Pterodactyl\Contracts\Repository\NodeRepositoryInterface $nodeRepository
154132
* @param \Pterodactyl\Services\Servers\ReinstallServerService $reinstallService
155133
* @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
156134
* @param \Pterodactyl\Contracts\Repository\NestRepositoryInterface $nestRepository
@@ -163,15 +141,12 @@ public function __construct(
163141
BuildModificationService $buildModificationService,
164142
ConfigRepository $config,
165143
ContainerRebuildService $containerRebuildService,
166-
ServerCreationService $service,
167144
DatabaseManagementService $databaseManagementService,
168145
DatabasePasswordService $databasePasswordService,
169146
DatabaseRepositoryInterface $databaseRepository,
170147
DatabaseHostRepository $databaseHostRepository,
171148
ServerDeletionService $deletionService,
172149
DetailsModificationService $detailsModificationService,
173-
LocationRepositoryInterface $locationRepository,
174-
NodeRepositoryInterface $nodeRepository,
175150
ReinstallServerService $reinstallService,
176151
ServerRepositoryInterface $repository,
177152
NestRepositoryInterface $nestRepository,
@@ -189,12 +164,9 @@ public function __construct(
189164
$this->databaseRepository = $databaseRepository;
190165
$this->detailsModificationService = $detailsModificationService;
191166
$this->deletionService = $deletionService;
192-
$this->locationRepository = $locationRepository;
193167
$this->nestRepository = $nestRepository;
194-
$this->nodeRepository = $nodeRepository;
195168
$this->reinstallService = $reinstallService;
196169
$this->repository = $repository;
197-
$this->service = $service;
198170
$this->startupModificationService = $startupModificationService;
199171
$this->suspensionService = $suspensionService;
200172
}
@@ -214,61 +186,6 @@ public function index(Request $request)
214186
]);
215187
}
216188

217-
/**
218-
* Display create new server page.
219-
*
220-
* @return \Illuminate\View\View
221-
*
222-
* @throws \Exception
223-
*/
224-
public function create()
225-
{
226-
$nodes = $this->nodeRepository->all();
227-
if (count($nodes) < 1) {
228-
$this->alert->warning(trans('admin/server.alerts.node_required'))->flash();
229-
230-
return redirect()->route('admin.nodes');
231-
}
232-
233-
$nests = $this->nestRepository->getWithEggs();
234-
235-
Javascript::put([
236-
'nodeData' => $this->nodeRepository->getNodesForServerCreation(),
237-
'nests' => $nests->map(function ($item) {
238-
return array_merge($item->toArray(), [
239-
'eggs' => $item->eggs->keyBy('id')->toArray(),
240-
]);
241-
})->keyBy('id'),
242-
]);
243-
244-
return view('admin.servers.new', [
245-
'locations' => $this->locationRepository->all(),
246-
'nests' => $nests,
247-
]);
248-
}
249-
250-
/**
251-
* Handle POST of server creation form.
252-
*
253-
* @param \Pterodactyl\Http\Requests\Admin\ServerFormRequest $request
254-
* @return \Illuminate\Http\RedirectResponse
255-
*
256-
* @throws \Illuminate\Validation\ValidationException
257-
* @throws \Pterodactyl\Exceptions\DisplayException
258-
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
259-
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
260-
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
261-
* @throws \Pterodactyl\Exceptions\Service\Deployment\NoViableAllocationException
262-
* @throws \Pterodactyl\Exceptions\Service\Deployment\NoViableNodeException
263-
*/
264-
public function store(ServerFormRequest $request)
265-
{
266-
$server = $this->service->handle($request->except('_token'));
267-
$this->alert->success(trans('admin/server.alerts.server_created'))->flash();
268-
269-
return redirect()->route('admin.servers.view', $server->id);
270-
}
271-
272189
/**
273190
* Display the index when viewing a specific server.
274191
*

routes/admin.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
*/
103103
Route::group(['prefix' => 'servers'], function () {
104104
Route::get('/', 'ServersController@index')->name('admin.servers');
105-
Route::get('/new', 'ServersController@create')->name('admin.servers.new');
105+
Route::get('/new', 'Servers\CreateServerController@index')->name('admin.servers.new');
106106
Route::get('/view/{server}', 'ServersController@viewIndex')->name('admin.servers.view');
107107
Route::get('/view/{server}/details', 'ServersController@viewDetails')->name('admin.servers.view.details');
108108
Route::get('/view/{server}/build', 'ServersController@viewBuild')->name('admin.servers.view.build');
@@ -111,7 +111,7 @@
111111
Route::get('/view/{server}/manage', 'ServersController@viewManage')->name('admin.servers.view.manage');
112112
Route::get('/view/{server}/delete', 'ServersController@viewDelete')->name('admin.servers.view.delete');
113113

114-
Route::post('/new', 'ServersController@store');
114+
Route::post('/new', 'Servers\CreateServerController@store');
115115
Route::post('/view/{server}/build', 'ServersController@updateBuild');
116116
Route::post('/view/{server}/startup', 'ServersController@saveStartup');
117117
Route::post('/view/{server}/database', 'ServersController@newDatabase');

0 commit comments

Comments
 (0)