actix-limitation

Rate limiter using a fixed window counter for arbitrary keys, backed by Redis for Actix Web.
Originally based on https://github.com/fnichol/limitation.

crates.io Documentation Apache 2.0 or MIT licensed Dependency Status

Examples

toml [dependencies] actix-web = "4" actix-limitation = "0.5"

```rust use actixlimitation::{Limiter, RateLimiter}; use actixsession::SessionExt as ; use actixweb::{dev::ServiceRequest, get, web, App, HttpServer, Responder}; use std::{sync::Arc, time::Duration};

[get("/{id}/{name}")]

async fn index(info: web::Path<(u32, String)>) -> impl Responder { format!("Hello {}! id:{}", info.1, info.0) }

[actix_web::main]

async fn main() -> std::io::Result<()> { let limiter = web::Data::new( Limiter::builder("redis://127.0.0.1") .keyby(|req: &ServiceRequest| { req.getsession() .get(&"session-id") .unwraporelse(|| req.cookie(&"rate-api-id").map(|c| c.tostring())) }) .limit(5000) .period(Duration::fromsecs(3600)) // 60 minutes .build() .unwrap(), ); HttpServer::new(move || { App::new() .wrap(RateLimiter::default()) .appdata(limiter.clone()) .service(index) }) .bind(("127.0.0.1", 8080))? .run() .await } ```