AP C2S, uploadMedia: Add support for object parameter

This commit is contained in:
Haelwenn (lanodan) Monnier 2019-10-07 13:36:39 +02:00
parent 93bdc55306
commit 6d0d6a654e
No known key found for this signature in database
GPG Key ID: D5B7A8E43C997DEE
2 changed files with 30 additions and 4 deletions

View File

@ -479,17 +479,19 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
{new_user, for_user}
end
# TODO: Add support for "object" field
@doc """
Endpoint based on <https://www.w3.org/wiki/SocialCG/ActivityPub/MediaUpload>
Parameters:
- (required) `file`: data of the media
- (optionnal) `object`: object which will be used as a base for the response
- (optionnal) `description`: description of the media, intended for accessibility
Response:
- HTTP Code: 201 Created
- HTTP Body: ActivityPub object to be inserted into another's `attachment` field
Note: Will not point to a URL with a `Location` header because no standalone Activity has been created
"""
def upload_media(%{assigns: %{user: user}} = conn, %{"file" => file} = data) do
with {:ok, object} <-
@ -498,11 +500,24 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
actor: User.ap_id(user),
description: Map.get(data, "description")
) do
Logger.debug(inspect(object))
object_data =
(data["object"] || %{})
|> Map.drop([
"attachment",
"attributedTo",
"audience",
"url",
"id",
"to",
"bto",
"cc",
"bcc"
])
|> Map.merge(object.data)
conn
|> put_status(:created)
|> json(object.data)
|> json(object_data)
end
end
end

View File

@ -942,15 +942,26 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
filename: "an_image.jpg"
}
base_object = %{
"generator" => "#cofe machine",
"id" => "http://invalid.host/foo/bar"
}
conn =
conn
|> assign(:user, user)
|> post("/api/ap/upload_media", %{"file" => image, "description" => desc})
|> post("/api/ap/upload_media", %{
"file" => image,
"description" => desc,
"object" => base_object
})
assert object = json_response(conn, :created)
assert object["name"] == desc
assert object["type"] == "Document"
assert object["actor"] == user.ap_id
assert object["generator"] == base_object["generator"]
refute object["id"] == base_object["id"]
end
end
end