diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 00122c15a..02da3d5de 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -9,7 +9,7 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; -use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Throwable; class Handler extends ExceptionHandler @@ -79,10 +79,10 @@ class Handler extends ExceptionHandler */ protected function renderApiException(Throwable $e): JsonResponse { - $code = $e->getCode() === 0 ? 500 : $e->getCode(); + $code = 500; $headers = []; - if ($e instanceof HttpException) { + if ($e instanceof HttpExceptionInterface) { $code = $e->getStatusCode(); $headers = $e->getHeaders(); } diff --git a/app/Exceptions/PrettyException.php b/app/Exceptions/PrettyException.php index f446442d0..d0aca5922 100644 --- a/app/Exceptions/PrettyException.php +++ b/app/Exceptions/PrettyException.php @@ -4,8 +4,9 @@ namespace BookStack\Exceptions; use Exception; use Illuminate\Contracts\Support\Responsable; +use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; -class PrettyException extends Exception implements Responsable +class PrettyException extends Exception implements Responsable, HttpExceptionInterface { /** * @var ?string @@ -17,6 +18,11 @@ class PrettyException extends Exception implements Responsable */ protected $details = null; + /** + * @var array + */ + protected $headers = []; + /** * Render a response for when this exception occurs. * @@ -24,7 +30,7 @@ class PrettyException extends Exception implements Responsable */ public function toResponse($request) { - $code = ($this->getCode() === 0) ? 500 : $this->getCode(); + $code = $this->getStatusCode(); return response()->view('errors.' . $code, [ 'message' => $this->getMessage(), @@ -46,4 +52,30 @@ class PrettyException extends Exception implements Responsable return $this; } + + /** + * Get the desired HTTP status code for this exception. + */ + public function getStatusCode(): int + { + return ($this->getCode() === 0) ? 500 : $this->getCode(); + } + + /** + * Get the desired HTTP headers for this exception. + * @return array + */ + public function getHeaders(): array + { + return $this->headers; + } + + /** + * Set the desired HTTP headers for this exception. + * @param array $headers + */ + public function setHeaders(array $headers): void + { + $this->headers = $headers; + } }