diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | docs/API/chats.md | 8 | ||||
-rw-r--r-- | lib/pleroma/web/api_spec/operations/chat_operation.ex | 24 | ||||
-rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/chat_controller.ex | 15 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
-rw-r--r-- | test/web/pleroma_api/controllers/chat_controller_test.exs | 18 |
6 files changed, 66 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc1750d1..6b0aa5363 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`. ### Added +- Pleroma API: Add chat deletion. - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). - Pleroma API: Importing the mutes users from CSV files. - Experimental websocket-based federation between Pleroma instances. diff --git a/docs/API/chats.md b/docs/API/chats.md index aa6119670..ea65ec7a3 100644 --- a/docs/API/chats.md +++ b/docs/API/chats.md @@ -211,6 +211,14 @@ Returned data: } ``` +### Deleting a chat + +Deleting a chat works like this: + +`DELETE /api/v1/pleroma/chats/:chat_id` + +Returned data is the deleted chat. + ### Deleting a chat message Deleting a chat message for given Chat id works like this: diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index 0dcfdb354..1883db7fc 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -196,6 +196,30 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do } end + def delete_operation do + %Operation{ + tags: ["chat"], + summary: "delete", + operationId: "ChatController.delete", + parameters: [ + Operation.parameter(:id, :path, :string, "The ID of the Chat") + ], + responses: %{ + 200 => + Operation.response( + "The deleted Chat", + "application/json", + Chat + ) + }, + security: [ + %{ + "oAuth" => ["write:chats"] + } + ] + } + end + def delete_message_operation do %Operation{ tags: ["chat"], diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index e667831c5..231d42c19 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -30,7 +30,8 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do :create, :mark_as_read, :mark_message_as_read, - :delete_message + :delete_message, + :delete ] ) @@ -43,6 +44,18 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ChatOperation + def delete(%{assigns: %{user: user}} = conn, %{id: chat_id}) do + with {:ok, chat} <- Chat.get_by_user_and_id(user, chat_id), + {:ok, chat} <- Pleroma.Repo.delete(chat) do + conn + |> put_view(ChatView) + |> render("show.json", chat: chat) + else + _e -> + {:error, :could_not_delete} + end + end + def delete_message(%{assigns: %{user: %{id: user_id} = user}} = conn, %{ message_id: message_id, id: chat_id diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e22b31b4c..158281f56 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -334,6 +334,7 @@ defmodule Pleroma.Web.Router do post("/chats/by-account-id/:id", ChatController, :create) get("/chats", ChatController, :index) get("/chats/:id", ChatController, :show) + delete("/chats/:id", ChatController, :delete) get("/chats/:id/messages", ChatController, :messages) post("/chats/:id/messages", ChatController, :post_chat_message) delete("/chats/:id/messages/:message_id", ChatController, :delete_message) diff --git a/test/web/pleroma_api/controllers/chat_controller_test.exs b/test/web/pleroma_api/controllers/chat_controller_test.exs index 11d5ba373..2b3845097 100644 --- a/test/web/pleroma_api/controllers/chat_controller_test.exs +++ b/test/web/pleroma_api/controllers/chat_controller_test.exs @@ -301,6 +301,24 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do end end + describe "DELETE /api/v1/pleroma/chats/:id" do + setup do: oauth_access(["write:chats"]) + + test "it deletes a chat", %{conn: conn, user: user} do + other_user = insert(:user) + {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) + + result = + conn + |> delete("/api/v1/pleroma/chats/#{chat.id}") + |> json_response_and_validate_schema(200) + + assert result["id"] == to_string(chat.id) + + refute Chat.get_by_id(chat.id) + end + end + describe "GET /api/v1/pleroma/chats" do setup do: oauth_access(["read:chats"]) |