diff --git a/composer.json b/composer.json index f1bc1631..4f4f3041 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,6 @@ "php": "^7.2", "ext-json": "*", "ext-pdo": "*", - "acelaya/ze-content-based-error-handler": "^3.0", "akrabat/ip-address-middleware": "^1.0", "cakephp/chronos": "^1.2", "cocur/slugify": "^3.0", diff --git a/config/autoload/middleware-pipeline.global.php b/config/autoload/middleware-pipeline.global.php index f9af01e3..9ea5e260 100644 --- a/config/autoload/middleware-pipeline.global.php +++ b/config/autoload/middleware-pipeline.global.php @@ -10,9 +10,20 @@ use Zend\Stratigility\Middleware\ErrorHandler; return [ 'middleware_pipeline' => [ - 'pre-routing' => [ + 'error-handler' => [ 'middleware' => [ ErrorHandler::class, + ], + 'priority' => 15, + ], +// 'error-handler-rest' => [ +// 'path' => '/rest', +// 'middleware' => [], +// 'priority' => 14, +// ], + + 'pre-routing' => [ + 'middleware' => [ Expressive\Helper\ContentLengthMiddleware::class, Common\Middleware\CloseDbConnectionMiddleware::class, ], diff --git a/config/config.php b/config/config.php index 352a27ca..2c817d1e 100644 --- a/config/config.php +++ b/config/config.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace Shlinkio\Shlink; -use Acelaya\ExpressiveErrorHandler; use Zend\ConfigAggregator; use Zend\Expressive; @@ -16,7 +15,6 @@ return (new ConfigAggregator\ConfigAggregator([ Expressive\Router\FastRouteRouter\ConfigProvider::class, Expressive\Plates\ConfigProvider::class, Expressive\Swoole\ConfigProvider::class, - ExpressiveErrorHandler\ConfigProvider::class, Common\ConfigProvider::class, IpGeolocation\ConfigProvider::class, Core\ConfigProvider::class, diff --git a/module/Rest/config/error-handler.config.php b/module/Rest/config/error-handler.config.php deleted file mode 100644 index c7503b72..00000000 --- a/module/Rest/config/error-handler.config.php +++ /dev/null @@ -1,21 +0,0 @@ - [ - 'plugins' => [ - 'invokables' => [ - 'application/json' => JsonErrorResponseGenerator::class, - ], - 'aliases' => [ - 'application/x-json' => 'application/json', - 'text/json' => 'application/json', - ], - ], - ], - -]; diff --git a/module/Rest/src/Action/HealthAction.php b/module/Rest/src/Action/HealthAction.php index 23090165..ac548fde 100644 --- a/module/Rest/src/Action/HealthAction.php +++ b/module/Rest/src/Action/HealthAction.php @@ -15,8 +15,8 @@ use Zend\Diactoros\Response\JsonResponse; class HealthAction extends AbstractRestAction { private const HEALTH_CONTENT_TYPE = 'application/health+json'; - private const PASS_STATUS = 'pass'; - private const FAIL_STATUS = 'fail'; + private const STATUS_PASS = 'pass'; + private const STATUS_FAIL = 'fail'; protected const ROUTE_PATH = '/health'; protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET]; @@ -48,7 +48,7 @@ class HealthAction extends AbstractRestAction $statusCode = $connected ? self::STATUS_OK : self::STATUS_SERVICE_UNAVAILABLE; return new JsonResponse([ - 'status' => $connected ? self::PASS_STATUS : self::FAIL_STATUS, + 'status' => $connected ? self::STATUS_PASS : self::STATUS_FAIL, 'version' => $this->options->getVersion(), 'links' => [ 'about' => 'https://shlink.io', diff --git a/module/Rest/src/ErrorHandler/JsonErrorResponseGenerator.php b/module/Rest/src/ErrorHandler/JsonErrorResponseGenerator.php deleted file mode 100644 index ca9ed12c..00000000 --- a/module/Rest/src/ErrorHandler/JsonErrorResponseGenerator.php +++ /dev/null @@ -1,44 +0,0 @@ -getStatusCode(); - $responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase(); - $status = $status < 400 ? self::STATUS_INTERNAL_SERVER_ERROR : $status; - - return new JsonResponse([ - 'error' => $this->responsePhraseToCode($responsePhrase), - 'message' => $responsePhrase, - ], $status); - } - - private function responsePhraseToCode(string $responsePhrase): string - { - return strtoupper(str_replace(' ', '_', $responsePhrase)); - } -} diff --git a/module/Rest/test/ConfigProviderTest.php b/module/Rest/test/ConfigProviderTest.php index 57959367..3cd574b3 100644 --- a/module/Rest/test/ConfigProviderTest.php +++ b/module/Rest/test/ConfigProviderTest.php @@ -18,11 +18,10 @@ class ConfigProviderTest extends TestCase } /** @test */ - public function properConfigIsReturned() + public function properConfigIsReturned(): void { $config = $this->configProvider->__invoke(); - $this->assertArrayHasKey('error_handler', $config); $this->assertArrayHasKey('routes', $config); $this->assertArrayHasKey('dependencies', $config); } diff --git a/module/Rest/test/ErrorHandler/JsonErrorResponseGeneratorTest.php b/module/Rest/test/ErrorHandler/JsonErrorResponseGeneratorTest.php deleted file mode 100644 index d9b99bdd..00000000 --- a/module/Rest/test/ErrorHandler/JsonErrorResponseGeneratorTest.php +++ /dev/null @@ -1,62 +0,0 @@ -errorHandler = new JsonErrorResponseGenerator(); - } - - /** @test */ - public function noErrorStatusReturnsInternalServerError(): void - { - /** @var Response\JsonResponse $response */ - $response = $this->errorHandler->__invoke(null, new ServerRequest(), new Response()); - $payload = $response->getPayload(); - - $this->assertInstanceOf(Response\JsonResponse::class, $response); - $this->assertEquals(500, $response->getStatusCode()); - $this->assertEquals('Internal Server Error', $payload['message']); - } - - /** - * @test - * @dataProvider provideStatus - */ - public function errorStatusReturnsThatStatus(int $status, string $message): void - { - /** @var Response\JsonResponse $response */ - $response = $this->errorHandler->__invoke( - null, - new ServerRequest(), - (new Response())->withStatus($status, $message) - ); - $payload = $response->getPayload(); - - $this->assertInstanceOf(Response\JsonResponse::class, $response); - $this->assertEquals($status, $response->getStatusCode()); - $this->assertEquals($message, $payload['message']); - } - - public function provideStatus(): iterable - { - return array_map(function (int $status) { - return [$status, 'Some message']; - }, range(400, 500, 20)); - } -}