diff options
author | asonix <asonix@asonix.dog> | 2020-04-19 22:59:07 -0500 |
---|---|---|
committer | asonix <asonix@asonix.dog> | 2020-04-19 22:59:07 -0500 |
commit | ac43b86b6063ef1ac876122c390de83d6b34a8e6 (patch) | |
tree | ab329231a106d0f7141973f3cf02bd0faf807e32 /server/src/api/post.rs | |
parent | f300c67a4d9674eef05d180a787cc8352092903d (diff) |
Change RateLimit to act as a middleware
Diffstat (limited to 'server/src/api/post.rs')
-rw-r--r-- | server/src/api/post.rs | 79 |
1 files changed, 18 insertions, 61 deletions
diff --git a/server/src/api/post.rs b/server/src/api/post.rs index 19f16014..84ef89f1 100644 --- a/server/src/api/post.rs +++ b/server/src/api/post.rs @@ -77,12 +77,13 @@ pub struct SavePost { auth: String, } -impl Perform<PostResponse> for Oper<CreatePost> { +impl Perform for Oper<CreatePost> { + type Response = PostResponse; + fn perform( &self, pool: Pool<ConnectionManager<PgConnection>>, websocket_info: Option<WebsocketInfo>, - rate_limit_info: Option<RateLimitInfo>, ) -> Result<PostResponse, Error> { let data: &CreatePost = &self.data; @@ -103,13 +104,6 @@ impl Perform<PostResponse> for Oper<CreatePost> { let user_id = claims.id; - if let Some(rl) = &rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_post(&rl.ip, true)?; - } - let conn = pool.get()?; // Check for a community ban @@ -176,13 +170,6 @@ impl Perform<PostResponse> for Oper<CreatePost> { Err(_e) => return Err(APIError::err("couldnt_find_post").into()), }; - if let Some(rl) = &rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_post(&rl.ip, false)?; - } - let res = PostResponse { post: post_view }; if let Some(ws) = websocket_info { @@ -197,12 +184,13 @@ impl Perform<PostResponse> for Oper<CreatePost> { } } -impl Perform<GetPostResponse> for Oper<GetPost> { +impl Perform for Oper<GetPost> { + type Response = GetPostResponse; + fn perform( &self, pool: Pool<ConnectionManager<PgConnection>>, websocket_info: Option<WebsocketInfo>, - rate_limit_info: Option<RateLimitInfo>, ) -> Result<GetPostResponse, Error> { let data: &GetPost = &self.data; @@ -217,13 +205,6 @@ impl Perform<GetPostResponse> for Oper<GetPost> { None => None, }; - if let Some(rl) = rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_message(&rl.ip, false)?; - } - let conn = pool.get()?; let post_view = match PostView::read(&conn, data.id, user_id) { @@ -277,12 +258,13 @@ impl Perform<GetPostResponse> for Oper<GetPost> { } } -impl Perform<GetPostsResponse> for Oper<GetPosts> { +impl Perform for Oper<GetPosts> { + type Response = GetPostsResponse; + fn perform( &self, pool: Pool<ConnectionManager<PgConnection>>, websocket_info: Option<WebsocketInfo>, - rate_limit_info: Option<RateLimitInfo>, ) -> Result<GetPostsResponse, Error> { let data: &GetPosts = &self.data; @@ -307,13 +289,6 @@ impl Perform<GetPostsResponse> for Oper<GetPosts> { let type_ = ListingType::from_str(&data.type_)?; let sort = SortType::from_str(&data.sort)?; - if let Some(rl) = rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_message(&rl.ip, false)?; - } - let conn = pool.get()?; let posts = match PostQueryBuilder::create(&conn) @@ -348,12 +323,13 @@ impl Perform<GetPostsResponse> for Oper<GetPosts> { } } -impl Perform<PostResponse> for Oper<CreatePostLike> { +impl Perform for Oper<CreatePostLike> { + type Response = PostResponse; + fn perform( &self, pool: Pool<ConnectionManager<PgConnection>>, websocket_info: Option<WebsocketInfo>, - rate_limit_info: Option<RateLimitInfo>, ) -> Result<PostResponse, Error> { let data: &CreatePostLike = &self.data; @@ -364,13 +340,6 @@ impl Perform<PostResponse> for Oper<CreatePostLike> { let user_id = claims.id; - if let Some(rl) = rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_message(&rl.ip, false)?; - } - let conn = pool.get()?; // Don't do a downvote if site has downvotes disabled @@ -429,12 +398,13 @@ impl Perform<PostResponse> for Oper<CreatePostLike> { } } -impl Perform<PostResponse> for Oper<EditPost> { +impl Perform for Oper<EditPost> { + type Response = PostResponse; + fn perform( &self, pool: Pool<ConnectionManager<PgConnection>>, websocket_info: Option<WebsocketInfo>, - rate_limit_info: Option<RateLimitInfo>, ) -> Result<PostResponse, Error> { let data: &EditPost = &self.data; @@ -455,13 +425,6 @@ impl Perform<PostResponse> for Oper<EditPost> { let user_id = claims.id; - if let Some(rl) = rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_message(&rl.ip, false)?; - } - let conn = pool.get()?; // Verify its the creator or a mod or admin @@ -567,12 +530,13 @@ impl Perform<PostResponse> for Oper<EditPost> { } } -impl Perform<PostResponse> for Oper<SavePost> { +impl Perform for Oper<SavePost> { + type Response = PostResponse; + fn perform( &self, pool: Pool<ConnectionManager<PgConnection>>, _websocket_info: Option<WebsocketInfo>, - rate_limit_info: Option<RateLimitInfo>, ) -> Result<PostResponse, Error> { let data: &SavePost = &self.data; @@ -588,13 +552,6 @@ impl Perform<PostResponse> for Oper<SavePost> { user_id, }; - if let Some(rl) = rate_limit_info { - rl.rate_limiter - .lock() - .unwrap() - .check_rate_limit_message(&rl.ip, false)?; - } - let conn = pool.get()?; if data.save { |