summaryrefslogtreecommitdiffstats
path: root/server/src/api/post.rs
diff options
context:
space:
mode:
authorasonix <asonix@asonix.dog>2020-04-19 22:59:07 -0500
committerasonix <asonix@asonix.dog>2020-04-19 22:59:07 -0500
commitac43b86b6063ef1ac876122c390de83d6b34a8e6 (patch)
treeab329231a106d0f7141973f3cf02bd0faf807e32 /server/src/api/post.rs
parentf300c67a4d9674eef05d180a787cc8352092903d (diff)
Change RateLimit to act as a middleware
Diffstat (limited to 'server/src/api/post.rs')
-rw-r--r--server/src/api/post.rs79
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 {