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 } }
public Controller(IRateLimiterManager rate_limiter_service) { _rate_limiter_service = rate_limiter_service; }
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)); }