Пример #1
0
        public bool Validate(IClientRequest request, IRateLimiterManager rate_limiter)
        {
            try
            {
                if (RulesSettings.MaxRequestsLimit == -1)
                {
                    return(true); // settings are not initiated == no limit.
                }
                if (rate_limiter.RequestsLog.Count(l => l.Token.Equals(request.Token) &&
                                                   l.CallDateTimeStamp >= DateTime.Now - RulesSettings.TimeSpanLimit) > RulesSettings.MaxRequestsLimit)
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
                // Log/Manage exception
            }
        }
        // per specification: allow request only if a certain timespan passed since the last call per user (token)
        public bool Validate(IClientRequest request, IRateLimiterManager rate_limiter)
        {
            try
            {
                if (RulesSettings.TimeSpanLimit.Equals(new TimeSpan(0, 0, 0, 0, 0))) // setting is not enabled
                {
                    return(true);
                }

                DateTime lastcall = rate_limiter.RequestsLog.Where(l => l.Token.Equals(request.Token)).Max(l => l.CallDateTimeStamp);
                if (lastcall != null &&
                    lastcall > DateTime.Now - RulesSettings.TimeSpanLimit)
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
                // Log/Manage exception
            }
        }
Пример #3
0
 public Controller(IRateLimiterManager rate_limiter_service)
 {
     _rate_limiter_service = rate_limiter_service;
 }
Пример #4
0
 public bool Validate(IClientRequest request, IRateLimiterManager rate_limiter)
 {
     return(request.GeoLocation == GeoLocation.US ?
            new RequestsPerTimespanLimit().Validate(request, rate_limiter) :
            new TimespanSinceLastCallLimit().Validate(request, rate_limiter));
 }