Skip to content

Commit 33bafe9

Browse files
committed
Simplify transformer logic
1 parent f7fc673 commit 33bafe9

File tree

6 files changed

+32
-44
lines changed

6 files changed

+32
-44
lines changed

app/Exceptions/DisplayException.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,11 @@ public function getStatusCode()
5858
*
5959
* @param \Illuminate\Http\Request $request
6060
*
61-
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
61+
* @return \Illuminate\Http\RedirectResponse
6262
*/
6363
public function render($request)
6464
{
65-
if ($request->expectsJson()) {
66-
return response()->json(Handler::convertToArray($this, [
67-
'detail' => $this->getMessage(),
68-
]), method_exists($this, 'getStatusCode') ? $this->getStatusCode() : Response::HTTP_BAD_REQUEST);
69-
}
70-
71-
Container::getInstance()->make(AlertsMessageBag::class)->danger($this->getMessage())->flash();
65+
app(AlertsMessageBag::class)->danger($this->getMessage())->flash();
7266

7367
return redirect()->back()->withInput();
7468
}

app/Exceptions/Handler.php

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public function invalidJson($request, ValidationException $exception)
197197
/**
198198
* Return the exception as a JSONAPI representation for use on API requests.
199199
*/
200-
public static function convertToArray(Throwable $exception, array $override = []): array
200+
protected function convertExceptionToArray(Throwable $exception, array $override = []): array
201201
{
202202
$match = self::$exceptionResponseCodes[get_class($exception)] ?? null;
203203

@@ -226,7 +226,13 @@ public static function convertToArray(Throwable $exception, array $override = []
226226
'file' => str_replace(Application::getInstance()->basePath(), '', $exception->getFile()),
227227
],
228228
'meta' => [
229-
'trace' => explode("\n", $exception->getTraceAsString()),
229+
'trace' => Collection::make($exception->getTrace())
230+
->map(fn ($trace) => Arr::except($trace, ['args']))
231+
->all(),
232+
'previous' => Collection::make($this->extractPrevious($exception))
233+
->map(fn ($exception) => $exception->getTrace())
234+
->map(fn ($trace) => Arr::except($trace, ['args']))
235+
->all(),
230236
],
231237
]);
232238
}
@@ -252,20 +258,30 @@ public static function isReportable(Exception $exception): bool
252258
protected function unauthenticated($request, AuthenticationException $exception)
253259
{
254260
if ($request->expectsJson()) {
255-
return new JsonResponse(self::convertToArray($exception), JsonResponse::HTTP_UNAUTHORIZED);
261+
return new JsonResponse($this->convertExceptionToArray($exception), JsonResponse::HTTP_UNAUTHORIZED);
256262
}
257263

258-
return $this->container->make('redirect')->guest('/auth/login');
264+
return redirect()->guest('/auth/login');
259265
}
260266

261267
/**
262-
* Converts an exception into an array to render in the response. Overrides
263-
* Laravel's built-in converter to output as a JSONAPI spec compliant object.
268+
* Extracts all of the previous exceptions that lead to the one passed into this
269+
* function being thrown.
264270
*
265-
* @return array
271+
* @param \Throwable $e
272+
* @return \Throwable[]
266273
*/
267-
protected function convertExceptionToArray(Throwable $exception)
274+
protected function extractPrevious(Throwable $e): array
268275
{
269-
return self::convertToArray($exception);
276+
$previous = [];
277+
while ($value = $e->getPrevious()) {
278+
if (!$value instanceof Throwable) {
279+
break;
280+
}
281+
$previous[] = $value;
282+
$e = $value;
283+
}
284+
285+
return $previous;
270286
}
271287
}

app/Http/Controllers/Api/Client/ClientApiController.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Pterodactyl\Http\Controllers\Api\Client;
44

55
use Webmozart\Assert\Assert;
6-
use Pterodactyl\Transformers\Daemon\BaseDaemonTransformer;
76
use Pterodactyl\Transformers\Api\Client\BaseClientTransformer;
87
use Pterodactyl\Http\Controllers\Api\Application\ApplicationApiController;
98

@@ -55,13 +54,8 @@ protected function parseIncludes()
5554
*/
5655
public function getTransformer(string $abstract)
5756
{
58-
Assert::methodExists($abstract, 'fromRequest');
57+
Assert::subclassOf($abstract, BaseClientTransformer::class);
5958

60-
/** @var T $transformer */
61-
$transformer = $abstract::fromRequest($this->request);
62-
63-
Assert::isInstanceOfAny($transformer, [BaseClientTransformer::class, BaseDaemonTransformer::class]);
64-
65-
return $transformer;
59+
return $abstract::fromRequest($this->request);
6660
}
6761
}

app/Http/Controllers/Api/Client/Servers/FileController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Pterodactyl\Services\Nodes\NodeJWTService;
1111
use Illuminate\Contracts\Routing\ResponseFactory;
1212
use Pterodactyl\Repositories\Wings\DaemonFileRepository;
13-
use Pterodactyl\Transformers\Daemon\FileObjectTransformer;
13+
use Pterodactyl\Transformers\Api\Client\FileObjectTransformer;
1414
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
1515
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\CopyFileRequest;
1616
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\PullFileRequest;

app/Transformers/Daemon/FileObjectTransformer.php renamed to app/Transformers/Api/Client/FileObjectTransformer.php

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
<?php
22

3-
namespace Pterodactyl\Transformers\Daemon;
3+
namespace Pterodactyl\Transformers\Api\Client;
44

55
use Carbon\Carbon;
66
use Illuminate\Support\Arr;
77

8-
class FileObjectTransformer extends BaseDaemonTransformer
8+
class FileObjectTransformer extends BaseClientTransformer
99
{
10-
/**
11-
* An array of files we allow editing in the Panel.
12-
*
13-
* @var array
14-
*/
15-
private $editable = [];
16-
1710
/**
1811
* Transform a file object response from the daemon into a standardized response.
1912
*

app/Transformers/Daemon/BaseDaemonTransformer.php

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

0 commit comments

Comments
 (0)