MastoAPI Accounts: Add fetching by nickname.
authorlain <lain@soykaf.club>
Mon, 11 Mar 2019 14:18:32 +0000 (15:18 +0100)
committerlain <lain@soykaf.club>
Mon, 11 Mar 2019 14:18:32 +0000 (15:18 +0100)
This is to make it easier for the frontends to handle domain.com/users/nickname
urls.

docs/Differences-in-MastodonAPI-Responses.md
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
test/web/mastodon_api/mastodon_api_controller_test.exs

index 667664f4ecef27c9e58be8b161dabd7a393f8c99..7b11fe90f6d4ab843f094fde8db3349a1522a81a 100644 (file)
@@ -19,3 +19,7 @@ Adding the parameter `with_muted=true` to the timeline queries will also return
 Has these additional fields under the `pleroma` object:
 
 - `local`: true if the post was made on the local instance.
+
+## Accounts
+
+- `/api/v1/accounts/:id`: The `id` parameter can also be the `nickname` of the user. This only works in this endpoint, not the deeper nested ones for following etc.
index 26921d3862b481f66649271240026a492b15c6c8..e7ca9611405ffbe700318699a21016f3b5665371 100644 (file)
@@ -131,8 +131,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     json(conn, account)
   end
 
-  def user(%{assigns: %{user: for_user}} = conn, %{"id" => id}) do
-    with %User{} = user <- Repo.get(User, id),
+  def user(%{assigns: %{user: for_user}} = conn, %{"id" => nickname_or_id}) do
+    with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id),
          true <- User.auth_active?(user) || user.id == for_user.id || User.superuser?(for_user) do
       account = AccountView.render("account.json", %{user: user, for: for_user})
       json(conn, account)
index 8a20eef2cc93cb862f9603fc016979b4f7c70e90..8e14e03c8558480cd90fb961cd321d77d2e0fd5e 100644 (file)
@@ -1064,6 +1064,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
     assert %{"error" => "Can't find user"} = json_response(conn, 404)
   end
 
+  test "account fetching also works nickname", %{conn: conn} do
+    user = insert(:user)
+
+    conn =
+      conn
+      |> get("/api/v1/accounts/#{user.nickname}")
+
+    assert %{"id" => id} = json_response(conn, 200)
+    assert id == user.id
+  end
+
   test "media upload", %{conn: conn} do
     file = %Plug.Upload{
       content_type: "image/jpg",
@@ -1950,7 +1961,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
                |> json_response(200)
     end
 
-    test "accound_id is required", %{
+    test "account_id is required", %{
       conn: conn,
       reporter: reporter,
       activity: activity