Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Api/Application/Servers/DatabaseController.php
10277 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Api\Application\Servers;
4
5
use Illuminate\Http\Response;
6
use Pterodactyl\Models\Server;
7
use Pterodactyl\Models\Database;
8
use Illuminate\Http\JsonResponse;
9
use Pterodactyl\Services\Databases\DatabasePasswordService;
10
use Pterodactyl\Services\Databases\DatabaseManagementService;
11
use Pterodactyl\Transformers\Api\Application\ServerDatabaseTransformer;
12
use Pterodactyl\Http\Controllers\Api\Application\ApplicationApiController;
13
use Pterodactyl\Http\Requests\Api\Application\Servers\Databases\GetServerDatabaseRequest;
14
use Pterodactyl\Http\Requests\Api\Application\Servers\Databases\GetServerDatabasesRequest;
15
use Pterodactyl\Http\Requests\Api\Application\Servers\Databases\ServerDatabaseWriteRequest;
16
use Pterodactyl\Http\Requests\Api\Application\Servers\Databases\StoreServerDatabaseRequest;
17
18
class DatabaseController extends ApplicationApiController
19
{
20
/**
21
* DatabaseController constructor.
22
*/
23
public function __construct(
24
private DatabaseManagementService $databaseManagementService,
25
private DatabasePasswordService $databasePasswordService,
26
) {
27
parent::__construct();
28
}
29
30
/**
31
* Return a listing of all databases currently available to a single
32
* server.
33
*/
34
public function index(GetServerDatabasesRequest $request, Server $server): array
35
{
36
return $this->fractal->collection($server->databases)
37
->transformWith($this->getTransformer(ServerDatabaseTransformer::class))
38
->toArray();
39
}
40
41
/**
42
* Return a single server database.
43
*/
44
public function view(GetServerDatabaseRequest $request, Server $server, Database $database): array
45
{
46
return $this->fractal->item($database)
47
->transformWith($this->getTransformer(ServerDatabaseTransformer::class))
48
->toArray();
49
}
50
51
/**
52
* Reset the password for a specific server database.
53
*
54
* @throws \Throwable
55
*/
56
public function resetPassword(ServerDatabaseWriteRequest $request, Server $server, Database $database): JsonResponse
57
{
58
$this->databasePasswordService->handle($database);
59
60
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
61
}
62
63
/**
64
* Create a new database on the Panel for a given server.
65
*
66
* @throws \Throwable
67
*/
68
public function store(StoreServerDatabaseRequest $request, Server $server): JsonResponse
69
{
70
$database = $this->databaseManagementService->create($server, array_merge($request->validated(), [
71
'database' => $request->databaseName(),
72
]));
73
74
return $this->fractal->item($database)
75
->transformWith($this->getTransformer(ServerDatabaseTransformer::class))
76
->addMeta([
77
'resource' => route('api.application.servers.databases.view', [
78
'server' => $server->id,
79
'database' => $database->id,
80
]),
81
])
82
->respond(Response::HTTP_CREATED);
83
}
84
85
/**
86
* Handle a request to delete a specific server database from the Panel.
87
*/
88
public function delete(ServerDatabaseWriteRequest $request, Server $server, Database $database): Response
89
{
90
$this->databaseManagementService->delete($database);
91
92
return response('', 204);
93
}
94
}
95
96