]> Untitled Git - lemmy.git/commitdiff
Adding check for requests with no id or name, adding max limit. (#2265)
authorDessalines <dessalines@users.noreply.github.com>
Fri, 8 Jul 2022 10:21:33 +0000 (06:21 -0400)
committerGitHub <noreply@github.com>
Fri, 8 Jul 2022 10:21:33 +0000 (10:21 +0000)
* Adding check for requests with no id or name, adding max limit.

* Consolidating a few functions.

* Fix page min

* Adding more websocket rate limits.

* Add check to GetCommunity

* Use a default message rate limit check.

* Adding a page and limit checker

* Fix clippy

* Fix clippy again

* Adding check for requests with no id or name, adding max limit.

* Consolidating a few functions.

* Fix page min

* Adding more websocket rate limits.

* Add check to GetCommunity

* Use a default message rate limit check.

* Adding a page and limit checker

* Fix clippy

* Fix clippy again

* Fix limit request.

* Move checks to inside limit_and_offset

* Fixing API tests.

* Change NotFound diesel errors to QueryBuilderError

36 files changed:
api_tests/src/shared.ts
api_tests/src/user.spec.ts
crates/api/src/local_user/notifications/mark_all_read.rs
crates/api_common/src/utils.rs
crates/api_crud/src/comment/list.rs
crates/api_crud/src/community/read.rs
crates/api_crud/src/post/list.rs
crates/api_crud/src/post/read.rs
crates/api_crud/src/user/read.rs
crates/db_schema/src/impls/post.rs
crates/db_schema/src/utils.rs
crates/db_views/src/comment_report_view.rs
crates/db_views/src/comment_view.rs
crates/db_views/src/post_report_view.rs
crates/db_views/src/post_view.rs
crates/db_views/src/private_message_view.rs
crates/db_views/src/registration_application_view.rs
crates/db_views_actor/src/community_view.rs
crates/db_views_actor/src/person_mention_view.rs
crates/db_views_actor/src/person_view.rs
crates/db_views_moderator/src/admin_purge_comment_view.rs
crates/db_views_moderator/src/admin_purge_community_view.rs
crates/db_views_moderator/src/admin_purge_person_view.rs
crates/db_views_moderator/src/admin_purge_post_view.rs
crates/db_views_moderator/src/mod_add_community_view.rs
crates/db_views_moderator/src/mod_add_view.rs
crates/db_views_moderator/src/mod_ban_from_community_view.rs
crates/db_views_moderator/src/mod_ban_view.rs
crates/db_views_moderator/src/mod_hide_community_view.rs
crates/db_views_moderator/src/mod_lock_post_view.rs
crates/db_views_moderator/src/mod_remove_comment_view.rs
crates/db_views_moderator/src/mod_remove_community_view.rs
crates/db_views_moderator/src/mod_remove_post_view.rs
crates/db_views_moderator/src/mod_sticky_post_view.rs
crates/db_views_moderator/src/mod_transfer_community_view.rs
crates/websocket/src/chat_server.rs

index 32179eeb2919274bc3734f3b0a0486dd81f118e5..65effc6273f432e2b9fa14e89ba47781ff9ebdd3 100644 (file)
@@ -586,7 +586,6 @@ export async function listPrivateMessages(
   let form: GetPrivateMessages = {
     auth: api.auth,
     unread_only: false,
-    limit: 999,
   };
   return api.client.getPrivateMessages(form);
 }
index 29029ac1e9d231ad212e1bcb10f08024b5e50264..bce36e2af54c3af3db8256f7d04793f3dc7974b0 100644 (file)
@@ -7,7 +7,6 @@ import {
   saveUserSettings,
   getSite,
   createPost,
-  gamma,
   resolveCommunity,
   createComment,
   resolveBetaCommunity,
index 3925e7913f45076445633381bb6df4e56ceb599e..9d79acf7937f79ea35ca021a087e2dab598aa198 100644 (file)
@@ -34,7 +34,7 @@ impl Perform for MarkAllAsRead {
         .recipient_id(person_id)
         .unread_only(true)
         .page(1)
-        .limit(999)
+        .limit(std::i64::MAX)
         .list()
     })
     .await??;
index e96325cfd5a2055d22302a8928030b0849771cf8..6e82a117ca52e273137118b9d874f154037d7404 100644 (file)
@@ -15,6 +15,7 @@ use lemmy_db_schema::{
   },
   traits::{Crud, Readable},
   utils::DbPool,
+  ListingType,
 };
 use lemmy_db_views::{
   comment_view::CommentQueryBuilder,
@@ -34,6 +35,7 @@ use lemmy_utils::{
 };
 use reqwest_middleware::ClientWithMiddleware;
 use rosetta_i18n::{Language, LanguageId};
+use std::str::FromStr;
 use tracing::warn;
 
 pub async fn blocking<F, T>(pool: &DbPool, f: F) -> Result<T, LemmyError>
@@ -716,3 +718,16 @@ pub async fn delete_user_account(
 
   Ok(())
 }
+
+pub async fn listing_type_with_site_default(
+  listing_type: Option<ListingType>,
+  pool: &DbPool,
+) -> Result<ListingType, LemmyError> {
+  Ok(match listing_type {
+    Some(l) => l,
+    None => {
+      let site = blocking(pool, Site::read_local_site).await??;
+      ListingType::from_str(&site.default_post_listing_type)?
+    }
+  })
+}
index 6b949ab6abcdd20d83d9c2bf706409ecd526a04c..87262dce7629f89508713325996e64656c04693d 100644 (file)
@@ -2,7 +2,12 @@ use crate::PerformCrud;
 use actix_web::web::Data;
 use lemmy_api_common::{
   comment::{GetComments, GetCommentsResponse},
-  utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
+  utils::{
+    blocking,
+    check_private_instance,
+    get_local_user_view_from_jwt_opt,
+    listing_type_with_site_default,
+  },
 };
 use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity};
 use lemmy_db_schema::{source::community::Community, traits::DeleteableOrRemoveable};
@@ -33,6 +38,8 @@ impl PerformCrud for GetComments {
     let person_id = local_user_view.map(|u| u.person.id);
 
     let community_id = data.community_id;
+    let listing_type = listing_type_with_site_default(data.type_, context.pool()).await?;
+
     let community_actor_id = if let Some(name) = &data.community_name {
       resolve_actor_identifier::<ApubCommunity, Community>(name, context)
         .await
@@ -42,7 +49,6 @@ impl PerformCrud for GetComments {
       None
     };
     let sort = data.sort;
-    let listing_type = data.type_;
     let saved_only = data.saved_only;
     let page = data.page;
     let limit = data.limit;
index 8b9c1bdb55674e7321af4a19fca3aba46dc62e69..32668b02bd9ac9facbe0234283d3b714c3b9e6fa 100644 (file)
@@ -31,6 +31,10 @@ impl PerformCrud for GetCommunity {
       get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret())
         .await?;
 
+    if data.name.is_none() && data.id.is_none() {
+      return Err(LemmyError::from_message("no_id_given"));
+    }
+
     check_private_instance(&local_user_view, context.pool()).await?;
 
     let person_id = local_user_view.map(|u| u.person.id);
index 90806cf204ad6509335e50ab0d59cc6fb2c9b95a..1af4f55bf450b0f7db3fe3ad230b4757bb6cad7c 100644 (file)
@@ -2,18 +2,18 @@ use crate::PerformCrud;
 use actix_web::web::Data;
 use lemmy_api_common::{
   post::{GetPosts, GetPostsResponse},
-  utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
+  utils::{
+    blocking,
+    check_private_instance,
+    get_local_user_view_from_jwt_opt,
+    listing_type_with_site_default,
+  },
 };
 use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity};
-use lemmy_db_schema::{
-  source::{community::Community, site::Site},
-  traits::DeleteableOrRemoveable,
-  ListingType,
-};
+use lemmy_db_schema::{source::community::Community, traits::DeleteableOrRemoveable};
 use lemmy_db_views::post_view::PostQueryBuilder;
 use lemmy_utils::{error::LemmyError, ConnectionId};
 use lemmy_websocket::LemmyContext;
-use std::str::FromStr;
 
 #[async_trait::async_trait(?Send)]
 impl PerformCrud for GetPosts {
@@ -43,13 +43,8 @@ impl PerformCrud for GetPosts {
       .map(|t| t.local_user.show_read_posts);
 
     let sort = data.sort;
-    let listing_type: ListingType = match data.type_ {
-      Some(l) => l,
-      None => {
-        let site = blocking(context.pool(), Site::read_local_site).await??;
-        ListingType::from_str(&site.default_post_listing_type)?
-      }
-    };
+    let listing_type = listing_type_with_site_default(data.type_, context.pool()).await?;
+
     let page = data.page;
     let limit = data.limit;
     let community_id = data.community_id;
index 36a0b290b294429d855007686d9f8021ee65da74..801cfbd040376c9b1c92f3a80fd9197036060761 100644 (file)
@@ -50,7 +50,7 @@ impl PerformCrud for GetPost {
         .my_person_id(person_id)
         .show_bot_accounts(show_bot_accounts)
         .post_id(id)
-        .limit(9999)
+        .limit(std::i64::MAX)
         .list()
     })
     .await??;
index ecfd45e093c23d6dfb265082ea5e5be7bd1ff302..426c44056a26b2b44c445db2a5c87e0056e1eb2f 100644 (file)
@@ -22,6 +22,12 @@ impl PerformCrud for GetPersonDetails {
     _websocket_id: Option<ConnectionId>,
   ) -> Result<GetPersonDetailsResponse, LemmyError> {
     let data: &GetPersonDetails = self;
+
+    // Check to make sure a person name or an id is given
+    if data.username.is_none() && data.person_id.is_none() {
+      return Err(LemmyError::from_message("no_id_given"));
+    }
+
     let local_user_view =
       get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret())
         .await?;
index 9996734169ef5da41017954b2ce4a605854e4bd2..d616229a20a4a96d78e2ea5399beb1d7e0f4bd3a 100644 (file)
@@ -11,7 +11,7 @@ use crate::{
     PostSavedForm,
   },
   traits::{Crud, DeleteableOrRemoveable, Likeable, Readable, Saveable},
-  utils::naive_now,
+  utils::{naive_now, FETCH_LIMIT_MAX},
 };
 use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl, *};
 use url::Url;
@@ -54,7 +54,7 @@ impl Post {
       .filter(removed.eq(false))
       .then_order_by(published.desc())
       .then_order_by(stickied.desc())
-      .limit(20)
+      .limit(FETCH_LIMIT_MAX)
       .load::<Self>(conn)
   }
 
index c9ccc170089c3fcde6a949a908e76937dd1279b5..bd9435e3ef93df3fbe96821de64854f04cf6371d 100644 (file)
@@ -4,6 +4,7 @@ use chrono::NaiveDateTime;
 use diesel::{
   backend::Backend,
   deserialize::FromSql,
+  result::Error::QueryBuilderError,
   serialize::{Output, ToSql},
   sql_types::Text,
   Connection,
@@ -15,6 +16,9 @@ use regex::Regex;
 use std::{env, env::VarError, io::Write};
 use url::Url;
 
+const FETCH_LIMIT_DEFAULT: i64 = 10;
+pub const FETCH_LIMIT_MAX: i64 = 50;
+
 pub type DbPool = diesel::r2d2::Pool<diesel::r2d2::ConnectionManager<diesel::PgConnection>>;
 
 pub fn get_database_url_from_env() -> Result<String, VarError> {
@@ -26,10 +30,39 @@ pub fn fuzzy_search(q: &str) -> String {
   format!("%{}%", replaced)
 }
 
-pub fn limit_and_offset(page: Option<i64>, limit: Option<i64>) -> (i64, i64) {
-  let page = page.unwrap_or(1);
-  let limit = limit.unwrap_or(10);
+pub fn limit_and_offset(
+  page: Option<i64>,
+  limit: Option<i64>,
+) -> Result<(i64, i64), diesel::result::Error> {
+  let page = match page {
+    Some(page) => {
+      if page < 1 {
+        return Err(QueryBuilderError("Page is < 1".into()));
+      } else {
+        page
+      }
+    }
+    None => 1,
+  };
+  let limit = match limit {
+    Some(limit) => {
+      if !(1..=FETCH_LIMIT_MAX).contains(&limit) {
+        return Err(QueryBuilderError(
+          format!("Fetch limit is > {}", FETCH_LIMIT_MAX).into(),
+        ));
+      } else {
+        limit
+      }
+    }
+    None => FETCH_LIMIT_DEFAULT,
+  };
   let offset = limit * (page - 1);
+  Ok((limit, offset))
+}
+
+pub fn limit_and_offset_unlimited(page: Option<i64>, limit: Option<i64>) -> (i64, i64) {
+  let limit = limit.unwrap_or(FETCH_LIMIT_DEFAULT);
+  let offset = limit * (page.unwrap_or(1) - 1);
   (limit, offset)
 }
 
index bca8afdc007293e68f87d1655faac0ae73070982..946503efe2beb6b667b5f73fd1e2ad560bc53a0c 100644 (file)
@@ -256,7 +256,7 @@ impl<'a> CommentReportQueryBuilder<'a> {
       query = query.filter(comment_report::resolved.eq(false));
     }
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
 
     query = query
       .order_by(comment_report::published.desc())
index 2852a6ca64106a0f42158bb0e9a831d5cb256948..6a665975caef7e97ba9c7a99e4f7af1c31e3554f 100644 (file)
@@ -1,5 +1,9 @@
 use crate::structs::CommentView;
-use diesel::{dsl::*, result::Error, *};
+use diesel::{
+  dsl::*,
+  result::{Error, Error::QueryBuilderError},
+  *,
+};
 use lemmy_db_schema::{
   aggregates::structs::CommentAggregates,
   newtypes::{CommentId, CommunityId, DbUrl, PersonId, PostId},
@@ -26,7 +30,7 @@ use lemmy_db_schema::{
     post::Post,
   },
   traits::{MaybeOptional, ToSafe, ViewToVec},
-  utils::{functions::hot_rank, fuzzy_search, limit_and_offset},
+  utils::{functions::hot_rank, fuzzy_search, limit_and_offset_unlimited},
   ListingType,
   SortType,
 };
@@ -414,14 +418,6 @@ impl<'a> CommentQueryBuilder<'a> {
       query = query.filter(comment::creator_id.eq(creator_id));
     };
 
-    if let Some(community_id) = self.community_id {
-      query = query.filter(post::community_id.eq(community_id));
-    }
-
-    if let Some(community_actor_id) = self.community_actor_id {
-      query = query.filter(community::actor_id.eq(community_actor_id))
-    }
-
     if let Some(post_id) = self.post_id {
       query = query.filter(comment::post_id.eq(post_id));
     };
@@ -449,9 +445,21 @@ impl<'a> CommentQueryBuilder<'a> {
               .or(community_follower::person_id.eq(person_id_join)),
           )
         }
-        ListingType::Community => {}
-      };
-    }
+        ListingType::Community => {
+          if self.community_actor_id.is_none() && self.community_id.is_none() {
+            return Err(QueryBuilderError("No community actor or id given".into()));
+          } else {
+            if let Some(community_id) = self.community_id {
+              query = query.filter(post::community_id.eq(community_id));
+            }
+
+            if let Some(community_actor_id) = self.community_actor_id {
+              query = query.filter(community::actor_id.eq(community_actor_id))
+            }
+          }
+        }
+      }
+    };
 
     if self.saved_only.unwrap_or(false) {
       query = query.filter(comment_saved::id.is_not_null());
@@ -489,7 +497,8 @@ impl<'a> CommentQueryBuilder<'a> {
       query = query.filter(person_block::person_id.is_null());
     }
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    // Don't use the regular error-checking one, many more comments must ofter be fetched.
+    let (limit, offset) = limit_and_offset_unlimited(self.page, self.limit);
 
     // Note: deleted and removed comments are done on the front side
     let res = query
index 9769ec02106085b01720a80dd9b6598be9c0dc03..64550d214e6fab6f0b84849f0625fdeed4b37755 100644 (file)
@@ -241,7 +241,7 @@ impl<'a> PostReportQueryBuilder<'a> {
       query = query.filter(post_report::resolved.eq(false));
     }
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
 
     query = query
       .order_by(post_report::published.desc())
index 8b02c91a301c03ae5198e21cecbdafe280d49fdc..65b177cb139042a8eb2d32bf1bac7154dd048b2a 100644 (file)
@@ -1,5 +1,10 @@
 use crate::structs::PostView;
-use diesel::{dsl::*, pg::Pg, result::Error, *};
+use diesel::{
+  dsl::*,
+  pg::Pg,
+  result::{Error, Error::QueryBuilderError},
+  *,
+};
 use lemmy_db_schema::{
   aggregates::structs::PostAggregates,
   newtypes::{CommunityId, DbUrl, PersonId, PostId},
@@ -358,21 +363,25 @@ impl<'a> PostQueryBuilder<'a> {
           )
         }
         ListingType::Community => {
-          if let Some(community_id) = self.community_id {
-            query = query
-              .filter(post::community_id.eq(community_id))
-              .then_order_by(post_aggregates::stickied.desc());
+          if self.community_actor_id.is_none() && self.community_id.is_none() {
+            return Err(QueryBuilderError("No community actor or id given".into()));
+          } else {
+            if let Some(community_id) = self.community_id {
+              query = query
+                .filter(post::community_id.eq(community_id))
+                .then_order_by(post_aggregates::stickied.desc());
+            }
+
+            if let Some(community_actor_id) = self.community_actor_id {
+              query = query
+                .filter(community::actor_id.eq(community_actor_id))
+                .then_order_by(post_aggregates::stickied.desc());
+            }
           }
         }
       }
     }
 
-    if let Some(community_actor_id) = self.community_actor_id {
-      query = query
-        .filter(community::actor_id.eq(community_actor_id))
-        .then_order_by(post_aggregates::stickied.desc());
-    }
-
     if let Some(url_search) = self.url_search {
       query = query.filter(post::url.eq(url_search));
     }
@@ -455,7 +464,7 @@ impl<'a> PostQueryBuilder<'a> {
         .then_order_by(post_aggregates::published.desc()),
     };
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
 
     query = query
       .limit(limit)
index fdf5b8e1471c231da63da86da6987341b041910f..185bd30224d747a3cd069b8ae1b54bfdc1ac7fe9 100644 (file)
@@ -107,7 +107,7 @@ impl<'a> PrivateMessageQueryBuilder<'a> {
       )
     }
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
 
     query = query
       .filter(private_message::deleted.eq(false))
index 00c79323b91196d837b746636e4e949ce3c6406e..2e3724d14896e6fd5a2b278c4e98165ba7f73cc1 100644 (file)
@@ -134,7 +134,7 @@ impl<'a> RegistrationApplicationQueryBuilder<'a> {
       query = query.filter(local_user::email_verified.eq(true))
     }
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
 
     query = query
       .limit(limit)
index 99546992bf33d596cc5afc1c676e1e838fc9a4e8..21a71725870018145380d17245ec4d2815cecff2 100644 (file)
@@ -242,7 +242,7 @@ impl<'a> CommunityQueryBuilder<'a> {
       }
     }
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
     let res = query
       .limit(limit)
       .offset(offset)
index d65c165c350e4a6b88cd2e569d9720534ebabada..8b92c2f9aed08477759ba16a2c38716c300165fb 100644 (file)
@@ -311,7 +311,7 @@ impl<'a> PersonMentionQueryBuilder<'a> {
         .order_by(comment_aggregates::score.desc()),
     };
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
 
     let res = query
       .limit(limit)
index 83886a190331fb467ac64113e974c2dfe6c56459..307f02484c08490c0860249d7e003ccead398b11 100644 (file)
@@ -124,7 +124,7 @@ impl<'a> PersonQueryBuilder<'a> {
         .order_by(person_aggregates::comment_score.desc()),
     };
 
-    let (limit, offset) = limit_and_offset(self.page, self.limit);
+    let (limit, offset) = limit_and_offset(self.page, self.limit)?;
     query = query.limit(limit).offset(offset);
 
     let res = query.load::<PersonViewSafeTuple>(self.conn)?;
index b8c8f7456ba32a29027dda5ad01750b644e30042..c2928de6497c493fbbfc702d63d608aa50ffb8f0 100644 (file)
@@ -35,7 +35,7 @@ impl AdminPurgeCommentView {
       query = query.filter(admin_purge_comment::admin_person_id.eq(admin_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 0c40a3963c6302cfedf7ed9ef14c49b938e84407..20903efcc4de1d893ca7613b1ad50006642e886c 100644 (file)
@@ -32,7 +32,7 @@ impl AdminPurgeCommunityView {
       query = query.filter(admin_purge_community::admin_person_id.eq(admin_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 9828e432c81a34baa837369595b72b4444b9f4a6..e6ab093b9776f436fd148878188cab2924d74930 100644 (file)
@@ -32,7 +32,7 @@ impl AdminPurgePersonView {
       query = query.filter(admin_purge_person::admin_person_id.eq(admin_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 6665e467552a74c1a31781bc9af9b170329374e8..981d51b3d6e967b3eebe6607db1e37630c5feddd 100644 (file)
@@ -35,7 +35,7 @@ impl AdminPurgePostView {
       query = query.filter(admin_purge_post::admin_person_id.eq(admin_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 55bb9d99b33a2c2480ca0c5512ee5e2e88dd2611..32fe7c777603b3fca8ef8f306f39fe55ca44bbbc 100644 (file)
@@ -44,7 +44,7 @@ impl ModAddCommunityView {
       query = query.filter(mod_add_community::community_id.eq(community_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 5b48d006682a614ea7b9ac43ea3288262a8a648d..874615a8e18b7dc3fb0506bf8bdf6625b4e5e0ac 100644 (file)
@@ -34,7 +34,7 @@ impl ModAddView {
       query = query.filter(mod_add::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 9e44e4797a5560b112e1b8f0fb1604cb0062e4b8..f5ce3fa9021a6ce5046887bad110c5b8384d78c0 100644 (file)
@@ -49,7 +49,7 @@ impl ModBanFromCommunityView {
       query = query.filter(mod_ban_from_community::community_id.eq(community_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index a36adaad074b093449c027ad9ef97cafe9d277e3..06e610deb0531d33a5613679a7d317f73d0f63e3 100644 (file)
@@ -34,7 +34,7 @@ impl ModBanView {
       query = query.filter(mod_ban::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index a838056227a4d5157e5c99c1a4e086016fe01498..ce0a3e73f9fb7397c0d2ad22fa0a13e22170ef44 100644 (file)
@@ -41,7 +41,7 @@ impl ModHideCommunityView {
       query = query.filter(mod_hide_community::mod_person_id.eq(admin_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index e9ec5f6679de72778ba45892f4d92a7d27fe1f2a..32ec5732b662c5153a0fec921055b8f5169c36b3 100644 (file)
@@ -43,7 +43,7 @@ impl ModLockPostView {
       query = query.filter(mod_lock_post::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index b2b14f220403bbd75c98b7cce24fae2f95f0006e..a3c7e64735c13a4a2a57440ad8407a818f960abe 100644 (file)
@@ -55,7 +55,7 @@ impl ModRemoveCommentView {
       query = query.filter(mod_remove_comment::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 29aad7f92d18f6c57f7342c49dbcafe0199b3a6d..91fcf511cca1eb1818f2c44176b5f3cd441a5e12 100644 (file)
@@ -35,7 +35,7 @@ impl ModRemoveCommunityView {
       query = query.filter(mod_remove_community::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 849b563912330e1d183f1ee8abdbb29a899c359f..0368a24b037ae753ec0ac8409592e1436c12e612 100644 (file)
@@ -43,7 +43,7 @@ impl ModRemovePostView {
       query = query.filter(mod_remove_post::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 8b2383ee5ffd1816fd7090db4f038580c48fbcdf..cd0b59abaab6cf4084b77e61d7ea5ae689ff2815 100644 (file)
@@ -43,7 +43,7 @@ impl ModStickyPostView {
       query = query.filter(mod_sticky_post::mod_person_id.eq(mod_person_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index c944a9a10ba685373d2d88ab330242a40f74737d..6e0df7336092464f0b2dc6ca2d727d455faf0ecc 100644 (file)
@@ -49,7 +49,7 @@ impl ModTransferCommunityView {
       query = query.filter(mod_transfer_community::community_id.eq(community_id));
     };
 
-    let (limit, offset) = limit_and_offset(page, limit);
+    let (limit, offset) = limit_and_offset(page, limit)?;
 
     let res = query
       .limit(limit)
index 2337cae321baa1498456fd7e90d4e6e533c0d2de..50ce35933bee33167a85dc78935423609a136b85 100644 (file)
@@ -479,7 +479,7 @@ impl ChatServer {
           UserOperationCrud::CreatePost => rate_limiter.post().check(ip),
           UserOperationCrud::CreateCommunity => rate_limiter.register().check(ip),
           UserOperationCrud::CreateComment => rate_limiter.comment().check(ip),
-          _ => true,
+          _ => rate_limiter.message().check(ip),
         };
         let fut = (message_handler_crud)(context, msg.id, user_operation_crud, data);
         (passed, fut)
@@ -488,7 +488,7 @@ impl ChatServer {
         let passed = match user_operation {
           UserOperation::GetCaptcha => rate_limiter.post().check(ip),
           UserOperation::Search => rate_limiter.search().check(ip),
-          _ => true,
+          _ => rate_limiter.message().check(ip),
         };
         let fut = (message_handler)(context, msg.id, user_operation, data);
         (passed, fut)