mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-06-04 14:10:43 +02:00
36b0a93a6c
* SystemTextJsonMatcher * , * . * new projectx * Update test/WireMock.Net.Tests/Pact/PactTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/WireMock.Net/WireMock.Net.csproj Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/WireMock.Net.Minimal/Properties/AssemblyInfo.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * . * more tests * . * . * x * ... * . * fix tests * 0.11.0 * . * delete jsonutils.cs * s * fix findings * Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> * Potential fix for pull request finding 'Missing Dispose call on local IDisposable' Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> * JsonConverter 0.12.0 * -- tools --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
85 lines
3.4 KiB
C#
85 lines
3.4 KiB
C#
// Copyright © WireMock.Net
|
|
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using Stef.Validation;
|
|
using WireMock.Http;
|
|
using WireMock.Matchers;
|
|
using WireMock.Serialization;
|
|
using WireMock.Settings;
|
|
using WireMock.Util;
|
|
|
|
namespace WireMock.Proxy;
|
|
|
|
internal class ProxyHelper(WireMockServerSettings settings)
|
|
{
|
|
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,
|
|
ProxyAndRecordSettings proxyAndRecordSettings,
|
|
HttpClient client,
|
|
IRequestMessage requestMessage,
|
|
string url)
|
|
{
|
|
Guard.NotNull(client);
|
|
Guard.NotNull(requestMessage);
|
|
Guard.NotNull(url);
|
|
|
|
var originalUri = new Uri(requestMessage.Url);
|
|
var requiredUri = new Uri(url);
|
|
|
|
// Create HttpRequestMessage
|
|
var proxyUrl = proxyAndRecordSettings.ReplaceSettings != null ? ProxyUrlTransformer.Transform(_settings, proxyAndRecordSettings.ReplaceSettings, url) : url;
|
|
var httpRequestMessage = HttpRequestMessageHelper.Create(requestMessage, proxyUrl);
|
|
|
|
// Call the URL
|
|
var httpResponseMessage = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
|
|
|
|
// Create ResponseMessage
|
|
bool deserializeJson = !_settings.DisableJsonBodyParsing.GetValueOrDefault(false);
|
|
bool decompressGzipAndDeflate = !_settings.DisableRequestBodyDecompressing.GetValueOrDefault(false);
|
|
bool deserializeFormUrlEncoded = !_settings.DisableDeserializeFormUrlEncoded.GetValueOrDefault(false);
|
|
|
|
var responseMessage = await HttpResponseMessageHelper.CreateAsync(
|
|
httpResponseMessage,
|
|
requiredUri,
|
|
originalUri,
|
|
deserializeJson,
|
|
decompressGzipAndDeflate,
|
|
deserializeFormUrlEncoded,
|
|
_settings.DefaultJsonSerializer
|
|
).ConfigureAwait(false);
|
|
|
|
IMapping? newMapping = null;
|
|
|
|
var saveMappingSettings = proxyAndRecordSettings.SaveMappingSettings;
|
|
|
|
bool save = true;
|
|
if (saveMappingSettings != null)
|
|
{
|
|
save &= Check(saveMappingSettings.StatusCodePattern,
|
|
() => saveMappingSettings.StatusCodePattern != null && HttpStatusRangeParser.IsMatch(saveMappingSettings.StatusCodePattern, responseMessage.StatusCode)
|
|
);
|
|
|
|
save &= Check(saveMappingSettings.HttpMethods,
|
|
() => saveMappingSettings.HttpMethods != null && saveMappingSettings.HttpMethods.Value.Contains(requestMessage.Method, StringComparer.OrdinalIgnoreCase)
|
|
);
|
|
}
|
|
|
|
if (save && (proxyAndRecordSettings.SaveMapping || proxyAndRecordSettings.SaveMappingToFile))
|
|
{
|
|
newMapping = _proxyMappingConverter.ToMapping(mapping, proxyAndRecordSettings, requestMessage, responseMessage);
|
|
}
|
|
|
|
return (responseMessage, newMapping);
|
|
}
|
|
|
|
private static bool Check<T>(ProxySaveMappingSetting<T>? saveMappingSetting, Func<bool> action) where T : notnull
|
|
{
|
|
var isMatch = saveMappingSetting is null || action();
|
|
var matchBehaviour = saveMappingSetting?.MatchBehaviour ?? MatchBehaviour.AcceptOnMatch;
|
|
return isMatch == (matchBehaviour == MatchBehaviour.AcceptOnMatch);
|
|
}
|
|
} |