Skip to content

Commit 317839e

Browse files
committed
update after PR 711
1 parent 502c102 commit 317839e

File tree

7 files changed

+34
-156
lines changed

7 files changed

+34
-156
lines changed

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,8 +619,6 @@ You can enable the following middleware using the "middlewares" config parameter
619619
- "joinLimits": Restricts join parameters to prevent database scraping
620620
- "customization": Provides handlers for request and response customization
621621
- "xml": Translates all input and output from JSON to XML
622-
- "errors": Catches throwables and returns an error response instead of throwing (enabled by default)\
623-
Should always be applied after cors middleware, otherwise errors will not have CORS headers sent to the client.
624622

625623
The "middlewares" config parameter is a comma separated list of enabled middlewares.
626624
You can tune the middleware behavior using middleware specific configuration parameters:

api.php

Lines changed: 13 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6893,17 +6893,6 @@ public function __construct(Router $router, Responder $responder, array $propert
68936893
$this->properties = $properties;
68946894
}
68956895

6896-
/**
6897-
* allows to load middlewares in a specific order
6898-
* The higher the priority, the earlier the middleware will be called
6899-
*
6900-
* @return int
6901-
*/
6902-
public function getPriority() /* : int */
6903-
{
6904-
return 1;
6905-
}
6906-
69076896
protected function getArrayProperty(string $key, string $default): array
69086897
{
69096898
return array_filter(array_map('trim', explode(',', $this->getProperty($key, $default))));
@@ -7068,10 +7057,6 @@ public function route(ServerRequestInterface $request): ResponseInterface
70687057
$this->cache->set('PathTree', $data, $this->ttl);
70697058
}
70707059

7071-
uasort($this->middlewares, function (Middleware $a, Middleware $b) {
7072-
return $a->getPriority() > $b->getPriority() ? 1 : ($a->getPriority() === $b->getPriority() ? 0 : -1);
7073-
});
7074-
70757060
return $this->handle($request);
70767061
}
70777062

@@ -7392,7 +7377,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
73927377
}
73937378
}
73947379

7395-
// file: src/Tqdev/PhpCrudApi/Middleware/CatchErrorsMiddleware.php
7380+
// file: src/Tqdev/PhpCrudApi/Middleware/CorsMiddleware.php
73967381
namespace Tqdev\PhpCrudApi\Middleware {
73977382

73987383
use Psr\Http\Message\ResponseInterface;
@@ -7402,9 +7387,10 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
74027387
use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
74037388
use Tqdev\PhpCrudApi\Middleware\Router\Router;
74047389
use Tqdev\PhpCrudApi\Record\ErrorCode;
7390+
use Tqdev\PhpCrudApi\ResponseFactory;
74057391
use Tqdev\PhpCrudApi\ResponseUtils;
74067392

7407-
class CatchErrorsMiddleware extends Middleware
7393+
class CorsMiddleware extends Middleware
74087394
{
74097395
private $debug;
74107396

@@ -7414,45 +7400,6 @@ public function __construct(Router $router, Responder $responder, array $propert
74147400
$this->debug = $debug;
74157401
}
74167402

7417-
public function process(ServerRequestInterface $request, RequestHandlerInterface $next): ResponseInterface
7418-
{
7419-
$response = null;
7420-
try {
7421-
$response = $next->handle($request);
7422-
} catch (\Throwable $e) {
7423-
$response = $this->responder->error(ErrorCode::ERROR_NOT_FOUND, $e->getMessage());
7424-
if ($this->debug) {
7425-
$response = ResponseUtils::addExceptionHeaders($response, $e);
7426-
}
7427-
}
7428-
return $response;
7429-
}
7430-
7431-
/**
7432-
* High priority, should always be one of the very first middlewares to be loaded
7433-
* Only cors middleware should be loaded earlier
7434-
*
7435-
* @return int
7436-
*/
7437-
public function getPriority()
7438-
{
7439-
return 998;
7440-
}
7441-
}
7442-
}
7443-
7444-
// file: src/Tqdev/PhpCrudApi/Middleware/CorsMiddleware.php
7445-
namespace Tqdev\PhpCrudApi\Middleware {
7446-
7447-
use Psr\Http\Message\ResponseInterface;
7448-
use Psr\Http\Message\ServerRequestInterface;
7449-
use Psr\Http\Server\RequestHandlerInterface;
7450-
use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
7451-
use Tqdev\PhpCrudApi\Record\ErrorCode;
7452-
use Tqdev\PhpCrudApi\ResponseFactory;
7453-
7454-
class CorsMiddleware extends Middleware
7455-
{
74567403
private function isOriginAllowed(string $origin, string $allowedOrigins): bool
74577404
{
74587405
$found = false;
@@ -7497,7 +7444,15 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
74977444
$response = $response->withHeader('Access-Control-Expose-Headers', $exposeHeaders);
74987445
}
74997446
} else {
7500-
$response = $next->handle($request);
7447+
$response = null;
7448+
try {
7449+
$response = $next->handle($request);
7450+
} catch (\Throwable $e) {
7451+
$response = $this->responder->error(ErrorCode::ERROR_NOT_FOUND, $e->getMessage());
7452+
if ($this->debug) {
7453+
$response = ResponseUtils::addExceptionHeaders($response, $e);
7454+
}
7455+
}
75017456
}
75027457
if ($origin) {
75037458
$allowCredentials = $this->getProperty('allowCredentials', 'true');
@@ -7508,16 +7463,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
75087463
}
75097464
return $response;
75107465
}
7511-
7512-
/**
7513-
* load early in the routing stack. should be loaded before catc herrors middleware,
7514-
* otherwise cors headers will be missing
7515-
* @return int
7516-
*/
7517-
public function getPriority()
7518-
{
7519-
return 999;
7520-
}
75217466
}
75227467
}
75237468

@@ -10716,7 +10661,6 @@ private function setHabtmValues(ReflectedTable $t1, ReflectedTable $t2, array &$
1071610661
use Tqdev\PhpCrudApi\GeoJson\GeoJsonService;
1071710662
use Tqdev\PhpCrudApi\Middleware\AuthorizationMiddleware;
1071810663
use Tqdev\PhpCrudApi\Middleware\BasicAuthMiddleware;
10719-
use Tqdev\PhpCrudApi\Middleware\CatchErrorsMiddleware;
1072010664
use Tqdev\PhpCrudApi\Middleware\CorsMiddleware;
1072110665
use Tqdev\PhpCrudApi\Middleware\CustomizationMiddleware;
1072210666
use Tqdev\PhpCrudApi\Middleware\DbAuthMiddleware;
@@ -10760,14 +10704,13 @@ public function __construct(Config $config)
1076010704
$reflection = new ReflectionService($db, $cache, $config->getCacheTime());
1076110705
$responder = new JsonResponder();
1076210706
$router = new SimpleRouter($config->getBasePath(), $responder, $cache, $config->getCacheTime(), $config->getDebug());
10763-
new CatchErrorsMiddleware($router, $responder, [], $config->getDebug());
1076410707
foreach ($config->getMiddlewares() as $middleware => $properties) {
1076510708
switch ($middleware) {
1076610709
case 'sslRedirect':
1076710710
new SslRedirectMiddleware($router, $responder, $properties);
1076810711
break;
1076910712
case 'cors':
10770-
new CorsMiddleware($router, $responder, $properties);
10713+
new CorsMiddleware($router, $responder, $properties, $config->getDebug());
1077110714
break;
1077210715
case 'firewall':
1077310716
new FirewallMiddleware($router, $responder, $properties);
@@ -10814,9 +10757,6 @@ public function __construct(Config $config)
1081410757
case 'xml':
1081510758
new XmlMiddleware($router, $responder, $properties, $reflection);
1081610759
break;
10817-
case 'errors':
10818-
new CatchErrorsMiddleware($router, $responder, [], $config->getDebug());
10819-
break;
1082010760
}
1082110761
}
1082210762
foreach ($config->getControllers() as $controller) {

src/Tqdev/PhpCrudApi/Api.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use Tqdev\PhpCrudApi\GeoJson\GeoJsonService;
1919
use Tqdev\PhpCrudApi\Middleware\AuthorizationMiddleware;
2020
use Tqdev\PhpCrudApi\Middleware\BasicAuthMiddleware;
21-
use Tqdev\PhpCrudApi\Middleware\CatchErrorsMiddleware;
2221
use Tqdev\PhpCrudApi\Middleware\CorsMiddleware;
2322
use Tqdev\PhpCrudApi\Middleware\CustomizationMiddleware;
2423
use Tqdev\PhpCrudApi\Middleware\DbAuthMiddleware;
@@ -62,14 +61,13 @@ public function __construct(Config $config)
6261
$reflection = new ReflectionService($db, $cache, $config->getCacheTime());
6362
$responder = new JsonResponder();
6463
$router = new SimpleRouter($config->getBasePath(), $responder, $cache, $config->getCacheTime(), $config->getDebug());
65-
new CatchErrorsMiddleware($router, $responder, [], $config->getDebug());
6664
foreach ($config->getMiddlewares() as $middleware => $properties) {
6765
switch ($middleware) {
6866
case 'sslRedirect':
6967
new SslRedirectMiddleware($router, $responder, $properties);
7068
break;
7169
case 'cors':
72-
new CorsMiddleware($router, $responder, $properties);
70+
new CorsMiddleware($router, $responder, $properties, $config->getDebug());
7371
break;
7472
case 'firewall':
7573
new FirewallMiddleware($router, $responder, $properties);
@@ -116,9 +114,6 @@ public function __construct(Config $config)
116114
case 'xml':
117115
new XmlMiddleware($router, $responder, $properties, $reflection);
118116
break;
119-
case 'errors':
120-
new CatchErrorsMiddleware($router, $responder, $properties, $config->getDebug());
121-
break;
122117
}
123118
}
124119
foreach ($config->getControllers() as $controller) {

src/Tqdev/PhpCrudApi/Middleware/Base/Middleware.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,6 @@ public function __construct(Router $router, Responder $responder, array $propert
1919
$this->properties = $properties;
2020
}
2121

22-
/**
23-
* allows to load middlewares in a specific order
24-
* The higher the priority, the earlier the middleware will be called
25-
*
26-
* @return int
27-
*/
28-
public function getPriority() /* : int */
29-
{
30-
return 1;
31-
}
32-
3322
protected function getArrayProperty(string $key, string $default): array
3423
{
3524
return array_filter(array_map('trim', explode(',', $this->getProperty($key, $default))));

src/Tqdev/PhpCrudApi/Middleware/CatchErrorsMiddleware.php

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/Tqdev/PhpCrudApi/Middleware/CorsMiddleware.php

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,23 @@
55
use Psr\Http\Message\ResponseInterface;
66
use Psr\Http\Message\ServerRequestInterface;
77
use Psr\Http\Server\RequestHandlerInterface;
8+
use Tqdev\PhpCrudApi\Controller\Responder;
89
use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
10+
use Tqdev\PhpCrudApi\Middleware\Router\Router;
911
use Tqdev\PhpCrudApi\Record\ErrorCode;
1012
use Tqdev\PhpCrudApi\ResponseFactory;
13+
use Tqdev\PhpCrudApi\ResponseUtils;
1114

1215
class CorsMiddleware extends Middleware
1316
{
17+
private $debug;
18+
19+
public function __construct(Router $router, Responder $responder, array $properties, bool $debug)
20+
{
21+
parent::__construct($router, $responder, $properties);
22+
$this->debug = $debug;
23+
}
24+
1425
private function isOriginAllowed(string $origin, string $allowedOrigins): bool
1526
{
1627
$found = false;
@@ -55,7 +66,15 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
5566
$response = $response->withHeader('Access-Control-Expose-Headers', $exposeHeaders);
5667
}
5768
} else {
58-
$response = $next->handle($request);
69+
$response = null;
70+
try {
71+
$response = $next->handle($request);
72+
} catch (\Throwable $e) {
73+
$response = $this->responder->error(ErrorCode::ERROR_NOT_FOUND, $e->getMessage());
74+
if ($this->debug) {
75+
$response = ResponseUtils::addExceptionHeaders($response, $e);
76+
}
77+
}
5978
}
6079
if ($origin) {
6180
$allowCredentials = $this->getProperty('allowCredentials', 'true');
@@ -66,14 +85,4 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
6685
}
6786
return $response;
6887
}
69-
70-
/**
71-
* load early in the routing stack. should be loaded before catc herrors middleware,
72-
* otherwise cors headers will be missing
73-
* @return int
74-
*/
75-
public function getPriority()
76-
{
77-
return 999;
78-
}
7988
}

src/Tqdev/PhpCrudApi/Middleware/Router/SimpleRouter.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@ public function route(ServerRequestInterface $request): ResponseInterface
9696
$this->cache->set('PathTree', $data, $this->ttl);
9797
}
9898

99-
uasort($this->middlewares, function (Middleware $a, Middleware $b) {
100-
return $a->getPriority() > $b->getPriority() ? 1 : ($a->getPriority() === $b->getPriority() ? 0 : -1);
101-
});
102-
10399
return $this->handle($request);
104100
}
105101

0 commit comments

Comments
 (0)