From ae88cd0cc18df49e6e9475d8eee3e9b2523d3e66 Mon Sep 17 00:00:00 2001 From: James Gunn Date: Tue, 7 Nov 2023 15:33:23 +0000 Subject: [PATCH] Ensure the deadLetterErrorDescription is within the allowed size --- .../ServiceBusWebHookNotificationPublisher.cs | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/dotnet-authserver/src/TeacherIdentity.AuthServer/Notifications/WebHooks/ServiceBusWebHookNotificationPublisher.cs b/dotnet-authserver/src/TeacherIdentity.AuthServer/Notifications/WebHooks/ServiceBusWebHookNotificationPublisher.cs index 3b8051291..e5862898b 100644 --- a/dotnet-authserver/src/TeacherIdentity.AuthServer/Notifications/WebHooks/ServiceBusWebHookNotificationPublisher.cs +++ b/dotnet-authserver/src/TeacherIdentity.AuthServer/Notifications/WebHooks/ServiceBusWebHookNotificationPublisher.cs @@ -10,6 +10,8 @@ namespace TeacherIdentity.AuthServer.Notifications.WebHooks; public sealed class ServiceBusWebHookNotificationPublisher : WebHookNotificationPublisher, IAsyncDisposable, IHostedService { + private const int MaxDeadLetterDescriptionLength = 4096; + private static readonly TimeSpan[] _retryIntervals = new[] { TimeSpan.FromSeconds(30), @@ -110,7 +112,10 @@ private async Task ProcessMessage(ProcessMessageEventArgs arg) { _logger.LogError(ex, "Failed processing message after {RetryNumber} retries.", retryNumber); - await arg.DeadLetterMessageAsync(message, deadLetterReason: "Could not deliver web hook", deadLetterErrorDescription: ex.ToString()); + await arg.DeadLetterMessageAsync( + message, + deadLetterReason: "Could not deliver web hook", + deadLetterErrorDescription: ex.ToString().Truncate(MaxDeadLetterDescriptionLength)); return; } @@ -155,3 +160,20 @@ private class ApplicationPropertiesKeys public const string RetryNumber = "RetryNumber"; } } + +file static class StringExtensions +{ + private const string TruncatedSuffix = "..."; + + public static string Truncate(this string str, int length) + { + if (length <= TruncatedSuffix.Length) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + + return str.Length > length ? + str[..(length - TruncatedSuffix.Length + 1)] + TruncatedSuffix : + str; + } +}