mirror of
https://github.com/shlinkio/shlink.git
synced 2025-02-25 18:45:27 -06:00
Fixed JsonErrorHandler and prevented AuthorizationMiddleware to eat exceptions
This commit is contained in:
parent
f6c39285c9
commit
fe7928ae0e
@ -1,34 +1,28 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Shlinkio\Shlink\Rest\ErrorHandler;
|
namespace Shlinkio\Shlink\Rest\ErrorHandler;
|
||||||
|
|
||||||
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorHandlerInterface;
|
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorInterface;
|
||||||
|
use Fig\Http\Message\StatusCodeInterface;
|
||||||
use Psr\Http\Message\ResponseInterface as Response;
|
use Psr\Http\Message\ResponseInterface as Response;
|
||||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||||
use Zend\Diactoros\Response\JsonResponse;
|
use Zend\Diactoros\Response\JsonResponse;
|
||||||
use Zend\Expressive\Router\RouteResult;
|
use Zend\Expressive\Router\RouteResult;
|
||||||
|
|
||||||
class JsonErrorHandler implements ErrorHandlerInterface
|
class JsonErrorHandler implements ErrorResponseGeneratorInterface, StatusCodeInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Final handler for an application.
|
* Final handler for an application.
|
||||||
*
|
*
|
||||||
|
* @param \Throwable|\Exception $e
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @param Response $response
|
* @param Response $response
|
||||||
* @param null|mixed $err
|
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function __invoke(Request $request, Response $response, $err = null)
|
public function __invoke($e, Request $request, Response $response)
|
||||||
{
|
{
|
||||||
$hasRoute = $request->getAttribute(RouteResult::class) !== null;
|
$status = $response->getStatusCode();
|
||||||
$isNotFound = ! $hasRoute && ! isset($err);
|
$responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
|
||||||
if ($isNotFound) {
|
$status = $status < 400 ? self::STATUS_INTERNAL_SERVER_ERROR : $status;
|
||||||
$responsePhrase = 'Not found';
|
|
||||||
$status = 404;
|
|
||||||
} else {
|
|
||||||
$status = $response->getStatusCode();
|
|
||||||
$responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
|
|
||||||
$status = $status < 400 ? 500 : $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new JsonResponse([
|
return new JsonResponse([
|
||||||
'error' => $this->responsePhraseToCode($responsePhrase),
|
'error' => $this->responsePhraseToCode($responsePhrase),
|
||||||
|
@ -134,12 +134,6 @@ class CheckAuthenticationMiddleware implements MiddlewareInterface
|
|||||||
} catch (AuthenticationException $e) {
|
} catch (AuthenticationException $e) {
|
||||||
$this->logger->warning('Tried to access API with an invalid JWT.' . PHP_EOL . $e);
|
$this->logger->warning('Tried to access API with an invalid JWT.' . PHP_EOL . $e);
|
||||||
return $this->createTokenErrorResponse();
|
return $this->createTokenErrorResponse();
|
||||||
} catch (\Exception $e) {
|
|
||||||
$this->logger->warning('Unexpected error occurred.' . PHP_EOL . $e);
|
|
||||||
return $this->createTokenErrorResponse();
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
$this->logger->warning('Unexpected error occurred.' . PHP_EOL . $e);
|
|
||||||
return $this->createTokenErrorResponse();
|
|
||||||
} finally {
|
} finally {
|
||||||
ErrorHandler::clean();
|
ErrorHandler::clean();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user