processWebhookTest($request, $client, $pathsHelper); } catch (PrivateAddressException) { return $this->createErrorResponse( 'mautic.webhook.error.private_address' ); } catch (\Exception) { return $this->createErrorResponse( 'mautic.webhook.label.warning' ); } } private function processWebhookTest(Request $request, Client $client, PathsHelper $pathsHelper): JsonResponse { $url = $this->validateUrl($request); if (!$url) { return $this->createErrorResponse('mautic.webhook.label.no.url'); } $selectedTypes = InputHelper::cleanArray($request->request->all()['types']) ?? []; $payloadPaths = $this->getPayloadPaths($selectedTypes, $pathsHelper); $payload = $this->loadPayloads($payloadPaths); $payload['timestamp'] = (new \DateTimeImmutable())->format('c'); $secret = InputHelper::string($request->request->get('secret')); $response = $client->post($url, $payload, $secret); return $this->createResponseFromStatusCode($response->getStatusCode()); } private function validateUrl(Request $request): ?string { $url = InputHelper::url($request->request->get('url')); return '' !== $url ? $url : null; } private function createResponseFromStatusCode(int $statusCode): JsonResponse { $isSuccess = str_starts_with((string) $statusCode, '2'); $message = $isSuccess ? 'mautic.webhook.label.success' : 'mautic.webhook.label.warning'; $cssClass = $isSuccess ? 'has-success' : 'has-error'; return $this->createJsonResponse($message, $cssClass); } private function createErrorResponse(string $message): JsonResponse { return $this->createJsonResponse($message, 'has-error', Response::HTTP_BAD_REQUEST); } private function createJsonResponse( string $message, string $cssClass, int $status = Response::HTTP_OK, ): JsonResponse { $html = sprintf( '