Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Transformers/Api/Application/ServerDatabaseTransformer.php
10283 views
1
<?php
2
3
namespace Pterodactyl\Transformers\Api\Application;
4
5
use Pterodactyl\Models\Database;
6
use League\Fractal\Resource\Item;
7
use Pterodactyl\Models\DatabaseHost;
8
use League\Fractal\Resource\NullResource;
9
use Pterodactyl\Services\Acl\Api\AdminAcl;
10
use Illuminate\Contracts\Encryption\Encrypter;
11
12
class ServerDatabaseTransformer extends BaseTransformer
13
{
14
protected array $availableIncludes = ['password', 'host'];
15
16
private Encrypter $encrypter;
17
18
/**
19
* Perform dependency injection.
20
*/
21
public function handle(Encrypter $encrypter)
22
{
23
$this->encrypter = $encrypter;
24
}
25
26
/**
27
* Return the resource name for the JSONAPI output.
28
*/
29
public function getResourceName(): string
30
{
31
return Database::RESOURCE_NAME;
32
}
33
34
/**
35
* Transform a database model in a representation for the application API.
36
*/
37
public function transform(Database $model): array
38
{
39
return [
40
'id' => $model->id,
41
'server' => $model->server_id,
42
'host' => $model->database_host_id,
43
'database' => $model->database,
44
'username' => $model->username,
45
'remote' => $model->remote,
46
'max_connections' => $model->max_connections,
47
'created_at' => $model->created_at->toAtomString(),
48
'updated_at' => $model->updated_at->toAtomString(),
49
];
50
}
51
52
/**
53
* Include the database password in the request.
54
*/
55
public function includePassword(Database $model): Item
56
{
57
return $this->item($model, function (Database $model) {
58
return [
59
'password' => $this->encrypter->decrypt($model->password),
60
];
61
}, 'database_password');
62
}
63
64
/**
65
* Return the database host relationship for this server database.
66
*
67
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
68
*/
69
public function includeHost(Database $model): Item|NullResource
70
{
71
if (!$this->authorize(AdminAcl::RESOURCE_DATABASE_HOSTS)) {
72
return $this->null();
73
}
74
75
$model->loadMissing('host');
76
77
return $this->item(
78
$model->getRelation('host'),
79
$this->makeTransformer(DatabaseHostTransformer::class),
80
DatabaseHost::RESOURCE_NAME
81
);
82
}
83
}
84
85