]> Untitled Git - lemmy.git/commitdiff
Lowering search rate limit. Fixes #2153 (#2154)
authorDessalines <dessalines@users.noreply.github.com>
Tue, 29 Mar 2022 15:46:03 +0000 (15:46 +0000)
committerGitHub <noreply@github.com>
Tue, 29 Mar 2022 15:46:03 +0000 (15:46 +0000)
* Lowering search rate limit. Fixes #2153

* Adding a search rate limit.

* Forgot to add the websocket search rate limit

* Fix wrong op

config/defaults.hjson
crates/utils/src/rate_limit/mod.rs
crates/utils/src/rate_limit/rate_limiter.rs
crates/utils/src/settings/structs.rs
crates/websocket/src/chat_server.rs
src/api_routes.rs

index 3458467d2eeca175aeb3e8ee3f3c81acdc9fa33e..18a4b2190b7fb5f5dfaebba63a5eb8dd59123c7b 100644 (file)
@@ -36,6 +36,9 @@
     comment: 6
     # Interval length for comment limit, in seconds
     comment_per_second: 600
+    search: 6
+    # Interval length for search limit, in seconds
+    search_per_second: 600
   }
   # Settings related to activitypub federation
   federation: {
index 69bcbcecdacd7371430431d7fb97fe1fbcac0478..f8acc3aff76d985e39c5c94c4d4e1894a22942ac 100644 (file)
@@ -57,6 +57,10 @@ impl RateLimit {
     self.kind(RateLimitType::Comment)
   }
 
+  pub fn search(&self) -> RateLimited {
+    self.kind(RateLimitType::Search)
+  }
+
   fn kind(&self, type_: RateLimitType) -> RateLimited {
     RateLimited {
       rate_limiter: self.rate_limiter.clone(),
@@ -79,6 +83,7 @@ impl RateLimited {
       RateLimitType::Register => (rate_limit.register, rate_limit.register_per_second),
       RateLimitType::Image => (rate_limit.image, rate_limit.image_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();
 
index 31d91036ece4c904e8ba959284eaff8204c99458..258d7704a7cdb1b42c6db9a6546fe5ed2ed2eefc 100644 (file)
@@ -16,6 +16,7 @@ pub(crate) enum RateLimitType {
   Post,
   Image,
   Comment,
+  Search,
 }
 
 /// Rate limiting based on rate type and IP addr
index ccda734d4800941bd4e6b9c1c87c40252780706b..fe4c1509df322357b03af29847b4451fb8174a68 100644 (file)
@@ -170,6 +170,11 @@ pub struct RateLimitConfig {
   /// Interval length for comment limit, in seconds
   #[default(600)]
   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)]
index 4dafafd8e3cf93a1f8f6565a8604f7964ea6f7fb..4328d2d39635472eded929c8ffc75cdd7dbe61ae 100644 (file)
@@ -493,6 +493,7 @@ impl ChatServer {
         let user_operation = UserOperation::from_str(op)?;
         let passed = match user_operation {
           UserOperation::GetCaptcha => rate_limiter.post().check(ip),
+          UserOperation::Search => rate_limiter.search().check(ip),
           _ => true,
         };
         let fut = (message_handler)(context, msg.id, user_operation, data);
index 1af9f028f19766d01d170e9b173f3c8d35e02a0f..7a3feb5cb6d424e4bb157127a3f51cbe158263fd 100644 (file)
@@ -29,7 +29,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
       )
       .service(
         web::resource("/search")
-          .wrap(rate_limit.message())
+          .wrap(rate_limit.search())
           .route(web::get().to(route_get::<Search>)),
       )
       .service(