Browse Source

Add media upload endpoint.

tags/v0.9.9
Roger Braun 6 years ago
parent
commit
641c24cdd4
4 changed files with 29 additions and 0 deletions
  1. +9
    -0
      lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
  2. +2
    -0
      lib/pleroma/web/router.ex
  3. +14
    -0
      test/web/mastodon_api/mastodon_api_controller_test.exs
  4. +4
    -0
      test/web/mastodon_api/status_view_test.exs

+ 9
- 0
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex View 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, [])


+ 2
- 0
lib/pleroma/web/router.ex View 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


+ 14
- 0
test/web/mastodon_api/mastodon_api_controller_test.exs View 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

+ 4
- 0
test/web/mastodon_api/status_view_test.exs View 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

Loading…
Cancel
Save