diff options
| -rw-r--r-- | docs/api/pleroma_api.md | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/pleroma_api_controller.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
| -rw-r--r-- | test/web/pleroma_api/pleroma_api_controller_test.exs | 18 | 
4 files changed, 34 insertions, 0 deletions
diff --git a/docs/api/pleroma_api.md b/docs/api/pleroma_api.md index 590f2a3fb..b134b31a8 100644 --- a/docs/api/pleroma_api.md +++ b/docs/api/pleroma_api.md @@ -340,6 +340,12 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa  * Params: Like other timelines  * Response: JSON, statuses (200 - healthy, 503 unhealthy). +## `GET /api/v1/pleroma/conversations/:id` +### The conversation with the given ID. +* Method `GET` +* Authentication: required +* Params: None +* Response: JSON, statuses (200 - healthy, 503 unhealthy).  ## `PATCH /api/v1/pleroma/conversations/:id`  ### Update a conversation. Used to change the set of recipients. diff --git a/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex index 018564452..3175a99b1 100644 --- a/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/pleroma_api_controller.ex @@ -13,6 +13,15 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do    alias Pleroma.Web.MastodonAPI.ConversationView    alias Pleroma.Web.MastodonAPI.StatusView +  def conversation(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) do +    with %Participation{} = participation <- Participation.get(participation_id), +         true <- user.id == participation.user_id do +      conn +      |> put_view(ConversationView) +      |> render("participation.json", %{participation: participation, user: user}) +    end +  end +    def conversation_statuses(          %{assigns: %{user: user}} = conn,          %{"id" => participation_id} = params diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index c835f06b4..f0b6a02e9 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -265,6 +265,7 @@ defmodule Pleroma.Web.Router do      scope [] do        pipe_through(:oauth_write)        get("/conversations/:id/statuses", PleromaAPIController, :conversation_statuses) +      get("/conversations/:id", PleromaAPIController, :conversation)        patch("/conversations/:id", PleromaAPIController, :update_conversation)      end    end diff --git a/test/web/pleroma_api/pleroma_api_controller_test.exs b/test/web/pleroma_api/pleroma_api_controller_test.exs index 56bc1572c..ed6b79727 100644 --- a/test/web/pleroma_api/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/pleroma_api_controller_test.exs @@ -11,6 +11,24 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do    import Pleroma.Factory +  test "/api/v1/pleroma/conversations/:id", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, _activity} = +      CommonAPI.post(user, %{"status" => "Hi @#{other_user.nickname}!", "visibility" => "direct"}) + +    [participation] = Participation.for_user(other_user) + +    result = +      conn +      |> assign(:user, other_user) +      |> get("/api/v1/pleroma/conversations/#{participation.id}") +      |> json_response(200) + +    assert result["id"] == participation.id |> to_string() +  end +    test "/api/v1/pleroma/conversations/:id/statuses", %{conn: conn} do      user = insert(:user)      other_user = insert(:user)  | 
