headless_lms_server/domain/
rate_limit_middleware_builder.rs

1use std::{future::Ready, time::Duration};
2
3use actix_extensible_rate_limit::{
4    RateLimiter,
5    backend::{SimpleInput, SimpleInputFunctionBuilder, SimpleOutput, memory::InMemoryBackend},
6};
7use actix_web::dev::ServiceRequest;
8
9/// Helper function to create rate limitng middlewares.
10pub fn build_rate_limiting_middleware(
11    interval: Duration,
12    max_requests: u64,
13) -> RateLimiter<
14    InMemoryBackend,
15    SimpleOutput,
16    impl Fn(&ServiceRequest) -> Ready<Result<SimpleInput, actix_web::Error>>,
17> {
18    let rate_limiting_backend = InMemoryBackend::builder().build();
19
20    let input = SimpleInputFunctionBuilder::new(interval, max_requests)
21        // Client ip address, not the reverse proxy ip address
22        .real_ip_key()
23        .build();
24
25    RateLimiter::builder(rate_limiting_backend, input).build()
26}