Add media upload endpoint.
authorRoger Braun <roger@rogerbraun.net>
Thu, 14 Sep 2017 06:08:32 +0000 (08:08 +0200)
committerRoger Braun <roger@rogerbraun.net>
Thu, 14 Sep 2017 06:08:32 +0000 (08:08 +0200)
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/router.ex
test/web/mastodon_api/mastodon_api_controller_test.exs
test/web/mastodon_api/status_view_test.exs

index f17cf40e6f997f3af467c87edb3a613ac3a028e8..b537bcf71760525e0d4675b4508ceac6d7aeef10 100644 (file)
@@ -199,6 +199,15 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     render conn, AccountView, "relationships.json", %{user: user, targets: targets}
   end
 
+  def upload(%{assigns: %{user: user}} = conn, %{"file" => file}) do
+    with {:ok, object} <- ActivityPub.upload(file) do
+      data = object.data
+      |> Map.put("id", object.id)
+
+      render conn, StatusView, "attachment.json", %{attachment: data}
+    end
+  end
+
   def empty_array(conn, _) do
     Logger.debug("Unimplemented, returning an empty array")
     json(conn, [])
index 0bd8e40c4a28c251cc93617a6ac081c2676058db..93b31aba5a93466c7a0887f8c7a483afcc05c478 100644 (file)
@@ -55,6 +55,8 @@ defmodule Pleroma.Web.Router do
     post "/statuses/:id/unfavourite", MastodonAPIController, :unfav_status
 
     get "/notifications", MastodonAPIController, :notifications
+
+    post "/media", MastodonAPIController, :upload
   end
 
   scope "/api/v1", Pleroma.Web.MastodonAPI do
index fcb3f80f55ccf2f27de1061e4f9d76e1f5e15d8c..d88714cf2c71efbd6f0fddac99a6b542e7f5584c 100644 (file)
@@ -213,4 +213,18 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
 
     assert %{"error" => "Can't find user"} = json_response(conn, 404)
   end
+
+  test "media upload", %{conn: conn} do
+    file = %Plug.Upload{content_type: "image/jpg", path: Path.absname("test/fixtures/image.jpg"), filename: "an_image.jpg"}
+
+    user = insert(:user)
+
+    conn = conn
+    |> assign(:user, user)
+    |> post("/api/v1/media", %{"file" => file})
+
+    assert media = json_response(conn, 200)
+
+    assert media["type"] == "image"
+  end
 end
index 198ee72a88c58a719f75d52c6359ed803e1b51a9..836a47db05418ef5d9596fe2497a7a1a34eeb41e 100644 (file)
@@ -76,5 +76,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
     }
 
     assert expected == StatusView.render("attachment.json", %{attachment: object})
+
+    # If theres a "id", use that instead of the generated one
+    object = Map.put(object, "id", 2)
+    assert %{id: 2} = StatusView.render("attachment.json", %{attachment: object})
   end
 end