2015-12-06 18:58:49 +00:00
|
|
|
<?php
|
2016-12-07 22:46:38 +00:00
|
|
|
|
2015-12-06 18:58:49 +00:00
|
|
|
namespace Pterodactyl\Exceptions;
|
|
|
|
|
2018-03-10 19:02:41 +00:00
|
|
|
use Exception;
|
2022-10-14 16:59:20 +00:00
|
|
|
use Illuminate\Http\Request;
|
2018-03-10 19:02:41 +00:00
|
|
|
use Psr\Log\LoggerInterface;
|
2018-01-01 21:11:44 +00:00
|
|
|
use Illuminate\Http\Response;
|
2022-10-14 16:59:20 +00:00
|
|
|
use Illuminate\Http\JsonResponse;
|
2018-03-10 19:02:41 +00:00
|
|
|
use Illuminate\Container\Container;
|
2022-10-14 16:59:20 +00:00
|
|
|
use Illuminate\Http\RedirectResponse;
|
2017-12-17 20:57:05 +00:00
|
|
|
use Prologue\Alerts\AlertsMessageBag;
|
2022-05-22 22:21:38 +00:00
|
|
|
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
|
2016-08-16 23:20:58 +00:00
|
|
|
|
2022-05-22 22:21:38 +00:00
|
|
|
class DisplayException extends PterodactylException implements HttpExceptionInterface
|
2015-12-06 18:58:49 +00:00
|
|
|
{
|
2021-01-23 20:33:34 +00:00
|
|
|
public const LEVEL_DEBUG = 'debug';
|
|
|
|
public const LEVEL_INFO = 'info';
|
|
|
|
public const LEVEL_WARNING = 'warning';
|
|
|
|
public const LEVEL_ERROR = 'error';
|
2017-10-06 05:16:22 +00:00
|
|
|
|
2017-09-27 03:54:34 +00:00
|
|
|
/**
|
2022-10-14 16:59:20 +00:00
|
|
|
* DisplayException constructor.
|
2017-09-27 03:54:34 +00:00
|
|
|
*/
|
2023-02-23 19:30:16 +00:00
|
|
|
public function __construct(string $message, ?\Throwable $previous = null, protected string $level = self::LEVEL_ERROR, int $code = 0)
|
2016-08-16 23:20:58 +00:00
|
|
|
{
|
2017-12-17 20:57:05 +00:00
|
|
|
parent::__construct($message, $code, $previous);
|
2016-08-16 23:20:58 +00:00
|
|
|
}
|
2017-09-27 03:54:34 +00:00
|
|
|
|
2022-10-14 16:59:20 +00:00
|
|
|
public function getErrorLevel(): string
|
2017-09-27 03:54:34 +00:00
|
|
|
{
|
|
|
|
return $this->level;
|
|
|
|
}
|
2017-12-17 20:57:05 +00:00
|
|
|
|
2022-10-14 16:59:20 +00:00
|
|
|
public function getStatusCode(): int
|
2018-01-26 04:34:53 +00:00
|
|
|
{
|
|
|
|
return Response::HTTP_BAD_REQUEST;
|
|
|
|
}
|
|
|
|
|
2022-10-14 16:59:20 +00:00
|
|
|
public function getHeaders(): array
|
2022-05-22 22:21:38 +00:00
|
|
|
{
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
2017-12-17 20:57:05 +00:00
|
|
|
/**
|
|
|
|
* Render the exception to the user by adding a flashed message to the session
|
|
|
|
* and then redirecting them back to the page that they came from. If the
|
|
|
|
* request originated from an API hit, return the error in JSONAPI spec format.
|
|
|
|
*/
|
2022-10-14 16:59:20 +00:00
|
|
|
public function render(Request $request): JsonResponse|RedirectResponse
|
2017-12-17 20:57:05 +00:00
|
|
|
{
|
2022-05-22 22:21:38 +00:00
|
|
|
if ($request->expectsJson()) {
|
|
|
|
return response()->json(Handler::toArray($this), $this->getStatusCode(), $this->getHeaders());
|
|
|
|
}
|
|
|
|
|
2022-05-22 20:23:22 +00:00
|
|
|
app(AlertsMessageBag::class)->danger($this->getMessage())->flash();
|
2017-12-17 20:57:05 +00:00
|
|
|
|
|
|
|
return redirect()->back()->withInput();
|
|
|
|
}
|
2018-03-10 19:02:41 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Log the exception to the logs using the defined error level only if the previous
|
|
|
|
* exception is set.
|
|
|
|
*
|
2022-10-14 16:59:20 +00:00
|
|
|
* @throws \Throwable
|
2018-03-10 19:02:41 +00:00
|
|
|
*/
|
|
|
|
public function report()
|
|
|
|
{
|
2023-02-23 19:30:16 +00:00
|
|
|
if (!$this->getPrevious() instanceof \Exception || !Handler::isReportable($this->getPrevious())) {
|
2018-03-10 19:02:41 +00:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
$logger = Container::getInstance()->make(LoggerInterface::class);
|
2022-10-14 16:59:20 +00:00
|
|
|
} catch (Exception) {
|
2018-03-10 19:02:41 +00:00
|
|
|
throw $this->getPrevious();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $logger->{$this->getErrorLevel()}($this->getPrevious());
|
|
|
|
}
|
2015-12-06 18:58:49 +00:00
|
|
|
}
|