aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-08-12 13:58:04 +0200
committerlain <lain@soykaf.club>2019-08-12 13:58:04 +0200
commit60231ec7bd0af993dc19f69a57b261b3b4167636 (patch)
treeaba2ee915d8c87bae5b52d4abf80d1b14f8a0d49
parent23c46f7e72701b773d87b825526450e5f4ec6322 (diff)
downloadpleroma-60231ec7bd0af993dc19f69a57b261b3b4167636.tar.gz
Conversation: Add endpoint to get a conversation by id.
-rw-r--r--docs/api/pleroma_api.md6
-rw-r--r--lib/pleroma/web/pleroma_api/pleroma_api_controller.ex9
-rw-r--r--lib/pleroma/web/router.ex1
-rw-r--r--test/web/pleroma_api/pleroma_api_controller_test.exs18
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)