Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Transformers/Api/Client/DatabaseTransformer.php
10283 views
1
<?php
2
3
namespace Pterodactyl\Transformers\Api\Client;
4
5
use Pterodactyl\Models\Database;
6
use League\Fractal\Resource\Item;
7
use Pterodactyl\Models\Permission;
8
use League\Fractal\Resource\NullResource;
9
use Illuminate\Contracts\Encryption\Encrypter;
10
use Pterodactyl\Contracts\Extensions\HashidsInterface;
11
12
class DatabaseTransformer extends BaseClientTransformer
13
{
14
protected array $availableIncludes = ['password'];
15
16
private Encrypter $encrypter;
17
18
private HashidsInterface $hashids;
19
20
/**
21
* Handle dependency injection.
22
*/
23
public function handle(Encrypter $encrypter, HashidsInterface $hashids)
24
{
25
$this->encrypter = $encrypter;
26
$this->hashids = $hashids;
27
}
28
29
public function getResourceName(): string
30
{
31
return Database::RESOURCE_NAME;
32
}
33
34
public function transform(Database $model): array
35
{
36
$model->loadMissing('host');
37
38
return [
39
'id' => $this->hashids->encode($model->id),
40
'host' => [
41
'address' => $model->getRelation('host')->host,
42
'port' => $model->getRelation('host')->port,
43
],
44
'name' => $model->database,
45
'username' => $model->username,
46
'connections_from' => $model->remote,
47
'max_connections' => $model->max_connections,
48
];
49
}
50
51
/**
52
* Include the database password in the request.
53
*/
54
public function includePassword(Database $database): Item|NullResource
55
{
56
if (!$this->request->user()->can(Permission::ACTION_DATABASE_VIEW_PASSWORD, $database->server)) {
57
return $this->null();
58
}
59
60
return $this->item($database, function (Database $model) {
61
return [
62
'password' => $this->encrypter->decrypt($model->password),
63
];
64
}, 'database_password');
65
}
66
}
67
68