1 defmodule Pleroma.Web.OAuth.Token.Strategy.RefreshToken do
3 Functions for dealing with refresh token strategy.
8 alias Pleroma.Web.OAuth.Token
9 alias Pleroma.Web.OAuth.Token.Strategy.Revoke
12 Will grant access token by refresh token.
14 @spec grant(Token.t()) :: {:ok, Token.t()} | {:error, any()}
16 access_token = Repo.preload(token, [:user, :app])
19 Repo.transaction(fn ->
21 app: access_token.app,
22 user: access_token.user,
23 scopes: access_token.scopes
27 |> revoke_access_token()
28 |> create_access_token(token_params)
32 {:ok, {:error, reason}} -> {:error, reason}
33 {:ok, {:ok, token}} -> {:ok, token}
34 {:error, reason} -> {:error, reason}
38 defp revoke_access_token(token) do
42 defp create_access_token({:error, error}, _), do: {:error, error}
44 defp create_access_token({:ok, token}, %{app: app, user: user} = token_params) do
45 Token.create_token(app, user, add_refresh_token(token_params, token.refresh_token))
48 defp add_refresh_token(params, token) do
49 case Config.get([:oauth2, :issue_new_refresh_token], false) do
50 true -> Map.put(params, :refresh_token, token)