in src/Testing/Emulator/Policies/IpFilterHandler.cs [26:66]
protected override void Handle(GatewayContext context, IpFilterConfig config)
{
if (!IPAddress.TryParse(context.Request.IpAddress, out var clientIp))
{
if ("allow".Equals(config.Action, StringComparison.InvariantCultureIgnoreCase))
{
DenyAccess(context, config);
}
OnIpAllowed.Find(tuple => tuple.Item1(context, config))?.Item2(context, config);
return;
}
var directMatch = (config.Addresses ?? [])
.Any(address => clientIp.CompareTo(IPAddress.Parse(address)) == 0);
var rangeMatch = (config.AddressRanges ?? [])
.Any(range => clientIp.CompareTo(IPAddress.Parse(range.From)) >= 0
&& clientIp.CompareTo(IPAddress.Parse(range.To)) <= 0);
var match = directMatch || rangeMatch;
if ("allow".Equals(config.Action, StringComparison.InvariantCultureIgnoreCase))
{
if (!match)
{
DenyAccess(context, config);
}
}
else if ("forbid".Equals(config.Action, StringComparison.InvariantCultureIgnoreCase))
{
if (match)
{
DenyAccess(context, config);
}
}
else
{
throw new NotSupportedException("Specified filter action is not supported.");
}
OnIpAllowed.Find(tuple => tuple.Item1(context, config))?.Item2(context, config);
}