diff --git a/CHANGELOG.md b/CHANGELOG.md index af079ff9..7d4361d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ This project follows [Semantic Versioning](http://semver.org) guidelines. * Fixes the redis password not saving correctly when setting up the environment from the command line. * Fixes a bug with transaction handling in many areas of the application that would cause validation error messages and other session data to not be persisted properly when using the database as the session driver. +* Fix a bug introduced at some point in the past that causes internal data integrity exceptions to not bubble up to +the user correctly, leading to extraneous and confusing exception messages. ### Changed * `allocation_limit` for servers now defaults to a null value, and is not required in PATCH/POST requests when adding diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index b74a71ea..14cef076 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -15,6 +15,7 @@ use Illuminate\Database\Eloquent\ModelNotFoundException; use Symfony\Component\HttpKernel\Exception\HttpException; use Pterodactyl\Exceptions\Repository\RecordNotFoundException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; class Handler extends ExceptionHandler { @@ -153,6 +154,26 @@ class Handler extends ExceptionHandler $connections->rollBack(0); } + // Because of some breaking change snuck into a Laravel update that didn't get caught + // by any of the tests, exceptions implementing the HttpExceptionInterface get marked + // as being HttpExceptions, but aren't actually implementing the HttpException abstract. + // + // This is incredibly annoying because we can't just temporarily override the handler to + // allow these (at least without taking on a high maintenance cost). Laravel 5.8 fixes this, + // so when we update (or have updated) this code can be removed. + // + // @see https://github.com/laravel/framework/pull/25975 + // @todo remove this code when upgrading to Laravel 5.8 + if ($exception instanceof HttpExceptionInterface && ! $exception instanceof HttpException) { + $exception = new HttpException( + $exception->getStatusCode(), + $exception->getMessage(), + $exception, + $exception->getHeaders(), + $exception->getCode() + ); + } + return parent::render($request, $exception); }