X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fo_auth%2Ftoken.ex;h=c9398aeaa2be645a6b31d14383cf1ad28ada18df;hb=63be819661cd28514207bbc19be6d4964235685b;hp=08c8cd29867ffd980f6ef89b6b2f361f6c2ddb1d;hpb=429e2ac832a874ae8ba8a9c116da61a6273c8a87;p=akkoma diff --git a/lib/pleroma/web/o_auth/token.ex b/lib/pleroma/web/o_auth/token.ex index 08c8cd298..c9398aeaa 100644 --- a/lib/pleroma/web/o_auth/token.ex +++ b/lib/pleroma/web/o_auth/token.ex @@ -39,12 +39,6 @@ defmodule Pleroma.Web.OAuth.Token do |> Repo.find_resource() end - def get_by_app(%App{} = app) do - app.id - |> Query.get_unexpired_by_app() - |> Repo.find_resource() - end - @doc "Gets token for app by access token" @spec get_by_token(App.t(), String.t()) :: {:ok, t()} | {:error, :not_found} def get_by_token(%App{id: app_id} = _app, token) do @@ -76,6 +70,16 @@ defmodule Pleroma.Web.OAuth.Token do end end + def get_preeexisting_by_app_and_user(app, user) do + Query.get_by_app(app.id) + |> Query.get_by_user(user.id) + |> Query.get_unexpired() + |> Query.preload([:user]) + |> Query.sort_by_inserted_at() + |> Query.limit(1) + |> Repo.find_resource() + end + defp put_token(changeset) do changeset |> change(%{token: Token.Utils.generate_token()}) @@ -92,6 +96,14 @@ defmodule Pleroma.Web.OAuth.Token do |> unique_constraint(:refresh_token) end + def get_or_exchange_token(%Authorization{} = auth, %App{} = app, %User{} = user) do + if auth.used do + get_preeexisting_by_app_and_user(app, user) + else + exchange_token(app, auth) + end + end + defp put_valid_until(changeset, attrs) do valid_until = Map.get(attrs, :valid_until, NaiveDateTime.add(NaiveDateTime.utc_now(), lifespan()))