ProxyUrlTransformer (#1361)

* ProxyUrlTransformer

* tests

* Update src/WireMock.Net.Shared/Settings/ProxyUrlReplaceSettings.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Stef Heyenrath
2025-09-28 12:40:33 +02:00
committed by GitHub
parent 371bfdc160
commit 19e95325fa
10 changed files with 195 additions and 77 deletions

View File

@@ -13,16 +13,10 @@ using WireMock.Util;
namespace WireMock.Proxy;
internal class ProxyHelper
internal class ProxyHelper(WireMockServerSettings settings)
{
private readonly WireMockServerSettings _settings;
private readonly ProxyMappingConverter _proxyMappingConverter;
public ProxyHelper(WireMockServerSettings settings)
{
_settings = Guard.NotNull(settings);
_proxyMappingConverter = new ProxyMappingConverter(settings, new GuidUtils(), new DateTimeUtils());
}
private readonly WireMockServerSettings _settings = Guard.NotNull(settings);
private readonly ProxyMappingConverter _proxyMappingConverter = new(settings, new GuidUtils(), new DateTimeUtils());
public async Task<(IResponseMessage Message, IMapping? Mapping)> SendAsync(
IMapping? mapping,
@@ -39,18 +33,7 @@ internal class ProxyHelper
var requiredUri = new Uri(url);
// Create HttpRequestMessage
var replaceSettings = proxyAndRecordSettings.ReplaceSettings;
string proxyUrl;
if (replaceSettings is not null)
{
var stringComparison = replaceSettings.IgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;
proxyUrl = url.Replace(replaceSettings.OldValue, replaceSettings.NewValue, stringComparison);
}
else
{
proxyUrl = url;
}
var proxyUrl = proxyAndRecordSettings.ReplaceSettings != null ? ProxyUrlTransformer.Transform(_settings, proxyAndRecordSettings.ReplaceSettings, url) : url;
var httpRequestMessage = HttpRequestMessageHelper.Create(requestMessage, proxyUrl);
// Call the URL

View File

@@ -0,0 +1,21 @@
// Copyright © WireMock.Net
using System;
using WireMock.Settings;
using WireMock.Transformers;
namespace WireMock.Proxy;
internal static class ProxyUrlTransformer
{
internal static string Transform(WireMockServerSettings settings, ProxyUrlReplaceSettings replaceSettings, string url)
{
if (!replaceSettings.UseTransformer)
{
return url.Replace(replaceSettings.OldValue, replaceSettings.NewValue, replaceSettings.IgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
}
var transformer = TransformerFactory.Create(replaceSettings.TransformerType, settings);
return transformer.Transform(replaceSettings.TransformTemplate, url);
}
}