forked from AkkomaGang/akkoma
Merge branch 'bugfix/apc2s_upload_activity' into 'develop'
bugfix: AP C2S activity with attachments See merge request pleroma/pleroma!2316
This commit is contained in:
commit
4d33e0bd50
3 changed files with 83 additions and 33 deletions
|
@ -205,16 +205,46 @@ def fix_context(object) do
|
||||||
|> Map.put("conversation", context)
|
|> Map.put("conversation", context)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp add_if_present(map, _key, nil), do: map
|
||||||
|
|
||||||
|
defp add_if_present(map, key, value) do
|
||||||
|
Map.put(map, key, value)
|
||||||
|
end
|
||||||
|
|
||||||
def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do
|
def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do
|
||||||
attachments =
|
attachments =
|
||||||
Enum.map(attachment, fn data ->
|
Enum.map(attachment, fn data ->
|
||||||
media_type = data["mediaType"] || data["mimeType"]
|
url =
|
||||||
href = data["url"] || data["href"]
|
cond do
|
||||||
url = [%{"type" => "Link", "mediaType" => media_type, "href" => href}]
|
is_list(data["url"]) -> List.first(data["url"])
|
||||||
|
is_map(data["url"]) -> data["url"]
|
||||||
|
true -> nil
|
||||||
|
end
|
||||||
|
|
||||||
data
|
media_type =
|
||||||
|> Map.put("mediaType", media_type)
|
cond do
|
||||||
|> Map.put("url", url)
|
is_map(url) && is_binary(url["mediaType"]) -> url["mediaType"]
|
||||||
|
is_binary(data["mediaType"]) -> data["mediaType"]
|
||||||
|
is_binary(data["mimeType"]) -> data["mimeType"]
|
||||||
|
true -> nil
|
||||||
|
end
|
||||||
|
|
||||||
|
href =
|
||||||
|
cond do
|
||||||
|
is_map(url) && is_binary(url["href"]) -> url["href"]
|
||||||
|
is_binary(data["url"]) -> data["url"]
|
||||||
|
is_binary(data["href"]) -> data["href"]
|
||||||
|
end
|
||||||
|
|
||||||
|
attachment_url =
|
||||||
|
%{"href" => href}
|
||||||
|
|> add_if_present("mediaType", media_type)
|
||||||
|
|> add_if_present("type", Map.get(url || %{}, "type"))
|
||||||
|
|
||||||
|
%{"url" => [attachment_url]}
|
||||||
|
|> add_if_present("mediaType", media_type)
|
||||||
|
|> add_if_present("type", data["type"])
|
||||||
|
|> add_if_present("name", data["name"])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
Map.put(object, "attachment", attachments)
|
Map.put(object, "attachment", attachments)
|
||||||
|
|
|
@ -1239,16 +1239,56 @@ test "POST /api/ap/upload_media", %{conn: conn} do
|
||||||
filename: "an_image.jpg"
|
filename: "an_image.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
conn =
|
object =
|
||||||
conn
|
conn
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> post("/api/ap/upload_media", %{"file" => image, "description" => desc})
|
|> post("/api/ap/upload_media", %{"file" => image, "description" => desc})
|
||||||
|
|> json_response(:created)
|
||||||
|
|
||||||
assert object = json_response(conn, :created)
|
|
||||||
assert object["name"] == desc
|
assert object["name"] == desc
|
||||||
assert object["type"] == "Document"
|
assert object["type"] == "Document"
|
||||||
assert object["actor"] == user.ap_id
|
assert object["actor"] == user.ap_id
|
||||||
|
assert [%{"href" => object_href, "mediaType" => object_mediatype}] = object["url"]
|
||||||
|
assert is_binary(object_href)
|
||||||
|
assert object_mediatype == "image/jpeg"
|
||||||
|
|
||||||
|
activity_request = %{
|
||||||
|
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||||
|
"type" => "Create",
|
||||||
|
"object" => %{
|
||||||
|
"type" => "Note",
|
||||||
|
"content" => "AP C2S test, attachment",
|
||||||
|
"attachment" => [object]
|
||||||
|
},
|
||||||
|
"to" => "https://www.w3.org/ns/activitystreams#Public",
|
||||||
|
"cc" => []
|
||||||
|
}
|
||||||
|
|
||||||
|
activity_response =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> post("/users/#{user.nickname}/outbox", activity_request)
|
||||||
|
|> json_response(:created)
|
||||||
|
|
||||||
|
assert activity_response["id"]
|
||||||
|
assert activity_response["object"]
|
||||||
|
assert activity_response["actor"] == user.ap_id
|
||||||
|
|
||||||
|
assert %Object{data: %{"attachment" => [attachment]}} =
|
||||||
|
Object.normalize(activity_response["object"])
|
||||||
|
|
||||||
|
assert attachment["type"] == "Document"
|
||||||
|
assert attachment["name"] == desc
|
||||||
|
|
||||||
|
assert [
|
||||||
|
%{
|
||||||
|
"href" => ^object_href,
|
||||||
|
"type" => "Link",
|
||||||
|
"mediaType" => ^object_mediatype
|
||||||
|
}
|
||||||
|
] = attachment["url"]
|
||||||
|
|
||||||
|
# Fails if unauthenticated
|
||||||
conn
|
conn
|
||||||
|> post("/api/ap/upload_media", %{"file" => image, "description" => desc})
|
|> post("/api/ap/upload_media", %{"file" => image, "description" => desc})
|
||||||
|> json_response(403)
|
|> json_response(403)
|
||||||
|
|
|
@ -1230,19 +1230,13 @@ test "it remaps video URLs as attachments if necessary" do
|
||||||
attachment = %{
|
attachment = %{
|
||||||
"type" => "Link",
|
"type" => "Link",
|
||||||
"mediaType" => "video/mp4",
|
"mediaType" => "video/mp4",
|
||||||
"href" =>
|
|
||||||
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
|
|
||||||
"mimeType" => "video/mp4",
|
|
||||||
"size" => 5_015_880,
|
|
||||||
"url" => [
|
"url" => [
|
||||||
%{
|
%{
|
||||||
"href" =>
|
"href" =>
|
||||||
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
|
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
|
||||||
"mediaType" => "video/mp4",
|
"mediaType" => "video/mp4"
|
||||||
"type" => "Link"
|
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"width" => 480
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert object.data["url"] ==
|
assert object.data["url"] ==
|
||||||
|
@ -2063,11 +2057,7 @@ test "returns modified object when attachment is map" do
|
||||||
%{
|
%{
|
||||||
"mediaType" => "video/mp4",
|
"mediaType" => "video/mp4",
|
||||||
"url" => [
|
"url" => [
|
||||||
%{
|
%{"href" => "https://peertube.moe/stat-480.mp4", "mediaType" => "video/mp4"}
|
||||||
"href" => "https://peertube.moe/stat-480.mp4",
|
|
||||||
"mediaType" => "video/mp4",
|
|
||||||
"type" => "Link"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -2085,23 +2075,13 @@ test "returns modified object when attachment is list" do
|
||||||
%{
|
%{
|
||||||
"mediaType" => "video/mp4",
|
"mediaType" => "video/mp4",
|
||||||
"url" => [
|
"url" => [
|
||||||
%{
|
%{"href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4"}
|
||||||
"href" => "https://pe.er/stat-480.mp4",
|
|
||||||
"mediaType" => "video/mp4",
|
|
||||||
"type" => "Link"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
"href" => "https://pe.er/stat-480.mp4",
|
|
||||||
"mediaType" => "video/mp4",
|
"mediaType" => "video/mp4",
|
||||||
"mimeType" => "video/mp4",
|
|
||||||
"url" => [
|
"url" => [
|
||||||
%{
|
%{"href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4"}
|
||||||
"href" => "https://pe.er/stat-480.mp4",
|
|
||||||
"mediaType" => "video/mp4",
|
|
||||||
"type" => "Link"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue