Simplify transformer logic
This commit is contained in:
parent
f7fc67344e
commit
33bafe9277
6 changed files with 32 additions and 44 deletions
|
@ -58,17 +58,11 @@ class DisplayException extends PterodactylException
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
*/
|
*/
|
||||||
public function render($request)
|
public function render($request)
|
||||||
{
|
{
|
||||||
if ($request->expectsJson()) {
|
app(AlertsMessageBag::class)->danger($this->getMessage())->flash();
|
||||||
return response()->json(Handler::convertToArray($this, [
|
|
||||||
'detail' => $this->getMessage(),
|
|
||||||
]), method_exists($this, 'getStatusCode') ? $this->getStatusCode() : Response::HTTP_BAD_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
Container::getInstance()->make(AlertsMessageBag::class)->danger($this->getMessage())->flash();
|
|
||||||
|
|
||||||
return redirect()->back()->withInput();
|
return redirect()->back()->withInput();
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,7 @@ class Handler extends ExceptionHandler
|
||||||
/**
|
/**
|
||||||
* Return the exception as a JSONAPI representation for use on API requests.
|
* Return the exception as a JSONAPI representation for use on API requests.
|
||||||
*/
|
*/
|
||||||
public static function convertToArray(Throwable $exception, array $override = []): array
|
protected function convertExceptionToArray(Throwable $exception, array $override = []): array
|
||||||
{
|
{
|
||||||
$match = self::$exceptionResponseCodes[get_class($exception)] ?? null;
|
$match = self::$exceptionResponseCodes[get_class($exception)] ?? null;
|
||||||
|
|
||||||
|
@ -226,7 +226,13 @@ class Handler extends ExceptionHandler
|
||||||
'file' => str_replace(Application::getInstance()->basePath(), '', $exception->getFile()),
|
'file' => str_replace(Application::getInstance()->basePath(), '', $exception->getFile()),
|
||||||
],
|
],
|
||||||
'meta' => [
|
'meta' => [
|
||||||
'trace' => explode("\n", $exception->getTraceAsString()),
|
'trace' => Collection::make($exception->getTrace())
|
||||||
|
->map(fn ($trace) => Arr::except($trace, ['args']))
|
||||||
|
->all(),
|
||||||
|
'previous' => Collection::make($this->extractPrevious($exception))
|
||||||
|
->map(fn ($exception) => $exception->getTrace())
|
||||||
|
->map(fn ($trace) => Arr::except($trace, ['args']))
|
||||||
|
->all(),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -252,20 +258,30 @@ class Handler extends ExceptionHandler
|
||||||
protected function unauthenticated($request, AuthenticationException $exception)
|
protected function unauthenticated($request, AuthenticationException $exception)
|
||||||
{
|
{
|
||||||
if ($request->expectsJson()) {
|
if ($request->expectsJson()) {
|
||||||
return new JsonResponse(self::convertToArray($exception), JsonResponse::HTTP_UNAUTHORIZED);
|
return new JsonResponse($this->convertExceptionToArray($exception), JsonResponse::HTTP_UNAUTHORIZED);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->container->make('redirect')->guest('/auth/login');
|
return redirect()->guest('/auth/login');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts an exception into an array to render in the response. Overrides
|
* Extracts all of the previous exceptions that lead to the one passed into this
|
||||||
* Laravel's built-in converter to output as a JSONAPI spec compliant object.
|
* function being thrown.
|
||||||
*
|
*
|
||||||
* @return array
|
* @param \Throwable $e
|
||||||
|
* @return \Throwable[]
|
||||||
*/
|
*/
|
||||||
protected function convertExceptionToArray(Throwable $exception)
|
protected function extractPrevious(Throwable $e): array
|
||||||
{
|
{
|
||||||
return self::convertToArray($exception);
|
$previous = [];
|
||||||
|
while ($value = $e->getPrevious()) {
|
||||||
|
if (!$value instanceof Throwable) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$previous[] = $value;
|
||||||
|
$e = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $previous;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
namespace Pterodactyl\Http\Controllers\Api\Client;
|
namespace Pterodactyl\Http\Controllers\Api\Client;
|
||||||
|
|
||||||
use Webmozart\Assert\Assert;
|
use Webmozart\Assert\Assert;
|
||||||
use Pterodactyl\Transformers\Daemon\BaseDaemonTransformer;
|
|
||||||
use Pterodactyl\Transformers\Api\Client\BaseClientTransformer;
|
use Pterodactyl\Transformers\Api\Client\BaseClientTransformer;
|
||||||
use Pterodactyl\Http\Controllers\Api\Application\ApplicationApiController;
|
use Pterodactyl\Http\Controllers\Api\Application\ApplicationApiController;
|
||||||
|
|
||||||
|
@ -55,13 +54,8 @@ abstract class ClientApiController extends ApplicationApiController
|
||||||
*/
|
*/
|
||||||
public function getTransformer(string $abstract)
|
public function getTransformer(string $abstract)
|
||||||
{
|
{
|
||||||
Assert::methodExists($abstract, 'fromRequest');
|
Assert::subclassOf($abstract, BaseClientTransformer::class);
|
||||||
|
|
||||||
/** @var T $transformer */
|
return $abstract::fromRequest($this->request);
|
||||||
$transformer = $abstract::fromRequest($this->request);
|
|
||||||
|
|
||||||
Assert::isInstanceOfAny($transformer, [BaseClientTransformer::class, BaseDaemonTransformer::class]);
|
|
||||||
|
|
||||||
return $transformer;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ use Illuminate\Http\JsonResponse;
|
||||||
use Pterodactyl\Services\Nodes\NodeJWTService;
|
use Pterodactyl\Services\Nodes\NodeJWTService;
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||||
use Pterodactyl\Repositories\Wings\DaemonFileRepository;
|
use Pterodactyl\Repositories\Wings\DaemonFileRepository;
|
||||||
use Pterodactyl\Transformers\Daemon\FileObjectTransformer;
|
use Pterodactyl\Transformers\Api\Client\FileObjectTransformer;
|
||||||
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
|
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
|
||||||
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\CopyFileRequest;
|
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\CopyFileRequest;
|
||||||
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\PullFileRequest;
|
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\PullFileRequest;
|
||||||
|
|
|
@ -1,19 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Pterodactyl\Transformers\Daemon;
|
namespace Pterodactyl\Transformers\Api\Client;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
class FileObjectTransformer extends BaseDaemonTransformer
|
class FileObjectTransformer extends BaseClientTransformer
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* An array of files we allow editing in the Panel.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private $editable = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transform a file object response from the daemon into a standardized response.
|
* Transform a file object response from the daemon into a standardized response.
|
||||||
*
|
*
|
|
@ -1,9 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Pterodactyl\Transformers\Daemon;
|
|
||||||
|
|
||||||
use League\Fractal\TransformerAbstract;
|
|
||||||
|
|
||||||
abstract class BaseDaemonTransformer extends TransformerAbstract
|
|
||||||
{
|
|
||||||
}
|
|
Loading…
Reference in a new issue