22
33namespace Pterodactyl \Http \Controllers \Api \Client \Servers ;
44
5+ use Illuminate \Support \Str ;
56use Illuminate \Http \Response ;
67use Pterodactyl \Models \Server ;
78use Pterodactyl \Models \Database ;
9+ use Pterodactyl \Services \Databases \DatabasePasswordService ;
810use Pterodactyl \Transformers \Api \Client \DatabaseTransformer ;
911use Pterodactyl \Services \Databases \DatabaseManagementService ;
1012use Pterodactyl \Services \Databases \DeployServerDatabaseService ;
1315use Pterodactyl \Http \Requests \Api \Client \Servers \Databases \GetDatabasesRequest ;
1416use Pterodactyl \Http \Requests \Api \Client \Servers \Databases \StoreDatabaseRequest ;
1517use Pterodactyl \Http \Requests \Api \Client \Servers \Databases \DeleteDatabaseRequest ;
18+ use Pterodactyl \Http \Requests \Api \Client \Servers \Databases \RotatePasswordRequest ;
1619
1720class DatabaseController extends ClientApiController
1821{
@@ -31,15 +34,22 @@ class DatabaseController extends ClientApiController
3134 */
3235 private $ managementService ;
3336
37+ /**
38+ * @var \Pterodactyl\Services\Databases\DatabasePasswordService
39+ */
40+ private $ passwordService ;
41+
3442 /**
3543 * DatabaseController constructor.
3644 *
3745 * @param \Pterodactyl\Services\Databases\DatabaseManagementService $managementService
46+ * @param \Pterodactyl\Services\Databases\DatabasePasswordService $passwordService
3847 * @param \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface $repository
3948 * @param \Pterodactyl\Services\Databases\DeployServerDatabaseService $deployDatabaseService
4049 */
4150 public function __construct (
4251 DatabaseManagementService $ managementService ,
52+ DatabasePasswordService $ passwordService ,
4353 DatabaseRepositoryInterface $ repository ,
4454 DeployServerDatabaseService $ deployDatabaseService
4555 ) {
@@ -48,6 +58,7 @@ public function __construct(
4858 $ this ->deployDatabaseService = $ deployDatabaseService ;
4959 $ this ->repository = $ repository ;
5060 $ this ->managementService = $ managementService ;
61+ $ this ->passwordService = $ passwordService ;
5162 }
5263
5364 /**
@@ -81,6 +92,30 @@ public function store(StoreDatabaseRequest $request): array
8192 ->toArray ();
8293 }
8394
95+ /**
96+ * Rotates the password for the given server model and returns a fresh instance to
97+ * the caller.
98+ *
99+ * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Databases\RotatePasswordRequest $request
100+ * @return array
101+ *
102+ * @throws \Pterodactyl\Exceptions\Model\DataValidationException
103+ * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
104+ */
105+ public function rotatePassword (RotatePasswordRequest $ request )
106+ {
107+ $ database = $ request ->getModel (Database::class);
108+
109+ $ this ->passwordService ->handle ($ database , Str::random (24 ));
110+
111+ $ database ->refresh ();
112+
113+ return $ this ->fractal ->item ($ database )
114+ ->parseIncludes (['password ' ])
115+ ->transformWith ($ this ->getTransformer (DatabaseTransformer::class))
116+ ->toArray ();
117+ }
118+
84119 /**
85120 * @param \Pterodactyl\Http\Requests\Api\Client\Servers\Databases\DeleteDatabaseRequest $request
86121 * @return \Illuminate\Http\Response
0 commit comments