From 4088520d4cb519ecd6c0bbab7c6fa4d7b6ada6a7 Mon Sep 17 00:00:00 2001 From: Georgi Hristov Date: Mon, 1 Jun 2026 18:46:05 +0300 Subject: [PATCH] feat(compare): enable local compare targets by default in Development --- .../Configuration/DebugProbeOptionsTests.cs | 2 +- DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs | 6 ++++++ .../Internal/Compare/CompareUrlValidator.cs | 2 +- DebugProbe.AspNetCore/Options/DebugProbeOptions.cs | 5 +++-- DebugProbe.SampleApi/Program.cs | 1 - 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs b/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs index ff41b40..6ceefea 100644 --- a/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs +++ b/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs @@ -14,7 +14,7 @@ public void Defaults_work_correctly() Assert.Equal(20, options.MaxEntries); Assert.Equal(32, options.MaxBodyCaptureSizeKb); - Assert.False(options.AllowLocalCompareTargets); + Assert.Null(options.AllowLocalCompareTargets); Assert.Empty(options.IgnorePaths); } diff --git a/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs b/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs index 16aa774..06c6bb5 100644 --- a/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs +++ b/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs @@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Http; namespace DebugProbe.AspNetCore.Extensions; @@ -60,6 +61,11 @@ public static IServiceCollection AddDebugProbe(this IServiceCollection services, /// public static IApplicationBuilder UseDebugProbe(this IApplicationBuilder app) { + var options = app.ApplicationServices.GetRequiredService(); + var environment = app.ApplicationServices.GetRequiredService(); + + options.AllowLocalCompareTargets ??= environment.IsDevelopment(); + app.UseMiddleware(); app.ApplicationServices.GetRequiredService(); diff --git a/DebugProbe.AspNetCore/Internal/Compare/CompareUrlValidator.cs b/DebugProbe.AspNetCore/Internal/Compare/CompareUrlValidator.cs index d01b2c4..c091d74 100644 --- a/DebugProbe.AspNetCore/Internal/Compare/CompareUrlValidator.cs +++ b/DebugProbe.AspNetCore/Internal/Compare/CompareUrlValidator.cs @@ -34,7 +34,7 @@ internal static class CompareUrlValidator return (false, null, "Failed to resolve compare server host"); } - if (!options.AllowLocalCompareTargets) + if (options.AllowLocalCompareTargets != true) { if (IsLocalHostName(parsed.Host)) { diff --git a/DebugProbe.AspNetCore/Options/DebugProbeOptions.cs b/DebugProbe.AspNetCore/Options/DebugProbeOptions.cs index 7c32817..7d4e6e0 100644 --- a/DebugProbe.AspNetCore/Options/DebugProbeOptions.cs +++ b/DebugProbe.AspNetCore/Options/DebugProbeOptions.cs @@ -18,9 +18,10 @@ public class DebugProbeOptions internal int MaxBodyCaptureSizeBytes => MaxBodyCaptureSizeKb * 1024; /// - /// Allows compare requests to local or private network targets. + /// Allows compare operations to target localhost and private network addresses. + /// Defaults to true in Development and false in other environments unless explicitly configured. /// - public bool AllowLocalCompareTargets { get; set; } + public bool? AllowLocalCompareTargets { get; set; } /// /// Additional request paths to ignore. diff --git a/DebugProbe.SampleApi/Program.cs b/DebugProbe.SampleApi/Program.cs index c268c6b..f2fa17e 100644 --- a/DebugProbe.SampleApi/Program.cs +++ b/DebugProbe.SampleApi/Program.cs @@ -11,7 +11,6 @@ builder.Services.AddDebugProbe(options => { options.MaxEntries = 10; - options.AllowLocalCompareTargets = true; }); var app = builder.Build();