diff --git a/changelog.d/current_token.add b/changelog.d/current_token.add new file mode 100644 index 000000000..f8004ef7b --- /dev/null +++ b/changelog.d/current_token.add @@ -0,0 +1 @@ +OAuth token list API now includes property to signify which token is being used to access the API diff --git a/lib/pleroma/web/o_auth/token_controller.ex b/lib/pleroma/web/o_auth/token_controller.ex index 296b60510..7df6b875b 100644 --- a/lib/pleroma/web/o_auth/token_controller.ex +++ b/lib/pleroma/web/o_auth/token_controller.ex @@ -26,11 +26,11 @@ defmodule Pleroma.Web.OAuth.TokenController do end end - def oauth_tokens(%{assigns: %{user: user}} = conn, _params) do + def oauth_tokens(%{assigns: %{user: user, token: current_token}} = conn, _params) do with oauth_tokens <- Token.get_user_tokens(user) do conn |> put_view(TokenView) - |> render("index.json", %{tokens: oauth_tokens}) + |> render("index.json", %{tokens: oauth_tokens, current_token: current_token}) end end diff --git a/lib/pleroma/web/o_auth/token_view.ex b/lib/pleroma/web/o_auth/token_view.ex index f9894399a..ee54280ec 100644 --- a/lib/pleroma/web/o_auth/token_view.ex +++ b/lib/pleroma/web/o_auth/token_view.ex @@ -5,18 +5,21 @@ defmodule Pleroma.Web.OAuth.TokenView do use Pleroma.Web, :view - def render("index.json", %{tokens: tokens}) do + def render("index.json", %{tokens: tokens, current_token: current_token}) do tokens - |> render_many(Pleroma.Web.OAuth.TokenView, "show.json") + |> render_many(Pleroma.Web.OAuth.TokenView, "show.json", %{ + current_token: current_token + }) |> Enum.filter(&Enum.any?/1) end - def render("show.json", %{token: token_entry}) do + def render("show.json", %{token: token_entry, current_token: current_token}) do %{ id: token_entry.id, valid_until: token_entry.valid_until, app_name: token_entry.app.client_name, - scopes: token_entry.scopes + scopes: token_entry.scopes, + is_current_token: token_entry.id == current_token.id } end end diff --git a/test/pleroma/web/o_auth/token_controller_test.exs b/test/pleroma/web/o_auth/token_controller_test.exs index 08acf27bf..e41584cd0 100644 --- a/test/pleroma/web/o_auth/token_controller_test.exs +++ b/test/pleroma/web/o_auth/token_controller_test.exs @@ -62,7 +62,22 @@ defmodule Pleroma.Web.OAuth.TokenControllerTest do |> hd() |> Map.keys() - assert Enum.sort(keys) == Enum.sort(["id", "app_name", "valid_until", "scopes"]) + assert Enum.sort(keys) == + Enum.sort(["id", "app_name", "valid_until", "scopes", "is_current_token"]) + end + + test "marks which token is being used for the request" do + %{conn: conn, user: user, token: current} = oauth_access(["read:security"]) + other = insert(:oauth_token, user: user) + + tokens = + conn + |> get("/api/oauth_tokens") + |> json_response(200) + |> Map.new(&{&1["id"], &1["is_current_token"]}) + + assert tokens[current.id] == true + assert tokens[other.id] == false end test "is allowed with the read scope" do