From 278f66a6830c6a9763aa0fb76ed9e73d2076f37b Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 9 Nov 2026 19:15:02 +0200 Subject: [PATCH] throttle --- lib/pleroma/web/plugs/o_auth_plug.ex | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/plugs/o_auth_plug.ex b/lib/pleroma/web/plugs/o_auth_plug.ex index 4246a9c75..9d402182a 100644 --- a/lib/pleroma/web/plugs/o_auth_plug.ex +++ b/lib/pleroma/web/plugs/o_auth_plug.ex @@ -16,6 +16,8 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do @realm_reg Regex.compile!("Bearer\:?\s+(.*)$", "i") + @update_interval :timer.hours(1) + def init(options), do: options 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, user, user_token} <- fetch_user_and_token(token_str), 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 - |> assign(:token, user_token) |> assign(:user, user) else _ -> with {:ok, app, app_token} <- fetch_app_and_token(token_str), 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 - |> assign(:token, app_token) |> assign(:app, app) else _ -> conn @@ -45,6 +59,12 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do 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 # @spec fetch_user_and_token(String.t()) :: {:ok, User.t(), Token.t()} | nil