Merge pull request 'Fix per-status rate limit for favourites and reblogs' (#8043) from lambadalambda/pleroma:fix/status-id-action-rate-limit into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8043
This commit is contained in:
commit
9e7bfbe16b
3 changed files with 26 additions and 2 deletions
1
changelog.d/status-id-action-rate-limit.fix
Normal file
1
changelog.d/status-id-action-rate-limit.fix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Rate limit favourites and reblogs per status, not across all statuses
|
||||||
|
|
@ -92,13 +92,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
|
||||||
|
|
||||||
plug(
|
plug(
|
||||||
RateLimiter,
|
RateLimiter,
|
||||||
[name: :status_id_action, bucket_name: "status_id_action:reblog_unreblog", params: [:id]]
|
[name: :status_id_action, bucket_name: "status_id_action:reblog_unreblog", params: ["id"]]
|
||||||
when action in ~w(reblog unreblog)a
|
when action in ~w(reblog unreblog)a
|
||||||
)
|
)
|
||||||
|
|
||||||
plug(
|
plug(
|
||||||
RateLimiter,
|
RateLimiter,
|
||||||
[name: :status_id_action, bucket_name: "status_id_action:fav_unfav", params: [:id]]
|
[name: :status_id_action, bucket_name: "status_id_action:fav_unfav", params: ["id"]]
|
||||||
when action in ~w(favourite unfavourite)a
|
when action in ~w(favourite unfavourite)a
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2243,6 +2243,29 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
|
||||||
|> json_response_and_validate_schema(404) == %{"error" => "Record not found"}
|
|> json_response_and_validate_schema(404) == %{"error" => "Record not found"}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "status_id_action rate limit" do
|
||||||
|
setup do: clear_config([:rate_limit, :status_id_action], {60_000, 2})
|
||||||
|
setup do: clear_config([:rate_limit, :statuses_actions], {60_000, 100})
|
||||||
|
setup do: oauth_access(["write:statuses", "write:favourites"])
|
||||||
|
|
||||||
|
for {action, undo} <- [{"favourite", "unfavourite"}, {"reblog", "unreblog"}] do
|
||||||
|
test "#{action} is limited per status, not per user", %{conn: conn} do
|
||||||
|
conn = put_req_header(conn, "content-type", "application/json")
|
||||||
|
statuses = insert_list(3, :note_activity)
|
||||||
|
|
||||||
|
assert Enum.map(
|
||||||
|
statuses,
|
||||||
|
&post(conn, "/api/v1/statuses/#{&1.id}/#{unquote(action)}").status
|
||||||
|
) ==
|
||||||
|
[200, 200, 200]
|
||||||
|
|
||||||
|
status = hd(statuses)
|
||||||
|
assert post(conn, "/api/v1/statuses/#{status.id}/#{unquote(undo)}").status == 200
|
||||||
|
assert post(conn, "/api/v1/statuses/#{status.id}/#{unquote(action)}").status == 429
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "pinned statuses" do
|
describe "pinned statuses" do
|
||||||
setup do: oauth_access(["write:accounts"])
|
setup do: oauth_access(["write:accounts"])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue