1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2026-10-24 18:59:20 +03:00
Files
bookstack/app/Exceptions/PrettyException.php
Dan Brown 2183fc7fc8 API: Limited exception details shown
Updated exception handler to reduce the amount of detail shown to
prevent potentially sensitive details (like internal paths) being shown
in the error message.

Added an interface for specifically marking exceptions whos messages we
may want to show.

Thanks to Tanner Marks for reporting.
2026-07-28 13:27:42 +01:00

72 lines
1.6 KiB
PHP

<?php
namespace BookStack\Exceptions;
use Exception;
use Illuminate\Contracts\Support\Responsable;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
class PrettyException extends Exception implements Responsable, HttpExceptionInterface, ShowsApiExceptionMessage
{
protected ?string $subtitle = null;
protected ?string $details = null;
/**
* Render a response for when this exception occurs.
*
* {@inheritdoc}
*/
public function toResponse($request)
{
$code = $this->getStatusCode();
return response()->view('errors.' . $code, [
'message' => $this->getMessage(),
'subtitle' => $this->subtitle,
'details' => $this->details,
], $code);
}
public function setSubtitle(string $subtitle): self
{
$this->subtitle = $subtitle;
return $this;
}
public function setDetails(string $details): self
{
$this->details = $details;
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.
*/
public function getHeaders(): array
{
return [];
}
public function getMessageForApi(): string
{
$message = $this->getMessage() . '.';
if ($this->subtitle) {
$message .= " {$this->subtitle}.";
}
if ($this->details) {
$message .= " {$this->details}.";
}
return $message;
}
}