X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Futils%2Fsrc%2Frate_limit%2Fmod.rs;h=48911b5cf03feec7c7ac37f4e7170b5e9bed0d58;hb=235cc8b22897bfb3e71ba3dbd725d36863fea8ba;hp=79bdbb1d8fd5dc393a386f33f5744dc95ae361d6;hpb=276a8c2bd3e4fd1323e66b808675cf14cf6f75c5;p=lemmy.git diff --git a/crates/utils/src/rate_limit/mod.rs b/crates/utils/src/rate_limit/mod.rs index 79bdbb1d..48911b5c 100644 --- a/crates/utils/src/rate_limit/mod.rs +++ b/crates/utils/src/rate_limit/mod.rs @@ -1,10 +1,11 @@ -use crate::{settings::structs::RateLimitConfig, utils::get_ip, IpAddr}; +use crate::{utils::get_ip, IpAddr}; use actix_web::{ dev::{Service, ServiceRequest, ServiceResponse, Transform}, HttpResponse, }; use futures::future::{ok, Ready}; use rate_limiter::{RateLimitType, RateLimiter}; +use serde::{Deserialize, Serialize}; use std::{ future::Future, pin::Pin, @@ -12,9 +13,50 @@ use std::{ sync::{Arc, Mutex}, task::{Context, Poll}, }; +use typed_builder::TypedBuilder; pub mod rate_limiter; +#[derive(Debug, Deserialize, Serialize, Clone, TypedBuilder)] +pub struct RateLimitConfig { + #[builder(default = 180)] + /// Maximum number of messages created in interval + pub message: i32, + #[builder(default = 60)] + /// Interval length for message limit, in seconds + pub message_per_second: i32, + #[builder(default = 6)] + /// Maximum number of posts created in interval + pub post: i32, + #[builder(default = 300)] + /// Interval length for post limit, in seconds + pub post_per_second: i32, + #[builder(default = 3)] + /// Maximum number of registrations in interval + pub register: i32, + #[builder(default = 3600)] + /// Interval length for registration limit, in seconds + pub register_per_second: i32, + #[builder(default = 6)] + /// Maximum number of image uploads in interval + pub image: i32, + #[builder(default = 3600)] + /// Interval length for image uploads, in seconds + pub image_per_second: i32, + #[builder(default = 6)] + /// Maximum number of comments created in interval + pub comment: i32, + #[builder(default = 600)] + /// Interval length for comment limit, in seconds + pub comment_per_second: i32, + #[builder(default = 60)] + /// Maximum number of searches created in interval + pub search: i32, + #[builder(default = 600)] + /// Interval length for search limit, in seconds + pub search_per_second: i32, +} + #[derive(Debug, Clone)] pub struct RateLimit { // it might be reasonable to use a std::sync::Mutex here, since we don't need to lock this