# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Plugs.RateLimiter do
require Logger
+ @cachex Pleroma.Config.get([:cachex, :provider], Cachex)
+
@doc false
def init(plug_opts) do
plug_opts
key_name = make_key_name(action_settings)
limit = get_limits(action_settings)
- case Cachex.get(bucket_name, key_name) do
+ case @cachex.get(bucket_name, key_name) do
{:error, :no_cache} ->
@inspect_bucket_not_found
key_name = make_key_name(action_settings)
limit = get_limits(action_settings)
- case Cachex.get_and_update(bucket_name, key_name, &increment_value(&1, limit)) do
+ case @cachex.get_and_update(bucket_name, key_name, &increment_value(&1, limit)) do
{:commit, value} ->
{:ok, value}
})
end
- defp ip(%{remote_ip: remote_ip}) do
+ defp ip(%{remote_ip: remote_ip}) when is_binary(remote_ip) do
+ remote_ip
+ end
+
+ defp ip(%{remote_ip: remote_ip}) when is_tuple(remote_ip) do
remote_ip
|> Tuple.to_list()
|> Enum.join(".")
end
+ defp ip(_), do: nil
+
defp render_throttled_error(conn) do
conn
|> render_error(:too_many_requests, "Throttled")