diff --git a/lib/pleroma/web/api_spec/operations/media_operation.ex b/lib/pleroma/web/api_spec/operations/media_operation.ex index 2b5ec2585..a94606add 100644 --- a/lib/pleroma/web/api_spec/operations/media_operation.ex +++ b/lib/pleroma/web/api_spec/operations/media_operation.ex @@ -83,7 +83,8 @@ defmodule Pleroma.Web.ApiSpec.MediaOperation do security: [%{"oAuth" => ["write:media"]}], parameters: [id_param()], responses: %{ - 200 => Operation.response("Media", "application/json", Attachment), + 200 => Operation.response("Media", "text/plain", nil), + 400 => Operation.response("Media", "application/json", ApiError) } } end diff --git a/lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex index 7e1b9c338..d9534f2e6 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex @@ -397,7 +397,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaUtilOperation do def uploaded_media_operation do %Operation{ tags: ["Media"], - summary: "List uploaded media", + summary: "List media uploaded by the current user", security: [%{"oAuth" => ["read:accounts"]}], operationId: "PleromaAPI.UtilController.uploaded_media", responses: %{ @@ -411,9 +411,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaUtilOperation do example: ["foo@example.org"] } } - }), - 400 => Operation.response("Error", "application/json", ApiError), - 403 => Operation.response("Error", "application/json", ApiError) + }) } } end diff --git a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex index 8dd9a62b7..cb72b4d13 100644 --- a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex @@ -79,6 +79,7 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do end end + @doc "DELETE /api/v1/media/:id" def delete( %{ assigns: %{user: user}, @@ -88,11 +89,17 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do ) do with %Object{} = object <- Object.get_by_id(id), :ok <- Object.authorize_access(object, user), + href <- object.data["url"] |> List.first |> Map.get("href"), + {:used, []} <- {:used, Pleroma.Upload.list_objects_with_attachment(href)}, {:ok, _, _} <- Object.delete(object) do - conn |> put_resp_header("content-type", "text/plain") |> send_resp(200, "") + else + {:used, list} -> + conn + |> put_status(:bad_request) + |> json(%{error: "Refusing to delete attachment that is still used by #{Enum.count(list)} objects"}) end end diff --git a/lib/pleroma/web/pleroma_api/controllers/util_controller.ex b/lib/pleroma/web/pleroma_api/controllers/util_controller.ex index c453e60b7..597f8c3e6 100644 --- a/lib/pleroma/web/pleroma_api/controllers/util_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/util_controller.ex @@ -286,7 +286,12 @@ defmodule Pleroma.Web.PleromaAPI.UtilController do Pleroma.Upload.list_uploaded_by(user, 0, 50) |> Enum.map( fn %Pleroma.Object{ id: id, data: %{ "url" => [ mediaUrl ], "name" => name }, inserted_at: uploaded } -> - Map.merge(%{ id: id, uploaded: uploaded, name: name }, mediaUrl) |> Map.drop(["type"]) end + %{ + uploaded: uploaded, attachment: %{ + description: name, id: to_string(id), url: mediaUrl["href"], pleroma: %{ mime_type: mediaUrl["mediaType"] }, type: "unknown" + } + } + end ) json(conn, result)