Skip to content

Commit ab2973c

Browse files
committed
Add pack transformer support
1 parent 0a39a9b commit ab2973c

File tree

5 files changed

+62
-194
lines changed

5 files changed

+62
-194
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines.
1111

1212
### Added
1313
* Adds back client API for sending commands or power toggles to a server though the Panel API: `/api/client/servers/<identifier>`
14+
* Added proper transformer for Packs and re-enabled missing includes on server.
1415

1516
## v0.7.3 (Derelict Dermodactylus)
1617
### Fixed
Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
11
<?php
2-
/**
3-
* Pterodactyl - Panel
4-
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
5-
*
6-
* This software is licensed under the terms of the MIT license.
7-
* https://opensource.org/licenses/MIT
8-
*/
92

103
namespace Pterodactyl\Providers;
114

12-
use File;
13-
use Cache;
14-
use Carbon;
15-
use Request;
16-
use Pterodactyl\Models\ApiKey;
5+
use Illuminate\Support\Facades\File;
176
use Illuminate\Support\ServiceProvider;
18-
use Pterodactyl\Services\ApiKeyService;
197

208
class MacroServiceProvider extends ServiceProvider
219
{
@@ -36,35 +24,5 @@ public function boot()
3624

3725
return round($size, ($i < 2) ? 0 : $precision) . ' ' . $units[$i];
3826
});
39-
40-
Request::macro('apiKey', function () {
41-
if (! Request::bearerToken()) {
42-
return false;
43-
}
44-
45-
$parts = explode('.', Request::bearerToken());
46-
47-
if (count($parts) === 2 && strlen($parts[0]) === ApiKeyService::PUB_CRYPTO_BYTES * 2) {
48-
// Because the key itself isn't changing frequently, we simply cache this for
49-
// 15 minutes to speed up the API and keep requests flowing.
50-
return Cache::tags([
51-
'ApiKeyMacro',
52-
'ApiKeyMacro:Key:' . $parts[0],
53-
])->remember('ApiKeyMacro.' . $parts[0], Carbon::now()->addMinutes(15), function () use ($parts) {
54-
return ApiKey::where('public', $parts[0])->first();
55-
});
56-
}
57-
58-
return false;
59-
});
60-
61-
Request::macro('apiKeyHasPermission', function ($permission) {
62-
$key = Request::apiKey();
63-
if (! $key) {
64-
return false;
65-
}
66-
67-
return Request::user()->can($permission, $key);
68-
});
6927
}
7028
}
Lines changed: 21 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,40 @@
11
<?php
2-
/**
3-
* Pterodactyl - Panel
4-
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
5-
*
6-
* This software is licensed under the terms of the MIT license.
7-
* https://opensource.org/licenses/MIT
8-
*/
92

10-
namespace Pterodactyl\Transformers\Admin;
3+
namespace Pterodactyl\Transformers\Api\Application;
114

12-
use Illuminate\Http\Request;
135
use Pterodactyl\Models\Pack;
14-
use League\Fractal\TransformerAbstract;
156

16-
class PackTransformer extends TransformerAbstract
7+
class PackTransformer extends BaseTransformer
178
{
189
/**
19-
* List of resources that can be included.
10+
* Return the resource name for the JSONAPI output.
2011
*
21-
* @var array
12+
* @return string
2213
*/
23-
protected $availableIncludes = [
24-
'option',
25-
'servers',
26-
];
27-
28-
/**
29-
* The Illuminate Request object if provided.
30-
*
31-
* @var \Illuminate\Http\Request|bool
32-
*/
33-
protected $request;
34-
35-
/**
36-
* Setup request object for transformer.
37-
*
38-
* @param \Illuminate\Http\Request|bool $request
39-
*/
40-
public function __construct($request = false)
14+
public function getResourceName(): string
4115
{
42-
if (! $request instanceof Request && $request !== false) {
43-
throw new DisplayException('Request passed to constructor must be of type Request or false.');
44-
}
45-
46-
$this->request = $request;
16+
return Pack::RESOURCE_NAME;
4717
}
4818

4919
/**
50-
* Return a generic transformed pack array.
20+
* Return a transformed User model that can be consumed by external services.
5121
*
22+
* @param \Pterodactyl\Models\Pack $pack
5223
* @return array
5324
*/
54-
public function transform($pack)
55-
{
56-
if (! $pack instanceof Pack) {
57-
return ['id' => null];
58-
}
59-
60-
return $pack->toArray();
61-
}
62-
63-
/**
64-
* Return the packs associated with this service.
65-
*
66-
* @return \Leauge\Fractal\Resource\Item
67-
*/
68-
public function includeOption(Pack $pack)
69-
{
70-
if ($this->request && ! $this->request->apiKeyHasPermission('option-view')) {
71-
return;
72-
}
73-
74-
return $this->item($pack->option, new OptionTransformer($this->request), 'option');
75-
}
76-
77-
/**
78-
* Return the packs associated with this service.
79-
*
80-
* @return \Leauge\Fractal\Resource\Collection
81-
*/
82-
public function includeServers(Pack $pack)
25+
public function transform(Pack $pack): array
8326
{
84-
if ($this->request && ! $this->request->apiKeyHasPermission('server-list')) {
85-
return;
86-
}
87-
88-
return $this->collection($pack->servers, new ServerTransformer($this->request), 'server');
27+
return [
28+
'id' => $pack->id,
29+
'uuid' => $pack->uuid,
30+
'egg' => $pack->egg_id,
31+
'name' => $pack->name,
32+
'description' => $pack->description,
33+
'is_selectable' => (bool) $pack->selectable,
34+
'is_visible' => (bool) $pack->visible,
35+
'is_locked' => (bool) $pack->locked,
36+
'created_at' => $this->formatTimestamp($pack->created_at),
37+
'updated_at' => $this->formatTimestamp($pack->updated_at),
38+
];
8939
}
9040
}

app/Transformers/Api/Application/ServerTransformer.php

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ public function includeAllocations(Server $server)
116116
*
117117
* @param \Pterodactyl\Models\Server $server
118118
* @return \League\Fractal\Resource\Collection|\League\Fractal\Resource\NullResource
119+
*
120+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
119121
*/
120122
public function includeSubusers(Server $server)
121123
{
@@ -133,6 +135,8 @@ public function includeSubusers(Server $server)
133135
*
134136
* @param \Pterodactyl\Models\Server $server
135137
* @return \League\Fractal\Resource\Item|\League\Fractal\Resource\NullResource
138+
*
139+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
136140
*/
137141
public function includeUser(Server $server)
138142
{
@@ -150,40 +154,49 @@ public function includeUser(Server $server)
150154
*
151155
* @param \Pterodactyl\Models\Server $server
152156
* @return \League\Fractal\Resource\Item|\League\Fractal\Resource\NullResource
157+
*
158+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
153159
*/
154-
// public function includePack(Server $server)
155-
// {
156-
// if (! $this->authorize(AdminAcl::RESOURCE_PACKS)) {
157-
// return $this->null();
158-
// }
159-
//
160-
// $server->loadMissing('pack');
161-
//
162-
// return $this->item($server->getRelation('pack'), $this->makeTransformer(PackTransformer::class), 'pack');
163-
// }
160+
public function includePack(Server $server)
161+
{
162+
if (! $this->authorize(AdminAcl::RESOURCE_PACKS)) {
163+
return $this->null();
164+
}
165+
166+
$server->loadMissing('pack');
167+
if (is_null($server->getRelation('pack'))) {
168+
return $this->null();
169+
}
170+
171+
return $this->item($server->getRelation('pack'), $this->makeTransformer(PackTransformer::class), 'pack');
172+
}
164173

165174
/**
166175
* Return a generic array with nest information for this server.
167176
*
168177
* @param \Pterodactyl\Models\Server $server
169178
* @return \League\Fractal\Resource\Item|\League\Fractal\Resource\NullResource
179+
*
180+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
170181
*/
171-
// public function includeNest(Server $server)
172-
// {
173-
// if (! $this->authorize(AdminAcl::RESOURCE_NESTS)) {
174-
// return $this->null();
175-
// }
176-
//
177-
// $server->loadMissing('nest');
178-
//
179-
// return $this->item($server->getRelation('nest'), $this->makeTransformer(NestTransformer::class), 'nest');
180-
// }
182+
public function includeNest(Server $server)
183+
{
184+
if (! $this->authorize(AdminAcl::RESOURCE_NESTS)) {
185+
return $this->null();
186+
}
187+
188+
$server->loadMissing('nest');
189+
190+
return $this->item($server->getRelation('nest'), $this->makeTransformer(NestTransformer::class), 'nest');
191+
}
181192

182193
/**
183194
* Return a generic array with service option information for this server.
184195
*
185196
* @param \Pterodactyl\Models\Server $server
186197
* @return \League\Fractal\Resource\Item|\League\Fractal\Resource\NullResource
198+
*
199+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
187200
*/
188201
public function includeOption(Server $server)
189202
{
@@ -201,6 +214,8 @@ public function includeOption(Server $server)
201214
*
202215
* @param \Pterodactyl\Models\Server $server
203216
* @return \League\Fractal\Resource\Collection|\League\Fractal\Resource\NullResource
217+
*
218+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
204219
*/
205220
public function includeVariables(Server $server)
206221
{
@@ -218,6 +233,8 @@ public function includeVariables(Server $server)
218233
*
219234
* @param \Pterodactyl\Models\Server $server
220235
* @return \League\Fractal\Resource\Item|\League\Fractal\Resource\NullResource
236+
*
237+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
221238
*/
222239
public function includeLocation(Server $server)
223240
{
@@ -235,6 +252,8 @@ public function includeLocation(Server $server)
235252
*
236253
* @param \Pterodactyl\Models\Server $server
237254
* @return \League\Fractal\Resource\Item|\League\Fractal\Resource\NullResource
255+
*
256+
* @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException
238257
*/
239258
public function includeNode(Server $server)
240259
{

app/Transformers/Api/Application/SubuserTransformer.php

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)