Files
librenms-librenms/app/Exceptions/Handler.php
Tony Murray 686a27f680 Fix custom error messages (#13898)
* Fix custom error messages
Laravel apparently wraps things in ViewException now and so does ignition.  Ideally, we would plug in the same way as ignition, but just fix the old code for now.

* Don't break the ViewException handling if we can't upgrade
2022-04-07 21:08:43 -05:00

76 lines
2.6 KiB
PHP

<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Illuminate\Auth\Access\AuthorizationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $upgradable = [
\LibreNMS\Exceptions\FilePermissionsException::class,
\LibreNMS\Exceptions\DatabaseConnectException::class,
\LibreNMS\Exceptions\DuskUnsafeException::class,
\LibreNMS\Exceptions\UnserializableRouteCache::class,
\LibreNMS\Exceptions\MaximumExecutionTimeExceeded::class,
\LibreNMS\Exceptions\DatabaseInconsistentException::class,
];
public function render($request, Throwable $exception)
{
// If for some reason Blade hasn't been registered, try it now
try {
if (! app()->bound('view')) {
app()->register(\Illuminate\View\ViewServiceProvider::class);
app()->register(\Illuminate\Translation\TranslationServiceProvider::class);
}
} catch (\Exception $e) {
// continue without view
}
// try to upgrade generic exceptions to more specific ones
if (! config('app.debug')) {
if ($exception instanceof \Illuminate\View\ViewException || $exception instanceof \Facade\Ignition\Exceptions\ViewException) {
$base = $exception->getPrevious(); // get real exception
}
foreach ($this->upgradable as $class) {
if ($new = $class::upgrade($base ?? $exception)) {
return parent::render($request, $new);
}
}
}
return parent::render($request, $exception);
}
protected function convertExceptionToArray(Throwable $e)
{
// override the non-debug error output to clue in user on how to debug
if (! config('app.debug') && ! $this->isHttpException($e)) {
return ['message' => 'Server Error: Set APP_DEBUG=true to see details.'];
}
return parent::convertExceptionToArray($e);
}
}