public bool FiltersMatched(List <IRateLimiterFilter> targetFilters, EnumFilterMatchMode matchMode = EnumFilterMatchMode.Any) { // check case when targetFilters are null or Rule Filters are null if (targetFilters == null) { return(Filters == null); } else if (Filters == null) { return(true); } int countMatchedFilters = 0; foreach (var targetFilter in targetFilters) { bool filterMatched = isMatched(targetFilter); if (filterMatched) { if (matchMode == EnumFilterMatchMode.Any) { return(true); } else if (matchMode == EnumFilterMatchMode.All) { countMatchedFilters++; } } } if (matchMode == EnumFilterMatchMode.All && countMatchedFilters == targetFilters.Count) { return(true); } return(false); }
public bool ValidateRule(int userId, int requestId, RateLimiterRule rule, List <IRateLimiterFilter> targetFilters, EnumFilterMatchMode filterMatchMode = EnumFilterMatchMode.Any) { if (rule == null) { return(true); } if (rule.FiltersMatched(targetFilters, filterMatchMode)) { return(rule.Strategy.IsAllowed(userId, requestId)); } return(false); }
public bool ValidateRuleList(int userId, int requestId, List <RateLimiterRule> rules, List <IRateLimiterFilter> targetFilters, EnumFilterMatchMode filterMatchMode = EnumFilterMatchMode.Any) { if (rules == null) { return(true); } foreach (var rule in rules) { return(ValidateRule(userId, requestId, rule, targetFilters, filterMatchMode)); } return(false); }