logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: 439c1baf25b19723bcbaac78b10d00181074e3b6
parent a022b9d73340f0fcf2bc74fb60de6324a1da0b12
Author: Hélène <pleroma-dev@helene.moe>
Date:   Tue, 23 Aug 2022 17:15:06 +0200

OAuthPlug: use user cache instead of joining

As this plug is called on every request, this should reduce load on the
database by not requiring to select on the users table every single
time, and to instead use the by-ID user cache whenever possible.

Diffstat:

Mlib/pleroma/web/plugs/o_auth_plug.ex12+++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/web/plugs/o_auth_plug.ex b/lib/pleroma/web/plugs/o_auth_plug.ex @@ -47,15 +47,17 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do # @spec fetch_user_and_token(String.t()) :: {:ok, User.t(), Token.t()} | nil defp fetch_user_and_token(token) do - query = + token_query = from(t in Token, - where: t.token == ^token, - join: user in assoc(t, :user), - preload: [user: user] + where: t.token == ^token ) - with %Token{user: user} = token_record <- Repo.one(query) do + with %Token{user_id: user_id} = token_record <- Repo.one(token_query), + false <- is_nil(user_id), + %User{} = user <- User.get_cached_by_id(user_id) do {:ok, user, token_record} + else + _ -> nil end end