Ejemplo n.º 1
0
 public RateLimiterRule(IRateLimiterStrategy strategy, IRateLimiterFilter filter)
 {
     Strategy = strategy;
     Filters  = new List <IRateLimiterFilter> {
         filter
     };
 }
Ejemplo n.º 2
0
        private bool isMatched(IRateLimiterFilter targetFilter)
        {
            foreach (var filter in Filters)
            {
                if (filter.Match(targetFilter))
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }