Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Services/Databases/DeployServerDatabaseService.php
10262 views
1
<?php
2
3
namespace Pterodactyl\Services\Databases;
4
5
use Webmozart\Assert\Assert;
6
use Pterodactyl\Models\Server;
7
use Pterodactyl\Models\Database;
8
use Pterodactyl\Models\DatabaseHost;
9
use Pterodactyl\Exceptions\Service\Database\NoSuitableDatabaseHostException;
10
11
class DeployServerDatabaseService
12
{
13
/**
14
* DeployServerDatabaseService constructor.
15
*/
16
public function __construct(private DatabaseManagementService $managementService)
17
{
18
}
19
20
/**
21
* @throws \Throwable
22
* @throws \Pterodactyl\Exceptions\Service\Database\TooManyDatabasesException
23
* @throws \Pterodactyl\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException
24
*/
25
public function handle(Server $server, array $data): Database
26
{
27
Assert::notEmpty($data['database'] ?? null);
28
Assert::notEmpty($data['remote'] ?? null);
29
30
$hosts = DatabaseHost::query()->get()->toBase();
31
if ($hosts->isEmpty()) {
32
throw new NoSuitableDatabaseHostException();
33
} else {
34
$nodeHosts = $hosts->where('node_id', $server->node_id)->toBase();
35
36
if ($nodeHosts->isEmpty() && !config('pterodactyl.client_features.databases.allow_random')) {
37
throw new NoSuitableDatabaseHostException();
38
}
39
}
40
41
return $this->managementService->create($server, [
42
'database_host_id' => $nodeHosts->isEmpty()
43
? $hosts->random()->id
44
: $nodeHosts->random()->id,
45
'database' => DatabaseManagementService::generateUniqueDatabaseName($data['database'], $server->id),
46
'remote' => $data['remote'],
47
]);
48
}
49
}
50
51