diff --git a/app/setup/settings/urls.php b/app/setup/settings/urls.php index 31a8912..b634238 100644 --- a/app/setup/settings/urls.php +++ b/app/setup/settings/urls.php @@ -1,8 +1,10 @@ function() { + 'urls' => function(ContainerInterface $container) { $urls = [ - 'base' => $_ENV['APP_URL'] ?? '', + 'base' => $container->get('APP_URL') ?? '', ]; $urls['api'] = implode('/', [ $urls['base'], @@ -18,21 +20,35 @@ return [ ]); return (object) $urls; }, - 'permittedPaths' => [ - '/api', - '/api/', - ], - 'simplePaths' => [ - '/api/login', - '/api/login/', - '/api/logout' - ], - 'externalPaths' => [ - '/api/external' => [ - '/toku/success' => [ - 'validator' => Incoviba\Service\Venta\MediosPago\Toku::class, - 'token' => $_ENV['TOKU_TOKEN'] + 'apiUrls' => function(ContainerInterface $container) { + $permittedPaths = [ + '/api' + ]; + $simplePaths = [ + '/api/login', + '/api/logout' + ]; + function addTrailingSlash(array &$paths): array { + foreach ($paths as $path) { + if (!in_array(rtrim($path, '/') . '/', $paths)) { + $paths[] = rtrim($path, '/') . '/'; + } + } + return $paths; + } + addTrailingSlash($permittedPaths); + addTrailingSlash($simplePaths); + return [ + 'permittedPaths' => $permittedPaths, + 'simplePaths' => $simplePaths, + 'externalPaths' => [ + '/api/external' => [ + '/toku/success' => [ + 'validator' => Incoviba\Service\Venta\MediosPago\Toku::class, + 'token' => $container->get('TOKU_TOKEN') + ] + ], ] - ], - ] + ]; + } ]; diff --git a/app/setup/setups/middlewares.php b/app/setup/setups/middlewares.php index ea16f68..68466a6 100644 --- a/app/setup/setups/middlewares.php +++ b/app/setup/setups/middlewares.php @@ -18,9 +18,7 @@ return [ $container->get(Incoviba\Service\API::class), $container->get(Incoviba\Service\Login::class), $container->get('API_KEY'), - $container->get('permittedPaths'), - $container->get('simplePaths'), - $container->get('externalPaths'), + $container->get('apiUrls'), ); }, Incoviba\Middleware\NotFound::class => function(ContainerInterface $container) { diff --git a/app/src/Controller/API/Ventas/MediosPago/Toku.php b/app/src/Controller/API/Ventas/MediosPago/Toku.php index 5b7f2de..82c14f9 100644 --- a/app/src/Controller/API/Ventas/MediosPago/Toku.php +++ b/app/src/Controller/API/Ventas/MediosPago/Toku.php @@ -2,6 +2,7 @@ namespace Incoviba\Controller\API\Ventas\MediosPago; use Exception; +use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -105,9 +106,9 @@ class Toku extends Controller return $this->withJson($response, $output); } public function reset(ServerRequestInterface $request, ResponseInterface $response, - Service\Venta\MediosPago\Toku $tokuService): ResponseInterface + Service\Venta\MediosPago\Toku $tokuService, ContainerInterface $container): ResponseInterface { - if (!isset($_ENV['TOKU_ENV']) or strtolower($_ENV['TOKU_ENV']) !== 'sandbox') { + if (!$container->has('TOKU_ENV') or strtolower($container->get('TOKU_ENV')) !== 'sandbox') { return $this->withJson($response); } $input = $request->getParsedBody(); diff --git a/app/src/Middleware/API.php b/app/src/Middleware/API.php index 5babcd5..8ea8ea4 100644 --- a/app/src/Middleware/API.php +++ b/app/src/Middleware/API.php @@ -16,9 +16,16 @@ class API protected Service\API $apiService, protected Service\Login $loginService, protected string $key, - protected array $permittedPaths, - protected array $simplePaths, - protected array $externalPaths) {} + array $apiUrls) + { + $this->permittedPaths = $apiUrls['permittedPaths']; + $this->simplePaths = $apiUrls['simplePaths']; + $this->externalPaths = $apiUrls['externalPaths']; + } + + protected array $permittedPaths; + protected array $simplePaths; + protected array $externalPaths; public function __invoke(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { @@ -27,7 +34,10 @@ class API } try { $key = $this->apiService->getKey($request); - } catch (MissingAuthorizationHeader) { + } catch (MissingAuthorizationHeader $exception) { + $this->logger->warning($exception, [ + 'headers' => $request->getHeaders() + ]); return $this->responseFactory->createResponse(401); } if ($this->validateSimpleKey($request, $key)) {