mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-02 05:45:13 +08:00
Uploads: Added user-facing message for Laravel post limit handling
Uploads over the post max size Would previously error without a clean user facing message. This catches that error to provide a user friendly message, compatible with our common error handling. Tested on image manager handling. Added test to cover.
This commit is contained in:
parent
21badde4ef
commit
59da7666b5
@ -6,6 +6,7 @@ use Exception;
|
|||||||
use Illuminate\Auth\AuthenticationException;
|
use Illuminate\Auth\AuthenticationException;
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||||
|
use Illuminate\Http\Exceptions\PostTooLargeException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
@ -59,6 +60,10 @@ class Handler extends ExceptionHandler
|
|||||||
*/
|
*/
|
||||||
public function render($request, Throwable $e)
|
public function render($request, Throwable $e)
|
||||||
{
|
{
|
||||||
|
if ($e instanceof PostTooLargeException) {
|
||||||
|
$e = new NotifyException(trans('errors.server_post_limit'), '/', 413);
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->isApiRequest($request)) {
|
if ($this->isApiRequest($request)) {
|
||||||
return $this->renderApiException($e);
|
return $this->renderApiException($e);
|
||||||
}
|
}
|
||||||
@ -71,7 +76,7 @@ class Handler extends ExceptionHandler
|
|||||||
*/
|
*/
|
||||||
protected function isApiRequest(Request $request): bool
|
protected function isApiRequest(Request $request): bool
|
||||||
{
|
{
|
||||||
return strpos($request->path(), 'api/') === 0;
|
return str_starts_with($request->path(), 'api/');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,6 +44,7 @@ return [
|
|||||||
'cannot_get_image_from_url' => 'Cannot get image from :url',
|
'cannot_get_image_from_url' => 'Cannot get image from :url',
|
||||||
'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.',
|
'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.',
|
||||||
'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.',
|
'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.',
|
||||||
|
'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.',
|
||||||
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
|
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
|
||||||
|
|
||||||
// Drawing & Images
|
// Drawing & Images
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Tests;
|
namespace Tests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\Middleware\ValidatePostSize;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class ErrorTest extends TestCase
|
class ErrorTest extends TestCase
|
||||||
@ -45,4 +46,16 @@ class ErrorTest extends TestCase
|
|||||||
$resp->assertStatus(404);
|
$resp->assertStatus(404);
|
||||||
$resp->assertSeeText('Image Not Found');
|
$resp->assertSeeText('Image Not Found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_posts_above_php_limit_shows_friendly_error()
|
||||||
|
{
|
||||||
|
// Fake super large JSON request
|
||||||
|
$resp = $this->asEditor()->call('GET', '/books', [], [], [], [
|
||||||
|
'CONTENT_LENGTH' => '10000000000',
|
||||||
|
'HTTP_ACCEPT' => 'application/json',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$resp->assertStatus(413);
|
||||||
|
$resp->assertJson(['error' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user