Merge remote-tracking branch 'upstream/develop' into oauth-token-id
authorAlex Gleason <alex@alexgleason.me>
Thu, 29 Apr 2021 19:06:12 +0000 (14:06 -0500)
committerAlex Gleason <alex@alexgleason.me>
Thu, 29 Apr 2021 19:06:12 +0000 (14:06 -0500)
CHANGELOG.md
docs/development/API/differences_in_mastoapi_responses.md
lib/pleroma/web/o_auth/o_auth_view.ex
test/pleroma/web/o_auth/o_auth_controller_test.exs

index a1173414df944938115169aa14470ba0abdb642b..9a0171763e859f94fe700e1b8925715c87bcec62 100644 (file)
@@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 ### Added
 
 - MRF (`FollowBotPolicy`): New MRF Policy which makes a designated local Bot account attempt to follow all users in public Notes received by your instance. Users who require approving follower requests or have #nobot in their profile are excluded.
+- Return OAuth token `id` (primary key) in POST `/oauth/token`.
 
 ## Unreleased (Patch)
 
index 2ff56d3cae39aefc2a548863c0a508a8e4801cc8..6c1ecb559671e557032f59724a598baa8ceef543 100644 (file)
@@ -256,9 +256,29 @@ This information is returned in the `/api/v1/accounts/verify_credentials` endpoi
 
 *Pleroma supports refreshing tokens.*
 
-`POST /oauth/token`
+### POST `/oauth/token`
 
-Post here request with `grant_type=refresh_token` to obtain new access token. Returns an access token.
+You can obtain access tokens for a user in a few additional ways.
+
+#### Refreshing a token
+
+To obtain a new access token from a refresh token, pass `grant_type=refresh_token` with the following extra parameters:
+
+- `refresh_token`: The refresh token.
+
+#### Getting a token with a password
+
+To obtain a token from a user's password, pass `grant_type=password` with the following extra parameters:
+
+- `username`: Username to authenticate.
+- `password`: The user's password.
+
+#### Response body
+
+Additional fields are returned in the response:
+
+- `id`: The primary key of this token in Pleroma's database.
+- `me` (user tokens only): The ActivityPub ID of the user who owns the token.
 
 ## Account Registration
 
index 281bbcc3ce98a7626830d691bd8472c7d8647b87..1419c96a2f905bbecffeb70702b5bc0bf711ed08 100644 (file)
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.OAuth.OAuthView do
 
   def render("token.json", %{token: token} = opts) do
     response = %{
+      id: token.id,
       token_type: "Bearer",
       access_token: token.token,
       refresh_token: token.refresh_token,
index 312500febf243a04ca96526f9de790513f324a1f..0fdd5b8e9fb853e6cd2f4a84ef6eb1ad39030292 100644 (file)
@@ -805,10 +805,12 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
           "client_secret" => app.client_secret
         })
 
-      assert %{"access_token" => token} = json_response(conn, 200)
+      assert %{"id" => id, "access_token" => access_token} = json_response(conn, 200)
 
-      token = Repo.get_by(Token, token: token)
+      token = Repo.get_by(Token, token: access_token)
       assert token
+      assert token.id == id
+      assert token.token == access_token
       assert token.scopes == app.scopes
     end