diff --git a/src/Core/AlfaBankConnector.php b/src/Core/AlfaBankConnector.php index 1efadb7..a5b31fe 100644 --- a/src/Core/AlfaBankConnector.php +++ b/src/Core/AlfaBankConnector.php @@ -114,10 +114,8 @@ class AlfaBankConnector extends Connector implements HasPagination // public function withLogging(\Psr\Log\LoggerInterface $logger): static { - $middleware = new \Apoloz\AlfaBank\Http\Middleware\LoggingMiddleware($logger); - - $this->middleware()->onRequest([$middleware, 'onRequest']); - $this->middleware()->onResponse([$middleware, 'onResponse']); + $this->middleware()->onRequest(new \Apoloz\AlfaBank\Http\Middleware\LoggingRequestMiddleware($logger)); + $this->middleware()->onResponse(new \Apoloz\AlfaBank\Http\Middleware\LoggingResponseMiddleware($logger)); return $this; } diff --git a/src/Http/Middleware/LoggingRequestMiddleware.php b/src/Http/Middleware/LoggingRequestMiddleware.php new file mode 100644 index 0000000..4652967 --- /dev/null +++ b/src/Http/Middleware/LoggingRequestMiddleware.php @@ -0,0 +1,46 @@ +logger->info("AlfaBank Request: {$request->getMethod()->value} {$request->getRequest()->resolveEndpoint()}", [ + 'headers' => $this->maskHeaders($request->headers()->all()), + 'body' => $this->maskBody($request->body()?->all()), + ]); + } + + protected function maskHeaders(array $headers): array + { + if (isset($headers['Authorization'])) { + $headers['Authorization'] = 'Bearer *****'; + } + return $headers; + } + + protected function maskBody(mixed $body): mixed + { + if (!is_array($body)) return $body; + + $sensitiveKeys = ['pan', 'cvc', 'digestSignatures', 'client_secret', 'refresh_token', 'access_token']; + + foreach ($body as $key => $value) { + if (in_array($key, $sensitiveKeys, true)) { + $body[$key] = '*****'; + } elseif (is_array($value)) { + $body[$key] = $this->maskBody($value); + } + } + return $body; + } +} diff --git a/src/Http/Middleware/LoggingResponseMiddleware.php b/src/Http/Middleware/LoggingResponseMiddleware.php new file mode 100644 index 0000000..4885359 --- /dev/null +++ b/src/Http/Middleware/LoggingResponseMiddleware.php @@ -0,0 +1,37 @@ +logger->info("AlfaBank Response: {$response->status()}", [ + 'body' => $this->maskBody($response->json()), + ]); + } + + protected function maskBody(mixed $body): mixed + { + if (!is_array($body)) return $body; + + $sensitiveKeys = ['pan', 'cvc', 'digestSignatures', 'client_secret', 'refresh_token', 'access_token']; + + foreach ($body as $key => $value) { + if (in_array($key, $sensitiveKeys, true)) { + $body[$key] = '*****'; + } elseif (is_array($value)) { + $body[$key] = $this->maskBody($value); + } + } + return $body; + } +}