Rate limit changes (fixes #5287) (#5421)

* Stricter rate limit for fetching link metadata (fixes #5287)

* Switch to search rate limit

* use search rate limit for resolve object

* pictrs rate limit

* undo test change

* fix
This commit is contained in:
Nutomic 2025-02-14 12:36:16 +00:00 committed by GitHub
parent a4bf28e123
commit d1eff9084b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 11 deletions

View file

@ -137,9 +137,13 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.wrap(rate_limit.image())
.route(post().to(upload_image)),
)
.service(resource("/pictrs/image/{filename}").route(get().to(get_image)))
.service(resource("/pictrs/image/delete/{token}/{filename}").route(get().to(delete_image)))
.service(resource("/pictrs/healthz").route(get().to(pictrs_health)))
.service(
scope("/pictrs")
.wrap(rate_limit.message())
.route("/image/{filename}", get().to(get_image))
.route("/image/delete/{token}/{filename}", get().to(delete_image))
.route("/healthz", get().to(pictrs_health)),
)
.service(
scope("/api/v3")
.route("/image_proxy", get().to(image_proxy))
@ -165,7 +169,7 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
)
.service(
resource("/resolve_object")
.wrap(rate_limit.message())
.wrap(rate_limit.search())
.route(get().to(resolve_object)),
)
// Community
@ -198,12 +202,17 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
)
// Post
.service(
// Handle POST to /post separately to add the post() rate limitter
resource("/post")
// Handle POST to /post separately to add the post() rate limitter
.guard(guard::Post())
.wrap(rate_limit.post())
.route(post().to(create_post)),
)
.service(
resource("/post/site_metadata")
.wrap(rate_limit.search())
.route(get().to(get_link_metadata)),
)
.service(
scope("/post")
.wrap(rate_limit.message())
@ -220,8 +229,7 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.route("/like/list", get().to(list_post_likes))
.route("/save", put().to(save_post))
.route("/report", post().to(create_post_report))
.route("/report/resolve", put().to(resolve_post_report))
.route("/site_metadata", get().to(get_link_metadata)),
.route("/report/resolve", put().to(resolve_post_report)),
)
// Comment
.service(

View file

@ -197,7 +197,11 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.wrap(rate_limit.search())
.route(get().to(search)),
)
.route("/resolve_object", get().to(resolve_object))
.service(
resource("/resolve_object")
.wrap(rate_limit.search())
.route(get().to(resolve_object)),
)
// Community
.service(
resource("/community")
@ -233,12 +237,17 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.route("/federated_instances", get().to(get_federated_instances))
// Post
.service(
// Handle POST to /post separately to add the post() rate limitter
resource("/post")
// Handle POST to /post separately to add the post() rate limitter
.guard(guard::Post())
.wrap(rate_limit.post())
.route(post().to(create_post)),
)
.service(
resource("/post/site_metadata")
.wrap(rate_limit.search())
.route(get().to(get_link_metadata)),
)
.service(
scope("/post")
.route("", get().to(get_post))
@ -255,8 +264,7 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.route("/like/list", get().to(list_post_likes))
.route("/save", put().to(save_post))
.route("/report", post().to(create_post_report))
.route("/report/resolve", put().to(resolve_post_report))
.route("/site_metadata", get().to(get_link_metadata)),
.route("/report/resolve", put().to(resolve_post_report)),
)
// Comment
.service(