Path: blob/1.0-develop/app/Http/Controllers/Api/Client/Servers/DatabaseController.php
10284 views
<?php12namespace Pterodactyl\Http\Controllers\Api\Client\Servers;34use Illuminate\Http\Response;5use Pterodactyl\Models\Server;6use Pterodactyl\Models\Database;7use Pterodactyl\Facades\Activity;8use Pterodactyl\Services\Databases\DatabasePasswordService;9use Pterodactyl\Transformers\Api\Client\DatabaseTransformer;10use Pterodactyl\Services\Databases\DatabaseManagementService;11use Pterodactyl\Services\Databases\DeployServerDatabaseService;12use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;13use Pterodactyl\Http\Requests\Api\Client\Servers\Databases\GetDatabasesRequest;14use Pterodactyl\Http\Requests\Api\Client\Servers\Databases\StoreDatabaseRequest;15use Pterodactyl\Http\Requests\Api\Client\Servers\Databases\DeleteDatabaseRequest;16use Pterodactyl\Http\Requests\Api\Client\Servers\Databases\RotatePasswordRequest;1718class DatabaseController extends ClientApiController19{20/**21* DatabaseController constructor.22*/23public function __construct(24private DeployServerDatabaseService $deployDatabaseService,25private DatabaseManagementService $managementService,26private DatabasePasswordService $passwordService,27) {28parent::__construct();29}3031/**32* Return all the databases that belong to the given server.33*/34public function index(GetDatabasesRequest $request, Server $server): array35{36return $this->fractal->collection($server->databases)37->transformWith($this->getTransformer(DatabaseTransformer::class))38->toArray();39}4041/**42* Create a new database for the given server and return it.43*44* @throws \Throwable45* @throws \Pterodactyl\Exceptions\Service\Database\TooManyDatabasesException46* @throws \Pterodactyl\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException47*/48public function store(StoreDatabaseRequest $request, Server $server): array49{50$database = Activity::event('server:database.create')->transaction(function ($log) use ($request, $server) {51$server->databases()->lockForUpdate();5253$database = $this->deployDatabaseService->handle($server, $request->validated());5455$log->subject($database)->property('name', $database->database);5657return $database;58});5960return $this->fractal->item($database)61->parseIncludes(['password'])62->transformWith($this->getTransformer(DatabaseTransformer::class))63->toArray();64}6566/**67* Rotates the password for the given server model and returns a fresh instance to68* the caller.69*70* @throws \Throwable71*/72public function rotatePassword(RotatePasswordRequest $request, Server $server, Database $database): array73{74Activity::event('server:database.rotate-password')75->subject($database)76->property('name', $database->database)77->transaction(function () use ($database) {78$database->lockForUpdate();7980$this->passwordService->handle($database);81});8283return $this->fractal->item($database->refresh())84->parseIncludes(['password'])85->transformWith($this->getTransformer(DatabaseTransformer::class))86->toArray();87}8889/**90* Removes a database from the server.91*92* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException93*/94public function delete(DeleteDatabaseRequest $request, Server $server, Database $database): Response95{96$this->managementService->delete($database);9798Activity::event('server:database.delete')99->subject($database)100->property('name', $database->database)101->log();102103return new Response('', Response::HTTP_NO_CONTENT);104}105}106107108