diff options
author | rinpatch <rinpatch@sdf.org> | 2020-01-30 19:24:04 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2020-01-30 19:24:04 +0000 |
commit | c27d1d65bfd60effdb45359697141c136e156177 (patch) | |
tree | 7e5df990c3100024b52f00a0eda89ad74ad0a9cb /lib | |
parent | 774cba84f50b7ebc4eef3406467aafa5fa76dff7 (diff) | |
parent | 5b62acf6e9a38f8d14a9fb37cc85e646fb0169e3 (diff) | |
download | pleroma-c27d1d65bfd60effdb45359697141c136e156177.tar.gz |
Merge branch 'fix/disable-rate-limiter-for-socket-localhost' into 'develop'
Disable rate limiter for socket/localhost
Closes #1380
See merge request pleroma/pleroma!2064
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/plugs/rate_limiter/rate_limiter.ex | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/lib/pleroma/plugs/rate_limiter/rate_limiter.ex b/lib/pleroma/plugs/rate_limiter/rate_limiter.ex index d720508c8..7fb92489c 100644 --- a/lib/pleroma/plugs/rate_limiter/rate_limiter.ex +++ b/lib/pleroma/plugs/rate_limiter/rate_limiter.ex @@ -67,6 +67,8 @@ defmodule Pleroma.Plugs.RateLimiter do alias Pleroma.Plugs.RateLimiter.LimiterSupervisor alias Pleroma.User + require Logger + def init(opts) do limiter_name = Keyword.get(opts, :name) @@ -89,18 +91,39 @@ defmodule Pleroma.Plugs.RateLimiter do def call(conn, nil), do: conn def call(conn, settings) do - settings - |> incorporate_conn_info(conn) - |> check_rate() - |> case do - {:ok, _count} -> + case disabled?() do + true -> + if Pleroma.Config.get(:env) == :prod, + do: Logger.warn("Rate limiter is disabled for localhost/socket") + conn - {:error, _count} -> - render_throttled_error(conn) + false -> + settings + |> incorporate_conn_info(conn) + |> check_rate() + |> case do + {:ok, _count} -> + conn + + {:error, _count} -> + render_throttled_error(conn) + end end end + def disabled? do + localhost_or_socket = + Pleroma.Config.get([Pleroma.Web.Endpoint, :http, :ip]) + |> Tuple.to_list() + |> Enum.join(".") + |> String.match?(~r/^local|^127.0.0.1/) + + remote_ip_disabled = not Pleroma.Config.get([Pleroma.Plugs.RemoteIp, :enabled]) + + localhost_or_socket and remote_ip_disabled + end + def inspect_bucket(conn, name_root, settings) do settings = settings |