public RateLimiterRule(IRateLimiterStrategy strategy, IRateLimiterFilter filter) { Strategy = strategy; Filters = new List <IRateLimiterFilter> { filter }; }
private bool isMatched(IRateLimiterFilter targetFilter) { foreach (var filter in Filters) { if (filter.Match(targetFilter)) { return(true); } } return(false); }
public bool Match(IRateLimiterFilter targetFilter) { if (!(targetFilter is LocationBasedFilter)) { throw new ArgumentException("targetFilter should be type of LocationBasedFilter"); } var target = (LocationBasedFilter)targetFilter; return(CountryCode == target.CountryCode && PostalCode == target.PostalCode && City == target.City); }
public bool ValidateRule(int userId, int requestId, RateLimiterRule rule, IRateLimiterFilter targetFilter = null) { if (rule == null) { return(true); } List <IRateLimiterFilter> targetFilters = targetFilter != null ? new List <IRateLimiterFilter>() { targetFilter } : null; if (rule.FiltersMatched(targetFilters)) { return(rule.Strategy.IsAllowed(userId, requestId)); } return(false); }
public bool ValidatedRuleList(int userId, int requestId, List <RateLimiterRule> rules, IRateLimiterFilter targetFilter = null) { if (rules == null) { return(true); } List <IRateLimiterFilter> targetFilters = targetFilter != null ? new List <IRateLimiterFilter>() { targetFilter } : null; foreach (var rule in rules) { if (ValidateRule(userId, requestId, rule, targetFilters)) { return(true); } } return(false); }