throttle
This commit is contained in:
parent
4baafe313d
commit
278f66a683
1 changed files with 23 additions and 3 deletions
|
|
@ -16,6 +16,8 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do
|
||||||
|
|
||||||
@realm_reg Regex.compile!("Bearer\:?\s+(.*)$", "i")
|
@realm_reg Regex.compile!("Bearer\:?\s+(.*)$", "i")
|
||||||
|
|
||||||
|
@update_interval :timer.hours(1)
|
||||||
|
|
||||||
def init(options), do: options
|
def init(options), do: options
|
||||||
|
|
||||||
def call(%{assigns: %{user: %User{}}} = conn, _), do: conn
|
def call(%{assigns: %{user: %User{}}} = conn, _), do: conn
|
||||||
|
|
@ -24,17 +26,29 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do
|
||||||
with {:ok, token_str} <- fetch_token_str(conn) do
|
with {:ok, token_str} <- fetch_token_str(conn) do
|
||||||
with {:ok, user, user_token} <- fetch_user_and_token(token_str),
|
with {:ok, user, user_token} <- fetch_user_and_token(token_str),
|
||||||
false <- Token.expired?(user_token) do
|
false <- Token.expired?(user_token) do
|
||||||
Token.update_activity(user_token)
|
with true <- needs_update?(token),
|
||||||
|
{:ok, updated_token} <- Token.update_activity(user_token) do
|
||||||
|
|
||||||
|
assign(conn, :token, updated_token)
|
||||||
|
else
|
||||||
|
assign(conn, :token, user_token)
|
||||||
|
end
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> assign(:token, user_token)
|
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
else
|
else
|
||||||
_ ->
|
_ ->
|
||||||
with {:ok, app, app_token} <- fetch_app_and_token(token_str),
|
with {:ok, app, app_token} <- fetch_app_and_token(token_str),
|
||||||
false <- Token.expired?(app_token) do
|
false <- Token.expired?(app_token) do
|
||||||
|
with true <- needs_update?(token),
|
||||||
|
{:ok, updated_token} <- Token.update_activity(app_token) do
|
||||||
|
|
||||||
|
assign(conn, :token, updated_token)
|
||||||
|
else
|
||||||
|
assign(conn, :token, app_token)
|
||||||
|
end
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> assign(:token, app_token)
|
|
||||||
|> assign(:app, app)
|
|> assign(:app, app)
|
||||||
else
|
else
|
||||||
_ -> conn
|
_ -> conn
|
||||||
|
|
@ -45,6 +59,12 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp needs_update?(Token{last_active: nil}), do: true
|
||||||
|
|
||||||
|
defp needs_update?(Token{last_active: last_active}) do
|
||||||
|
NaiveDateTime.diff(NaiveDateTime.utc_now(), last_active, :millisecond) >= @update_interval
|
||||||
|
end
|
||||||
|
|
||||||
# Gets user by token
|
# Gets user by token
|
||||||
#
|
#
|
||||||
@spec fetch_user_and_token(String.t()) :: {:ok, User.t(), Token.t()} | nil
|
@spec fetch_user_and_token(String.t()) :: {:ok, User.t(), Token.t()} | nil
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue