misc_pterodactyl-panel/app/Exceptions/DisplayException.php

106 lines
2.6 KiB
PHP
Raw Normal View History

<?php
2016-12-07 22:46:38 +00:00
namespace Pterodactyl\Exceptions;
use Exception;
2017-09-27 03:54:34 +00:00
use Throwable;
use Psr\Log\LoggerInterface;
use Illuminate\Http\Response;
use Illuminate\Container\Container;
use Prologue\Alerts\AlertsMessageBag;
2022-05-22 22:21:38 +00:00
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
2022-05-22 22:21:38 +00:00
class DisplayException extends PterodactylException implements HttpExceptionInterface
{
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
/**
* @var string
*/
protected $level;
2017-03-19 23:36:50 +00:00
/**
* Exception constructor.
*
2019-09-06 04:32:57 +00:00
* @param string $message
* @param string $level
* @param int $code
2017-03-19 23:36:50 +00:00
*/
2017-10-24 02:10:32 +00:00
public function __construct($message, Throwable $previous = null, $level = self::LEVEL_ERROR, $code = 0)
{
parent::__construct($message, $code, $previous);
2017-09-27 03:54:34 +00:00
$this->level = $level;
}
2017-09-27 03:54:34 +00:00
/**
* @return string
*/
public function getErrorLevel()
{
return $this->level;
}
/**
* @return int
*/
public function getStatusCode()
{
return Response::HTTP_BAD_REQUEST;
}
2022-05-22 22:21:38 +00:00
/**
* @return array
*/
public function getHeaders()
{
return [];
}
/**
* 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.
*
* @param \Illuminate\Http\Request $request
2021-01-23 20:33:34 +00:00
*
2022-05-22 22:21:38 +00:00
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
*/
public function render($request)
{
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();
return redirect()->back()->withInput();
}
/**
* Log the exception to the logs using the defined error level only if the previous
* exception is set.
*
* @return mixed
*
* @throws \Exception
*/
public function report()
{
2021-01-23 20:33:34 +00:00
if (!$this->getPrevious() instanceof Exception || !Handler::isReportable($this->getPrevious())) {
return null;
}
try {
$logger = Container::getInstance()->make(LoggerInterface::class);
} catch (Exception $ex) {
throw $this->getPrevious();
}
return $logger->{$this->getErrorLevel()}($this->getPrevious());
}
}