|
|
|
@ -397,26 +397,13 @@ fn get_user_rate_limiter(
|
|
|
|
settings.rate_limit_time_window_seconds,
|
|
|
|
settings.rate_limit_time_window_seconds,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
(Some(max_req), Some(window_sec)) => {
|
|
|
|
(Some(max_req), Some(window_sec)) => {
|
|
|
|
let mut entry = state.user_rate_limiters.entry(user_id).or_insert_with(|| {
|
|
|
|
let mut entry = state
|
|
|
|
UserRateLimitEntry {
|
|
|
|
.user_rate_limiters
|
|
|
|
max_requests: max_req,
|
|
|
|
.entry(user_id)
|
|
|
|
window_seconds: window_sec,
|
|
|
|
.or_insert_with(|| UserRateLimitEntry::new(max_req, window_sec));
|
|
|
|
limiter: crate::services::rate_limiter::RateLimiter::new(
|
|
|
|
|
|
|
|
max_req as usize,
|
|
|
|
|
|
|
|
Duration::from_secs(window_sec as u64),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// Replace if user's settings changed since the limiter was created
|
|
|
|
// Replace if user's settings changed since the limiter was created
|
|
|
|
if entry.max_requests != max_req || entry.window_seconds != window_sec {
|
|
|
|
if entry.settings_changed(max_req, window_sec) {
|
|
|
|
*entry = UserRateLimitEntry {
|
|
|
|
*entry = UserRateLimitEntry::new(max_req, window_sec);
|
|
|
|
max_requests: max_req,
|
|
|
|
|
|
|
|
window_seconds: window_sec,
|
|
|
|
|
|
|
|
limiter: crate::services::rate_limiter::RateLimiter::new(
|
|
|
|
|
|
|
|
max_req as usize,
|
|
|
|
|
|
|
|
Duration::from_secs(window_sec as u64),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Some(entry.limiter.clone())
|
|
|
|
Some(entry.limiter.clone())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|