aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web
diff options
context:
space:
mode:
authorIvan Tashkinov <ivant.business@gmail.com>2019-07-13 14:49:39 +0300
committerIvan Tashkinov <ivant.business@gmail.com>2019-07-13 14:49:39 +0300
commit369e9bb42fc907f2e3f92e7e44dc52d6940dc046 (patch)
tree4bcc8154b1a9b7eb0ccce11a30039b5b7b950fd6 /lib/pleroma/web
parent02cdedbf9fdf27d8dca78caf75f6413cd2566e3e (diff)
downloadpleroma-369e9bb42fc907f2e3f92e7e44dc52d6940dc046.tar.gz
[#1041] Rate-limited status actions (per user and per user+status).
Diffstat (limited to 'lib/pleroma/web')
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex22
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index 8c2033c3a..76648b9f7 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@ -15,6 +15,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.Pagination
+ alias Pleroma.Plugs.RateLimiter
alias Pleroma.Repo
alias Pleroma.ScheduledActivity
alias Pleroma.Stats
@@ -46,8 +47,25 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
require Logger
- plug(Pleroma.Plugs.RateLimiter, :app_account_creation when action == :account_register)
- plug(Pleroma.Plugs.RateLimiter, :search when action in [:search, :search2, :account_search])
+ @rate_limited_status_crud_actions ~w(post_status delete_status)a
+ @rate_limited_status_reactions ~w(reblog_status unreblog_status fav_status unfav_status)a
+ @rate_limited_status_actions @rate_limited_status_crud_actions ++ @rate_limited_status_reactions
+
+ plug(
+ RateLimiter,
+ {:status_id_action, bucket_name: "status_id_action:reblog_unreblog", params: ["id"]}
+ when action in ~w(reblog_status unreblog_status)a
+ )
+
+ plug(
+ RateLimiter,
+ {:status_id_action, bucket_name: "status_id_action:fav_unfav", params: ["id"]}
+ when action in ~w(fav_status unfav_status)a
+ )
+
+ plug(RateLimiter, :statuses_actions when action in @rate_limited_status_actions)
+ plug(RateLimiter, :app_account_creation when action == :account_register)
+ plug(RateLimiter, :search when action in [:search, :search2, :account_search])
@local_mastodon_name "Mastodon-Local"