99
1010namespace Pterodactyl \Http \Controllers \Admin ;
1111
12+ use GuzzleHttp \Exception \RequestException ;
1213use Illuminate \Http \Request ;
14+ use Illuminate \Support \Arr ;
15+ use Pterodactyl \Exceptions \Http \Connection \DaemonConnectionException ;
1316use Pterodactyl \Models \User ;
1417use Pterodactyl \Models \Server ;
1518use Prologue \Alerts \AlertsMessageBag ;
1619use Pterodactyl \Exceptions \DisplayException ;
1720use Pterodactyl \Http \Controllers \Controller ;
21+ use Pterodactyl \Repositories \Wings \DaemonServerRepository ;
22+ use Pterodactyl \Services \Servers \ServerConfigurationStructureService ;
1823use Pterodactyl \Services \Servers \SuspensionService ;
1924use Pterodactyl \Repositories \Eloquent \MountRepository ;
2025use Pterodactyl \Services \Servers \ServerDeletionService ;
@@ -54,6 +59,11 @@ class ServersController extends Controller
5459 */
5560 protected $ config ;
5661
62+ /**
63+ * @var \Pterodactyl\Repositories\Wings\DaemonServerRepository
64+ */
65+ private $ daemonServerRepository ;
66+
5767 /**
5868 * @var \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface
5969 */
@@ -104,6 +114,11 @@ class ServersController extends Controller
104114 */
105115 protected $ repository ;
106116
117+ /**
118+ * @var \Pterodactyl\Services\Servers\ServerConfigurationStructureService
119+ */
120+ private $ serverConfigurationStructureService ;
121+
107122 /**
108123 * @var \Pterodactyl\Services\Servers\StartupModificationService
109124 */
@@ -121,6 +136,7 @@ class ServersController extends Controller
121136 * @param \Pterodactyl\Contracts\Repository\AllocationRepositoryInterface $allocationRepository
122137 * @param \Pterodactyl\Services\Servers\BuildModificationService $buildModificationService
123138 * @param \Illuminate\Contracts\Config\Repository $config
139+ * @param \Pterodactyl\Repositories\Wings\DaemonServerRepository $daemonServerRepository
124140 * @param \Pterodactyl\Services\Databases\DatabaseManagementService $databaseManagementService
125141 * @param \Pterodactyl\Services\Databases\DatabasePasswordService $databasePasswordService
126142 * @param \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface $databaseRepository
@@ -131,6 +147,7 @@ class ServersController extends Controller
131147 * @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
132148 * @param \Pterodactyl\Repositories\Eloquent\MountRepository $mountRepository
133149 * @param \Pterodactyl\Contracts\Repository\NestRepositoryInterface $nestRepository
150+ * @param \Pterodactyl\Services\Servers\ServerConfigurationStructureService $serverConfigurationStructureService
134151 * @param \Pterodactyl\Services\Servers\StartupModificationService $startupModificationService
135152 * @param \Pterodactyl\Services\Servers\SuspensionService $suspensionService
136153 */
@@ -139,6 +156,7 @@ public function __construct(
139156 AllocationRepositoryInterface $ allocationRepository ,
140157 BuildModificationService $ buildModificationService ,
141158 ConfigRepository $ config ,
159+ DaemonServerRepository $ daemonServerRepository ,
142160 DatabaseManagementService $ databaseManagementService ,
143161 DatabasePasswordService $ databasePasswordService ,
144162 DatabaseRepositoryInterface $ databaseRepository ,
@@ -149,13 +167,15 @@ public function __construct(
149167 ServerRepositoryInterface $ repository ,
150168 MountRepository $ mountRepository ,
151169 NestRepositoryInterface $ nestRepository ,
170+ ServerConfigurationStructureService $ serverConfigurationStructureService ,
152171 StartupModificationService $ startupModificationService ,
153172 SuspensionService $ suspensionService
154173 ) {
155174 $ this ->alert = $ alert ;
156175 $ this ->allocationRepository = $ allocationRepository ;
157176 $ this ->buildModificationService = $ buildModificationService ;
158177 $ this ->config = $ config ;
178+ $ this ->daemonServerRepository = $ daemonServerRepository ;
159179 $ this ->databaseHostRepository = $ databaseHostRepository ;
160180 $ this ->databaseManagementService = $ databaseManagementService ;
161181 $ this ->databasePasswordService = $ databasePasswordService ;
@@ -166,6 +186,7 @@ public function __construct(
166186 $ this ->reinstallService = $ reinstallService ;
167187 $ this ->repository = $ repository ;
168188 $ this ->mountRepository = $ mountRepository ;
189+ $ this ->serverConfigurationStructureService = $ serverConfigurationStructureService ;
169190 $ this ->startupModificationService = $ startupModificationService ;
170191 $ this ->suspensionService = $ suspensionService ;
171192 }
@@ -390,6 +411,16 @@ public function addMount(Server $server, int $mount_id)
390411 {
391412 $ server ->mounts ()->attach ($ mount_id );
392413
414+ $ data = $ this ->serverConfigurationStructureService ->handle ($ server );
415+
416+ try {
417+ $ this ->daemonServerRepository
418+ ->setServer ($ server )
419+ ->update (Arr::only ($ data , ['mounts ' ]));
420+ } catch (RequestException $ exception ) {
421+ throw new DaemonConnectionException ($ exception );
422+ }
423+
393424 $ this ->alert ->success ('Mount was added successfully. ' )->flash ();
394425
395426 return redirect ()->route ('admin.servers.view.mounts ' , $ server ->id );
@@ -401,11 +432,24 @@ public function addMount(Server $server, int $mount_id)
401432 * @param Server $server
402433 * @param int $mount_id
403434 * @return \Illuminate\Http\RedirectResponse
435+ *
436+ * @throws DaemonConnectionException
437+ * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
404438 */
405439 public function deleteMount (Server $ server , int $ mount_id )
406440 {
407441 $ server ->mounts ()->detach ($ mount_id );
408442
443+ $ data = $ this ->serverConfigurationStructureService ->handle ($ server );
444+
445+ try {
446+ $ this ->daemonServerRepository
447+ ->setServer ($ server )
448+ ->update (Arr::only ($ data , ['mounts ' ]));
449+ } catch (RequestException $ exception ) {
450+ throw new DaemonConnectionException ($ exception );
451+ }
452+
409453 $ this ->alert ->success ('Mount was removed successfully. ' )->flash ();
410454
411455 return redirect ()->route ('admin.servers.view.mounts ' , $ server ->id );
0 commit comments