From e19067b75a0f1d5c4d72b540730216c49c549be7 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Wed, 21 Aug 2024 10:16:47 +0200 Subject: [PATCH] [Webhook] Pass original request to `RequestParserInterface` --- src/Symfony/Component/Webhook/CHANGELOG.md | 1 + .../Component/Webhook/Client/AbstractRequestParser.php | 10 ++++++++-- .../Webhook/Client/RequestParserInterface.php | 10 ++++++++-- .../Component/Webhook/Controller/WebhookController.php | 4 ++-- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/Webhook/CHANGELOG.md b/src/Symfony/Component/Webhook/CHANGELOG.md index 00964c8b8550e..eebbcc74926f8 100644 --- a/src/Symfony/Component/Webhook/CHANGELOG.md +++ b/src/Symfony/Component/Webhook/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Add `PayloadSerializerInterface` with implementations to decouple the remote event handling from the Serializer component + * Add optional `$request` argument to `RequestParserInterface::createSuccessfulResponse()` and `RequestParserInterface::createRejectedResponse()` 6.4 --- diff --git a/src/Symfony/Component/Webhook/Client/AbstractRequestParser.php b/src/Symfony/Component/Webhook/Client/AbstractRequestParser.php index cbfb26044c563..e8bf3f3e00317 100644 --- a/src/Symfony/Component/Webhook/Client/AbstractRequestParser.php +++ b/src/Symfony/Component/Webhook/Client/AbstractRequestParser.php @@ -29,12 +29,18 @@ public function parse(Request $request, #[\SensitiveParameter] string $secret): return $this->doParse($request, $secret); } - public function createSuccessfulResponse(): Response + /** + * @param Request|null $request The original request that was received by the webhook controller + */ + public function createSuccessfulResponse(/* ?Request $request = null */): Response { return new Response('', 202); } - public function createRejectedResponse(string $reason): Response + /** + * @param Request|null $request The original request that was received by the webhook controller + */ + public function createRejectedResponse(string $reason/* , ?Request $request = null */): Response { return new Response($reason, 406); } diff --git a/src/Symfony/Component/Webhook/Client/RequestParserInterface.php b/src/Symfony/Component/Webhook/Client/RequestParserInterface.php index 03427f7be25f4..cb84f82e595e5 100644 --- a/src/Symfony/Component/Webhook/Client/RequestParserInterface.php +++ b/src/Symfony/Component/Webhook/Client/RequestParserInterface.php @@ -30,7 +30,13 @@ interface RequestParserInterface */ public function parse(Request $request, #[\SensitiveParameter] string $secret): ?RemoteEvent; - public function createSuccessfulResponse(): Response; + /** + * @param Request|null $request The original request that was received by the webhook controller + */ + public function createSuccessfulResponse(/* ?Request $request = null */): Response; - public function createRejectedResponse(string $reason): Response; + /** + * @param Request|null $request The original request that was received by the webhook controller + */ + public function createRejectedResponse(string $reason/* , ?Request $request = null */): Response; } diff --git a/src/Symfony/Component/Webhook/Controller/WebhookController.php b/src/Symfony/Component/Webhook/Controller/WebhookController.php index 4091b4b467f88..f46fe2a5f10c8 100644 --- a/src/Symfony/Component/Webhook/Controller/WebhookController.php +++ b/src/Symfony/Component/Webhook/Controller/WebhookController.php @@ -42,11 +42,11 @@ public function handle(string $type, Request $request): Response $parser = $this->parsers[$type]['parser']; if (!$event = $parser->parse($request, $this->parsers[$type]['secret'])) { - return $parser->createRejectedResponse('Unable to parse the webhook payload.'); + return $parser->createRejectedResponse('Unable to parse the webhook payload.', $request); } $this->bus->dispatch(new ConsumeRemoteEventMessage($type, $event)); - return $parser->createSuccessfulResponse(); + return $parser->createSuccessfulResponse($request); } }