protected override void Handle()

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);
    }