|
@@ -6893,17 +6893,6 @@ namespace Tqdev\PhpCrudApi\Middleware\Base {
|
6893
|
6893
|
$this->properties = $properties;
|
6894
|
6894
|
}
|
6895
|
6895
|
|
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
|
|
-
|
6907
|
6896
|
protected function getArrayProperty(string $key, string $default): array
|
6908
|
6897
|
{
|
6909
|
6898
|
return array_filter(array_map('trim', explode(',', $this->getProperty($key, $default))));
|
|
@@ -7068,10 +7057,6 @@ namespace Tqdev\PhpCrudApi\Middleware\Router {
|
7068
|
7057
|
$this->cache->set('PathTree', $data, $this->ttl);
|
7069
|
7058
|
}
|
7070
|
7059
|
|
7071
|
|
- uasort($this->middlewares, function (Middleware $a, Middleware $b) {
|
7072
|
|
- return $a->getPriority() > $b->getPriority() ? 1 : ($a->getPriority() === $b->getPriority() ? 0 : -1);
|
7073
|
|
- });
|
7074
|
|
-
|
7075
|
7060
|
return $this->handle($request);
|
7076
|
7061
|
}
|
7077
|
7062
|
|
|
@@ -7392,7 +7377,7 @@ namespace Tqdev\PhpCrudApi\Middleware {
|
7392
|
7377
|
}
|
7393
|
7378
|
}
|
7394
|
7379
|
|
7395
|
|
-// file: src/Tqdev/PhpCrudApi/Middleware/CatchErrorsMiddleware.php
|
|
7380
|
+// file: src/Tqdev/PhpCrudApi/Middleware/CorsMiddleware.php
|
7396
|
7381
|
namespace Tqdev\PhpCrudApi\Middleware {
|
7397
|
7382
|
|
7398
|
7383
|
use Psr\Http\Message\ResponseInterface;
|
|
@@ -7402,9 +7387,10 @@ namespace Tqdev\PhpCrudApi\Middleware {
|
7402
|
7387
|
use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
|
7403
|
7388
|
use Tqdev\PhpCrudApi\Middleware\Router\Router;
|
7404
|
7389
|
use Tqdev\PhpCrudApi\Record\ErrorCode;
|
|
7390
|
+ use Tqdev\PhpCrudApi\ResponseFactory;
|
7405
|
7391
|
use Tqdev\PhpCrudApi\ResponseUtils;
|
7406
|
7392
|
|
7407
|
|
- class CatchErrorsMiddleware extends Middleware
|
|
7393
|
+ class CorsMiddleware extends Middleware
|
7408
|
7394
|
{
|
7409
|
7395
|
private $debug;
|
7410
|
7396
|
|
|
@@ -7414,45 +7400,6 @@ namespace Tqdev\PhpCrudApi\Middleware {
|
7414
|
7400
|
$this->debug = $debug;
|
7415
|
7401
|
}
|
7416
|
7402
|
|
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
|
|
- {
|
7456
|
7403
|
private function isOriginAllowed(string $origin, string $allowedOrigins): bool
|
7457
|
7404
|
{
|
7458
|
7405
|
$found = false;
|
|
@@ -7497,7 +7444,15 @@ namespace Tqdev\PhpCrudApi\Middleware {
|
7497
|
7444
|
$response = $response->withHeader('Access-Control-Expose-Headers', $exposeHeaders);
|
7498
|
7445
|
}
|
7499
|
7446
|
} 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
|
+ }
|
7501
|
7456
|
}
|
7502
|
7457
|
if ($origin) {
|
7503
|
7458
|
$allowCredentials = $this->getProperty('allowCredentials', 'true');
|
|
@@ -7508,16 +7463,6 @@ namespace Tqdev\PhpCrudApi\Middleware {
|
7508
|
7463
|
}
|
7509
|
7464
|
return $response;
|
7510
|
7465
|
}
|
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
|
|
- }
|
7521
|
7466
|
}
|
7522
|
7467
|
}
|
7523
|
7468
|
|
|
@@ -10716,7 +10661,6 @@ namespace Tqdev\PhpCrudApi {
|
10716
|
10661
|
use Tqdev\PhpCrudApi\GeoJson\GeoJsonService;
|
10717
|
10662
|
use Tqdev\PhpCrudApi\Middleware\AuthorizationMiddleware;
|
10718
|
10663
|
use Tqdev\PhpCrudApi\Middleware\BasicAuthMiddleware;
|
10719
|
|
- use Tqdev\PhpCrudApi\Middleware\CatchErrorsMiddleware;
|
10720
|
10664
|
use Tqdev\PhpCrudApi\Middleware\CorsMiddleware;
|
10721
|
10665
|
use Tqdev\PhpCrudApi\Middleware\CustomizationMiddleware;
|
10722
|
10666
|
use Tqdev\PhpCrudApi\Middleware\DbAuthMiddleware;
|
|
@@ -10760,14 +10704,13 @@ namespace Tqdev\PhpCrudApi {
|
10760
|
10704
|
$reflection = new ReflectionService($db, $cache, $config->getCacheTime());
|
10761
|
10705
|
$responder = new JsonResponder();
|
10762
|
10706
|
$router = new SimpleRouter($config->getBasePath(), $responder, $cache, $config->getCacheTime(), $config->getDebug());
|
10763
|
|
- new CatchErrorsMiddleware($router, $responder, [], $config->getDebug());
|
10764
|
10707
|
foreach ($config->getMiddlewares() as $middleware => $properties) {
|
10765
|
10708
|
switch ($middleware) {
|
10766
|
10709
|
case 'sslRedirect':
|
10767
|
10710
|
new SslRedirectMiddleware($router, $responder, $properties);
|
10768
|
10711
|
break;
|
10769
|
10712
|
case 'cors':
|
10770
|
|
- new CorsMiddleware($router, $responder, $properties);
|
|
10713
|
+ new CorsMiddleware($router, $responder, $properties, $config->getDebug());
|
10771
|
10714
|
break;
|
10772
|
10715
|
case 'firewall':
|
10773
|
10716
|
new FirewallMiddleware($router, $responder, $properties);
|
|
@@ -10814,9 +10757,6 @@ namespace Tqdev\PhpCrudApi {
|
10814
|
10757
|
case 'xml':
|
10815
|
10758
|
new XmlMiddleware($router, $responder, $properties, $reflection);
|
10816
|
10759
|
break;
|
10817
|
|
- case 'errors':
|
10818
|
|
- new CatchErrorsMiddleware($router, $responder, [], $config->getDebug());
|
10819
|
|
- break;
|
10820
|
10760
|
}
|
10821
|
10761
|
}
|
10822
|
10762
|
foreach ($config->getControllers() as $controller) {
|