Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Services/Databases/Hosts/HostCreationService.php
10263 views
1
<?php
2
3
namespace Pterodactyl\Services\Databases\Hosts;
4
5
use Pterodactyl\Models\DatabaseHost;
6
use Illuminate\Database\DatabaseManager;
7
use Illuminate\Database\ConnectionInterface;
8
use Illuminate\Contracts\Encryption\Encrypter;
9
use Pterodactyl\Extensions\DynamicDatabaseConnection;
10
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
11
12
class HostCreationService
13
{
14
/**
15
* HostCreationService constructor.
16
*/
17
public function __construct(
18
private ConnectionInterface $connection,
19
private DatabaseManager $databaseManager,
20
private DynamicDatabaseConnection $dynamic,
21
private Encrypter $encrypter,
22
private DatabaseHostRepositoryInterface $repository,
23
) {
24
}
25
26
/**
27
* Create a new database host on the Panel.
28
*
29
* @throws \Throwable
30
*/
31
public function handle(array $data): DatabaseHost
32
{
33
return $this->connection->transaction(function () use ($data) {
34
$host = $this->repository->create([
35
'password' => $this->encrypter->encrypt(array_get($data, 'password')),
36
'name' => array_get($data, 'name'),
37
'host' => array_get($data, 'host'),
38
'port' => array_get($data, 'port'),
39
'username' => array_get($data, 'username'),
40
'max_databases' => null,
41
'node_id' => array_get($data, 'node_id'),
42
]);
43
44
// Confirm access using the provided credentials before saving data.
45
$this->dynamic->set('dynamic', $host);
46
$this->databaseManager->connection('dynamic')->select('SELECT 1 FROM dual');
47
48
return $host;
49
});
50
}
51
}
52
53