public async Task <IEnumerable <RateLimitRule> > GetMatchingRulesAsync(ClientRequestIdentity identity, CancellationToken cancellationToken = default) { var policies = await _policyStore.GetAsync($"{_options.IpPolicyPrefix}", cancellationToken); 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)); }
public async Task <IEnumerable <RateLimitRule> > GetMatchingRulesAsync(ClientRequestIdentity identity, CancellationToken cancellationToken = default) { var policy = await _policyStore.GetAsync($"{_options.ClientPolicyPrefix}_{identity.ClientId}", cancellationToken); return(GetMatchingRules(identity, policy?.Rules)); }