diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 14f7eeeb6..f17cf40e6 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -28,6 +28,17 @@ def verify_credentials(%{assigns: %{user: user}} = conn, params) do json(conn, account) end + def user(conn, %{"id" => id}) do + with %User{} = user <- Repo.get(User, id) do + account = AccountView.render("account.json", %{user: user}) + json(conn, account) + else + _e -> conn + |> put_status(404) + |> json(%{error: "Can't find user"}) + end + end + def masto_instance(conn, _params) do response = %{ uri: Web.base_url, diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 883fd56f4..0bd8e40c4 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -39,19 +39,6 @@ def user_fetcher(username) do post "/token", OAuthController, :token_exchange end - scope "/api/v1", Pleroma.Web.MastodonAPI do - pipe_through :api - get "/instance", MastodonAPIController, :masto_instance - post "/apps", MastodonAPIController, :create_app - - get "/timelines/public", MastodonAPIController, :public_timeline - - get "/statuses/:id", MastodonAPIController, :get_status - get "/statuses/:id/context", MastodonAPIController, :get_context - - get "/accounts/:id/statuses", MastodonAPIController, :user_statuses - end - scope "/api/v1", Pleroma.Web.MastodonAPI do pipe_through :authenticated_api @@ -70,6 +57,20 @@ def user_fetcher(username) do get "/notifications", MastodonAPIController, :notifications end + scope "/api/v1", Pleroma.Web.MastodonAPI do + pipe_through :api + get "/instance", MastodonAPIController, :masto_instance + post "/apps", MastodonAPIController, :create_app + + get "/timelines/public", MastodonAPIController, :public_timeline + + get "/statuses/:id", MastodonAPIController, :get_status + get "/statuses/:id/context", MastodonAPIController, :get_context + + get "/accounts/:id/statuses", MastodonAPIController, :user_statuses + get "/accounts/:id", MastodonAPIController, :user + end + scope "/api", Pleroma.Web do pipe_through :config diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 52415bb50..fcb3f80f5 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -198,4 +198,19 @@ test "returns the relationships for the current user", %{conn: conn} do assert other_user.id == relationship["id"] end end + + test "account fetching", %{conn: conn} do + user = insert(:user) + + conn = conn + |> get("/api/v1/accounts/#{user.id}") + + assert %{"id" => id} = json_response(conn, 200) + assert id == user.id + + conn = build_conn() + |> get("/api/v1/accounts/-1") + + assert %{"error" => "Can't find user"} = json_response(conn, 404) + end end