From 0534c5f77608973775cad6a293ca36f94a97afb5 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Thu, 7 Dec 2023 12:10:19 +0100 Subject: [PATCH] Log retrycount and properly log request headers (#15390) --- .../Services/WebhookLogFactory.cs | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Services/WebhookLogFactory.cs b/src/Umbraco.Core/Services/WebhookLogFactory.cs index ec88bb52c4..fe1238cb0f 100644 --- a/src/Umbraco.Core/Services/WebhookLogFactory.cs +++ b/src/Umbraco.Core/Services/WebhookLogFactory.cs @@ -1,6 +1,6 @@ using System.Net; +using System.Text; using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Core.Webhooks; namespace Umbraco.Cms.Core.Services; @@ -15,20 +15,38 @@ public class WebhookLogFactory : IWebhookLogFactory Key = Guid.NewGuid(), Url = webhook.Url, WebhookKey = webhook.Key, + RetryCount = responseModel.RetryCount, }; if (responseModel.HttpResponseMessage is not null) { - log.RequestBody = await responseModel.HttpResponseMessage!.RequestMessage!.Content!.ReadAsStringAsync(cancellationToken); + if (responseModel.HttpResponseMessage.RequestMessage?.Content is not null) + { + log.RequestBody = await responseModel.HttpResponseMessage.RequestMessage.Content.ReadAsStringAsync(cancellationToken); + log.RequestHeaders = CalculateHeaders(responseModel.HttpResponseMessage); + } + log.ResponseBody = await responseModel.HttpResponseMessage.Content.ReadAsStringAsync(cancellationToken); - log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode); - log.RetryCount = responseModel.RetryCount; log.ResponseHeaders = responseModel.HttpResponseMessage.Headers.ToString(); - log.RequestHeaders = responseModel.HttpResponseMessage.RequestMessage.Headers.ToString(); + log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode); } return log; } private string MapStatusCodeToMessage(HttpStatusCode statusCode) => $"{statusCode.ToString()} ({(int)statusCode})"; + + private string CalculateHeaders(HttpResponseMessage responseMessage) + { + IEnumerable>> headers = responseMessage.RequestMessage!.Headers.Concat(responseMessage.RequestMessage.Content!.Headers); + + var result = new StringBuilder(); + + foreach (KeyValuePair> header in headers) + { + result.AppendLine($"{header.Key}: {string.Join(", ", header.Value)}\n"); + } + + return result.ToString(); + } }