From d309f8fbbf0ce5b0286e35607c954b60a34a1046 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Thu, 4 Apr 2019 19:44:17 +0800 Subject: [PATCH] Simplify exception handler --- app/Exceptions/Handler.php | 100 +------------------------ app/Exceptions/PrettyPageException.php | 19 +---- tests/TextureControllerTest.php | 7 +- 3 files changed, 7 insertions(+), 119 deletions(-) diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index a62b32ad..70336c4b 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,73 +3,24 @@ namespace App\Exceptions; use Exception; -use Illuminate\Http\Response; -use Illuminate\Session\TokenMismatchException; use Illuminate\Validation\ValidationException; -use Illuminate\Database\Eloquent\ModelNotFoundException; use Symfony\Component\HttpKernel\Exception\HttpException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; class Handler extends ExceptionHandler { /** * A list of the exception types that should not be reported. - * - * @var array */ protected $dontReport = [ HttpException::class, - ModelNotFoundException::class, - TokenMismatchException::class, ValidationException::class, PrettyPageException::class, - MethodNotAllowedHttpException::class, ]; - /** - * Report or log an exception. - * - * @param Exception $e - * @return void - */ - public function report(Exception $e) - { - parent::report($e); - } - - /** - * Render an exception into an HTTP response. - * - * @param \Illuminate\Http\Request $request - * @param Exception $e - * @return Response - */ public function render($request, Exception $e) { - if ($e instanceof ModelNotFoundException) { - $e = new NotFoundHttpException($e->getMessage(), $e); - } - - if ($e instanceof MethodNotAllowedHttpException) { - abort(403, trans('errors.http.method-not-allowed')); - } - - if ($e instanceof TokenMismatchException) { - if ($request->expectsJson()) { - return json(trans('errors.http.csrf-token-mismatch'), 1); - } - abort(403, trans('errors.http.csrf-token-mismatch')); - } - - if ($e instanceof PrettyPageException) { - return $e->showErrorPage(); - } - if ($e instanceof ValidationException) { - // Quick fix for returning 422 - // @see https://prinzeugen.net/custom-responses-of-laravel-validations/ if ($request->expectsJson()) { return response()->json([ 'errno' => 1, @@ -77,59 +28,10 @@ class Handler extends ExceptionHandler ]); } else { $request->session()->flash('errors', $e->validator->errors()); - return redirect()->back(); } } - foreach ($this->dontReport as $type) { - if ($e instanceof $type) { - return parent::render($request, $e); - } else { - // Hide exception details if we are not in debug mode - if (config('app.debug') && ! $request->ajax()) { - return $this->renderExceptionWithWhoops($e); - } else { - return $this->renderExceptionInBrief($e); - } - } - } - } - - /** - * Render an exception using Whoops. - * - * @param Exception $e - * @param int $code - * @param array $headers - * @return Response - */ - protected function renderExceptionWithWhoops(Exception $e, $code = 200, $headers = []) - { - $whoops = new \Whoops\Run; - $handler = (request()->isMethod('GET')) ? - new \Whoops\Handler\PrettyPageHandler : new \Whoops\Handler\PlainTextHandler; - $whoops->pushHandler($handler); - - return new Response( - $whoops->handleException($e), - $code, - $headers - ); - } - - /** - * Render an exception in a short word. - * - * @param Exception $e - * @return Response - */ - protected function renderExceptionInBrief(Exception $e) - { - if (request()->isMethod('GET') && ! request()->ajax()) { - return response()->view('errors.exception', ['message' => $e->getMessage()]); - } else { - return response($e->getMessage()); - } + return parent::render($request, $e); } } diff --git a/app/Exceptions/PrettyPageException.php b/app/Exceptions/PrettyPageException.php index 2119e424..b74cbc86 100644 --- a/app/Exceptions/PrettyPageException.php +++ b/app/Exceptions/PrettyPageException.php @@ -4,25 +4,12 @@ namespace App\Exceptions; class PrettyPageException extends \Exception { - /** - * Custom error handler. - * - * @param string $message - * @param int $code - * @param bool $render Whether to show a error page. - * @return void - */ - public function __construct($message = 'Error occured.', $code = -1, $render = false) + public function report() { - parent::__construct($message, $code); - - if ($render) { - $this->showErrorPage()->send(); - exit; - } + return $this->render(); } - public function showErrorPage() + public function render() { return response()->view('errors.pretty', ['code' => $this->code, 'message' => $this->message]); } diff --git a/tests/TextureControllerTest.php b/tests/TextureControllerTest.php index eb64ccec..44cf8b47 100644 --- a/tests/TextureControllerTest.php +++ b/tests/TextureControllerTest.php @@ -313,12 +313,11 @@ class TextureControllerTest extends TestCase // Success $png = base64_decode(\App\Http\Controllers\TextureController::getDefaultSteveSkin()); Storage::disk('textures')->put($texture->hash, $png); - $mock = Mockery::mock('overload:Minecraft'); - $mock->shouldReceive('generatePreviewFromSkin') + Mockery::mock('overload:Minecraft') + ->shouldReceive('generateAvatarFromSkin') ->once() ->andReturn(imagecreatefromstring($png)); - $this->get("/avatar/player/20/{$player->name}.png") - ->assertSuccessful(); + $this->get("/avatar/player/20/{$player->name}.png")->assertSuccessful(); Storage::disk('textures')->delete($texture->hash); } }