aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2020-09-10 01:44:32 -0500
committerAlex Gleason <alex@alexgleason.me>2020-09-11 14:11:00 -0500
commite229536e5cca65d811f85d25c86bf3c92b3d8c45 (patch)
tree6625c6441e7c990dc4993c1c9c807903e87c7c7e
parent67726453f85eb5bb51bf82e7decf23a4f1d184af (diff)
downloadpleroma-e229536e5cca65d811f85d25c86bf3c92b3d8c45.tar.gz
Chat Moderation: use explicit `sender` and `recipient` fields
-rw-r--r--docs/API/admin_api.md14
-rw-r--r--lib/pleroma/web/admin_api/controllers/admin_api_controller.ex5
-rw-r--r--lib/pleroma/web/admin_api/controllers/chat_controller.ex4
-rw-r--r--lib/pleroma/web/admin_api/views/chat_view.ex30
-rw-r--r--test/web/admin_api/controllers/chat_controller_test.exs3
5 files changed, 48 insertions, 8 deletions
diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md
index 7bdbd17aa..eadb455ee 100644
--- a/docs/API/admin_api.md
+++ b/docs/API/admin_api.md
@@ -1346,7 +1346,12 @@ Loads json generated from `config/descriptions.exs`.
```json
[
{
- "account": {
+ "sender": {
+ "id": "someflakeid",
+ "username": "somenick",
+ ...
+ },
+ "receiver": {
"id": "someflakeid",
"username": "somenick",
...
@@ -1369,7 +1374,12 @@ Loads json generated from `config/descriptions.exs`.
```json
{
- "account": {
+ "sender": {
+ "id": "someflakeid",
+ "username": "somenick",
+ ...
+ },
+ "receiver": {
"id": "someflakeid",
"username": "somenick",
...
diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
index fccdbabb4..d5713c3dd 100644
--- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
@@ -21,11 +21,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
alias Pleroma.Web.AdminAPI.ModerationLogView
alias Pleroma.Web.AdminAPI.Search
alias Pleroma.Web.Endpoint
- alias Pleroma.Web.PleromaAPI
alias Pleroma.Web.Router
- require Logger
-
@users_page_size 50
plug(
@@ -270,7 +267,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|> Pleroma.Repo.all()
conn
- |> put_view(PleromaAPI.ChatView)
+ |> put_view(AdminAPI.ChatView)
|> render("index.json", chats: chats)
else
_ -> {:error, :not_found}
diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex
index 61d45b970..967600d69 100644
--- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex
@@ -11,9 +11,9 @@ defmodule Pleroma.Web.AdminAPI.ChatController do
alias Pleroma.ModerationLog
alias Pleroma.Pagination
alias Pleroma.Plugs.OAuthScopesPlug
+ alias Pleroma.Web.AdminAPI
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView
- alias Pleroma.Web.PleromaAPI.ChatView
require Logger
@@ -78,7 +78,7 @@ defmodule Pleroma.Web.AdminAPI.ChatController do
def show(conn, %{id: id}) do
with %Chat{} = chat <- Chat.get_by_id(id) do
conn
- |> put_view(ChatView)
+ |> put_view(AdminAPI.ChatView)
|> render("show.json", chat: chat)
end
end
diff --git a/lib/pleroma/web/admin_api/views/chat_view.ex b/lib/pleroma/web/admin_api/views/chat_view.ex
new file mode 100644
index 000000000..847df1423
--- /dev/null
+++ b/lib/pleroma/web/admin_api/views/chat_view.ex
@@ -0,0 +1,30 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.AdminAPI.ChatView do
+ use Pleroma.Web, :view
+
+ alias Pleroma.Chat
+ alias Pleroma.User
+ alias Pleroma.Web.MastodonAPI
+ alias Pleroma.Web.PleromaAPI
+
+ def render("index.json", %{chats: chats} = opts) do
+ render_many(chats, __MODULE__, "show.json", Map.delete(opts, :chats))
+ end
+
+ def render("show.json", %{chat: %Chat{user_id: user_id}} = opts) do
+ user = User.get_by_id(user_id)
+ sender = MastodonAPI.AccountView.render("show.json", user: user, skip_visibility_check: true)
+
+ serialized_chat = PleromaAPI.ChatView.render("show.json", opts)
+
+ serialized_chat
+ |> Map.put(:sender, sender)
+ |> Map.put(:receiver, serialized_chat[:account])
+ |> Map.delete(:account)
+ end
+
+ def render(view, opts), do: PleromaAPI.ChatView.render(view, opts)
+end
diff --git a/test/web/admin_api/controllers/chat_controller_test.exs b/test/web/admin_api/controllers/chat_controller_test.exs
index bca9d440d..840f18aa2 100644
--- a/test/web/admin_api/controllers/chat_controller_test.exs
+++ b/test/web/admin_api/controllers/chat_controller_test.exs
@@ -123,6 +123,9 @@ defmodule Pleroma.Web.AdminAPI.ChatControllerTest do
|> json_response_and_validate_schema(200)
assert result["id"] == to_string(chat.id)
+ assert %{} = result["sender"]
+ assert %{} = result["receiver"]
+ refute result["account"]
end
end
end