diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 845f14dd..c4b9bc06 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -50,41 +50,135 @@ public function report(Exception $exception) */ public function render($request, Exception $exception) { - if (!($exception instanceof ValidationException)) { - $response = [ - 'message' => (string)$exception->getMessage(), - 'status_code' => 400, - ]; + // if (!($exception instanceof ValidationException)) { - if ($exception instanceof HttpException) { - $response['message'] = Response::$statusTexts[$exception->getStatusCode()]; - $response['status_code'] = $exception->getStatusCode(); - } else if ($exception instanceof ModelNotFoundException) { - $response['message'] = Response::$statusTexts[Response::HTTP_NOT_FOUND]; - $response['status_code'] = Response::HTTP_NOT_FOUND; - } + // if ($exception instanceof \Illuminate\Auth\AuthenticationException) { - if ($this->isDebugMode()) { - $response['debug'] = [ - 'exception' => get_class($exception), - 'trace' => $exception->getTrace() - ]; - // return parent::render($request, $exception); - } + // $response['message'] = (string)$exception->getMessage(); + // $response['status_code'] = Response::HTTP_UNAUTHORIZED; - return response()->json($response, $response['status_code']); + // } else if ($exception instanceof HttpException) { + + // $response['message'] = Response::$statusTexts[$exception->getStatusCode()]; + // $response['status_code'] = $exception->getStatusCode(); + + // } else if ($exception instanceof ModelNotFoundException) { + + // $response['message'] = Response::$statusTexts[Response::HTTP_NOT_FOUND]; + // $response['status_code'] = Response::HTTP_NOT_FOUND; + // } + // else { + // $response = [ + // 'message' => (string)$exception->getMessage(), + // 'status_code' => $exception->getStatusCode(), + // ]; + // } + + // if ($this->isDebugMode()) { + // $response['debug'] = [ + // 'exception' => get_class($exception), + // 'trace' => $exception->getTrace() + // ]; + // // return parent::render($request, $exception); + // } + + // return response()->json($response, $response['status_code']); + // } + + // return parent::render($request, $exception); + + if ( $request->wantsJson() ) { + + return $this->handleApiException($request, $exception); + + } else { + + return parent::render($request, $exception); } - return parent::render($request, $exception); } + /** - * Determine if the application is in debug mode. + * Render an exception into an HTTP response. * - * @return Boolean + * @param \Illuminate\Http\Request $request + * @param \Exception $exception + * @return \Illuminate\Http\JsonResponse */ - public function isDebugMode() + private function handleApiException($request, Exception $exception) { - return (boolean) env('APP_DEBUG'); + $exception = $this->prepareException($exception); + + if ($exception instanceof \Illuminate\Http\Exception\HttpResponseException) { + $exception = $exception->getResponse(); + } + + if ($exception instanceof \Illuminate\Auth\AuthenticationException) { + $exception = $this->unauthenticated($request, $exception); + } + + if ($exception instanceof \Illuminate\Validation\ValidationException) { + $exception = $this->convertValidationExceptionToResponse($exception, $request); + } + + return $this->customApiResponse($exception); + } + + + /** + * Set a specific response payload for commons http error codes + * + * @param \Exception $exception + * @return \Illuminate\Http\JsonResponse + */ + private function customApiResponse($exception) + { + if (method_exists($exception, 'getStatusCode')) { + $statusCode = $exception->getStatusCode(); + } else { + $statusCode = 500; + } + + $response = []; + $response['status_code'] = $statusCode; + + switch ($statusCode) { + case 401: + $response['message'] = 'Unauthorized'; + break; + + case 403: + $response['message'] = 'Forbidden'; + break; + + case 404: + $response['message'] = 'Not Found'; + break; + + case 405: + $response['message'] = 'Method Not Allowed'; + break; + + case 422: + $response['message'] = $exception->original['message']; + $response['errors'] = $exception->original['errors']; + break; + + default: + $response['message'] = ($statusCode >= 500) ? 'Whoops, looks like something went wrong' : $exception->getMessage(); + break; + } + + if (env('APP_DEBUG')) { + + $response['debug'] = [ + // 'exception' => get_class($exception), + // 'code' => $exception->getCode(), + // 'trace' => $exception->getTrace(), + ]; + } + + return response()->json($response, $statusCode); } } diff --git a/resources/js/views/Accounts.vue b/resources/js/views/Accounts.vue index 674a2074..9e93e37b 100644 --- a/resources/js/views/Accounts.vue +++ b/resources/js/views/Accounts.vue @@ -176,13 +176,13 @@ }, - beforeRouteEnter (to, from, next) { - if ( ! localStorage.getItem('jwt')) { - return next('login') - } + // beforeRouteEnter (to, from, next) { + // if ( ! localStorage.getItem('jwt')) { + // return next('login') + // } - next() - } + // next() + // } }