X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fplugs%2Frate_limiter%2Frate_limiter.ex;h=c3f6351c87cafe5ae60dfc7278a259b9274f5eaf;hb=0f386110c6e15148ff1ff5ea3451885485fcb7ff;hp=d2067060d6e0d1f1113ce125aa713160d25b5ba5;hpb=6f2efb1c450daa75d848dab8e3729ced81ed3904;p=akkoma
diff --git a/lib/pleroma/plugs/rate_limiter/rate_limiter.ex b/lib/pleroma/plugs/rate_limiter/rate_limiter.ex
index d2067060d..c3f6351c8 100644
--- a/lib/pleroma/plugs/rate_limiter/rate_limiter.ex
+++ b/lib/pleroma/plugs/rate_limiter/rate_limiter.ex
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors
+# Copyright © 2017-2020 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Plugs.RateLimiter do
@@ -121,6 +121,8 @@ defmodule Pleroma.Plugs.RateLimiter do
localhost_or_socket and remote_ip_disabled
end
+ @inspect_bucket_not_found {:error, :not_found}
+
def inspect_bucket(conn, bucket_name_root, plug_opts) do
with %{name: _} = action_settings <- action_settings(plug_opts) do
action_settings = incorporate_conn_info(action_settings, conn)
@@ -130,7 +132,7 @@ defmodule Pleroma.Plugs.RateLimiter do
case Cachex.get(bucket_name, key_name) do
{:error, :no_cache} ->
- {:err, :not_found}
+ @inspect_bucket_not_found
{:ok, nil} ->
{0, limit}
@@ -139,12 +141,12 @@ defmodule Pleroma.Plugs.RateLimiter do
{value, limit - value}
end
else
- _ -> {:err, :not_found}
+ _ -> @inspect_bucket_not_found
end
end
def action_settings(plug_opts) do
- with limiter_name when not is_nil(limiter_name) <- plug_opts[:name],
+ with limiter_name when is_atom(limiter_name) <- plug_opts[:name],
limits when not is_nil(limits) <- Config.get([:rate_limit, limiter_name]) do
bucket_name_root = Keyword.get(plug_opts, :bucket_name, limiter_name)
@@ -169,7 +171,7 @@ defmodule Pleroma.Plugs.RateLimiter do
{:error, value}
{:error, :no_cache} ->
- initialize_buckets(action_settings)
+ initialize_buckets!(action_settings)
check_rate(action_settings)
end
end
@@ -248,11 +250,16 @@ defmodule Pleroma.Plugs.RateLimiter do
|> String.replace_leading(":", "")
end
- defp initialize_buckets(%{name: _name, limits: nil}), do: :ok
+ defp initialize_buckets!(%{name: _name, limits: nil}), do: :ok
+
+ defp initialize_buckets!(%{name: name, limits: limits}) do
+ {:ok, _pid} =
+ LimiterSupervisor.add_or_return_limiter(anon_bucket_name(name), get_scale(:anon, limits))
+
+ {:ok, _pid} =
+ LimiterSupervisor.add_or_return_limiter(user_bucket_name(name), get_scale(:user, limits))
- defp initialize_buckets(%{name: name, limits: limits}) do
- LimiterSupervisor.add_limiter(anon_bucket_name(name), get_scale(:anon, limits))
- LimiterSupervisor.add_limiter(user_bucket_name(name), get_scale(:user, limits))
+ :ok
end
defp attach_identity(base, %{mode: :user, conn_info: conn_info}),