public override bool IsWhitelisted(ClientRequestIdentity requestIdentity) { if (_options.IpWhitelist != null && IpParser.ContainsIp(_options.IpWhitelist, requestIdentity.ClientIp)) { return(true); } return(base.IsWhitelisted(requestIdentity)); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.WriteLine("delete:/api/values".IsMatch("*:/api/values")); Console.WriteLine("delete:/api/values".IsMatch("*:/api/?")); Console.WriteLine("delete:/api/values".IsMatch("*:/api/*")); Console.WriteLine(IpParser.ContainsIp("127.0.0.0/10", "127.0.0.1")); Console.WriteLine(IpParser.ContainsIp("127.0.0.1/10", "127.0.0.1")); Console.WriteLine(IpParser.ContainsIp("127.0.1.0/10", "127.0.0.1")); Console.WriteLine(IpParser.ContainsIp("::1/10", "::9")); Console.WriteLine(IpParser.ContainsIp("::1/10", "127.0.0.1")); Console.ReadLine(); }
public async Task <IEnumerable <RateLimitRule> > GetMatchingRulesAsync(ClientRequestIdentity identity, CancellationToken cancellationToken = default) { var policies = await _cacheManager.GetCache(nameof(IpRateLimitPolicies)) .GetOrDefaultAsync <string, IpRateLimitPolicies>($"{IpRateLimitOptions.IpPolicyPrefix}"); var rules = new List <RateLimitRule>(); if (policies?.IpRules?.Any() == true) { // search for rules with IP intervals containing client IP var matchPolicies = policies.IpRules.Where(r => IpParser.ContainsIp(r.Ip, identity.ClientIp)); foreach (var item in matchPolicies) { rules.AddRange(item.Rules); } } return(GetMatchingRules(identity, rules)); }