mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-22 06:36:14 +00:00
* Lowering search rate limit. Fixes #2153 * Adding a search rate limit. * Forgot to add the websocket search rate limit * Fix wrong op
This commit is contained in:
parent
f6b543ae0f
commit
e16821116e
|
@ -36,6 +36,9 @@
|
||||||
comment: 6
|
comment: 6
|
||||||
# Interval length for comment limit, in seconds
|
# Interval length for comment limit, in seconds
|
||||||
comment_per_second: 600
|
comment_per_second: 600
|
||||||
|
search: 6
|
||||||
|
# Interval length for search limit, in seconds
|
||||||
|
search_per_second: 600
|
||||||
}
|
}
|
||||||
# Settings related to activitypub federation
|
# Settings related to activitypub federation
|
||||||
federation: {
|
federation: {
|
||||||
|
|
|
@ -57,6 +57,10 @@ impl RateLimit {
|
||||||
self.kind(RateLimitType::Comment)
|
self.kind(RateLimitType::Comment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn search(&self) -> RateLimited {
|
||||||
|
self.kind(RateLimitType::Search)
|
||||||
|
}
|
||||||
|
|
||||||
fn kind(&self, type_: RateLimitType) -> RateLimited {
|
fn kind(&self, type_: RateLimitType) -> RateLimited {
|
||||||
RateLimited {
|
RateLimited {
|
||||||
rate_limiter: self.rate_limiter.clone(),
|
rate_limiter: self.rate_limiter.clone(),
|
||||||
|
@ -79,6 +83,7 @@ impl RateLimited {
|
||||||
RateLimitType::Register => (rate_limit.register, rate_limit.register_per_second),
|
RateLimitType::Register => (rate_limit.register, rate_limit.register_per_second),
|
||||||
RateLimitType::Image => (rate_limit.image, rate_limit.image_per_second),
|
RateLimitType::Image => (rate_limit.image, rate_limit.image_per_second),
|
||||||
RateLimitType::Comment => (rate_limit.comment, rate_limit.comment_per_second),
|
RateLimitType::Comment => (rate_limit.comment, rate_limit.comment_per_second),
|
||||||
|
RateLimitType::Search => (rate_limit.search, rate_limit.search_per_second),
|
||||||
};
|
};
|
||||||
let mut limiter = self.rate_limiter.lock();
|
let mut limiter = self.rate_limiter.lock();
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ pub(crate) enum RateLimitType {
|
||||||
Post,
|
Post,
|
||||||
Image,
|
Image,
|
||||||
Comment,
|
Comment,
|
||||||
|
Search,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Rate limiting based on rate type and IP addr
|
/// Rate limiting based on rate type and IP addr
|
||||||
|
|
|
@ -170,6 +170,11 @@ pub struct RateLimitConfig {
|
||||||
/// Interval length for comment limit, in seconds
|
/// Interval length for comment limit, in seconds
|
||||||
#[default(600)]
|
#[default(600)]
|
||||||
pub comment_per_second: i32,
|
pub comment_per_second: i32,
|
||||||
|
#[default(6)]
|
||||||
|
pub search: i32,
|
||||||
|
/// Interval length for search limit, in seconds
|
||||||
|
#[default(600)]
|
||||||
|
pub search_per_second: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
|
#[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
|
||||||
|
|
|
@ -493,6 +493,7 @@ impl ChatServer {
|
||||||
let user_operation = UserOperation::from_str(op)?;
|
let user_operation = UserOperation::from_str(op)?;
|
||||||
let passed = match user_operation {
|
let passed = match user_operation {
|
||||||
UserOperation::GetCaptcha => rate_limiter.post().check(ip),
|
UserOperation::GetCaptcha => rate_limiter.post().check(ip),
|
||||||
|
UserOperation::Search => rate_limiter.search().check(ip),
|
||||||
_ => true,
|
_ => true,
|
||||||
};
|
};
|
||||||
let fut = (message_handler)(context, msg.id, user_operation, data);
|
let fut = (message_handler)(context, msg.id, user_operation, data);
|
||||||
|
|
|
@ -29,7 +29,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
|
||||||
)
|
)
|
||||||
.service(
|
.service(
|
||||||
web::resource("/search")
|
web::resource("/search")
|
||||||
.wrap(rate_limit.message())
|
.wrap(rate_limit.search())
|
||||||
.route(web::get().to(route_get::<Search>)),
|
.route(web::get().to(route_get::<Search>)),
|
||||||
)
|
)
|
||||||
.service(
|
.service(
|
||||||
|
|
Loading…
Reference in a new issue