summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2021-03-15 06:43:12 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2021-03-15 06:44:05 +0100
commitb1d4b2b81ec97143c41d16ac3f5bc2825b836f4b (patch)
tree6b010b361652eef44c16b60b6731b02eedb5ca23
parent13aa98d6899ba1e4a37fa1fd3ddb1ac35ea6e136 (diff)
Add support for actor icon being a list (Bridgy)
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex26
-rw-r--r--test/fixtures/bridgy/actor.json80
-rw-r--r--test/pleroma/web/activity_pub/activity_pub_test.exs27
3 files changed, 118 insertions, 15 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 5b45e2ca1..ff478f44c 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -1250,21 +1250,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
defp get_actor_url(_url), do: nil
- defp object_to_user_data(data) do
- avatar =
- data["icon"]["url"] &&
- %{
- "type" => "Image",
- "url" => [%{"href" => data["icon"]["url"]}]
- }
+ defp normalize_image(%{"url" => url}) do
+ %{
+ "type" => "Image",
+ "url" => [%{"href" => url}]
+ }
+ end
- banner =
- data["image"]["url"] &&
- %{
- "type" => "Image",
- "url" => [%{"href" => data["image"]["url"]}]
- }
+ defp normalize_image(urls) when is_list(urls), do: urls |> List.first() |> normalize_image()
+ defp normalize_image(_), do: nil
+ defp object_to_user_data(data) do
fields =
data
|> Map.get("attachment", [])
@@ -1308,13 +1304,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
ap_id: data["id"],
uri: get_actor_url(data["url"]),
ap_enabled: true,
- banner: banner,
+ banner: normalize_image(data["image"]),
fields: fields,
emoji: emojis,
is_locked: is_locked,
is_discoverable: is_discoverable,
invisible: invisible,
- avatar: avatar,
+ avatar: normalize_image(data["icon"]),
name: data["name"],
follower_address: data["followers"],
following_address: data["following"],
diff --git a/test/fixtures/bridgy/actor.json b/test/fixtures/bridgy/actor.json
new file mode 100644
index 000000000..5b2d8982b
--- /dev/null
+++ b/test/fixtures/bridgy/actor.json
@@ -0,0 +1,80 @@
+{
+ "id": "https://fed.brid.gy/jk.nipponalba.scot",
+ "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot",
+ "urls": [
+ {
+ "value": "https://jk.nipponalba.scot"
+ },
+ {
+ "value": "https://social.nipponalba.scot/jk"
+ },
+ {
+ "value": "https://px.nipponalba.scot/jk"
+ }
+ ],
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "type": "Person",
+ "name": "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿",
+ "image": [
+ {
+ "url": "https://jk.nipponalba.scot/images/profile.jpg",
+ "type": "Image",
+ "name": "profile picture"
+ }
+ ],
+ "tag": [
+ {
+ "type": "Tag",
+ "name": "Craft Beer"
+ },
+ {
+ "type": "Tag",
+ "name": "Single Malt Whisky"
+ },
+ {
+ "type": "Tag",
+ "name": "Homebrewing"
+ },
+ {
+ "type": "Tag",
+ "name": "Scottish Politics"
+ },
+ {
+ "type": "Tag",
+ "name": "Scottish History"
+ },
+ {
+ "type": "Tag",
+ "name": "Japanese History"
+ },
+ {
+ "type": "Tag",
+ "name": "Tech"
+ },
+ {
+ "type": "Tag",
+ "name": "Veganism"
+ },
+ {
+ "type": "Tag",
+ "name": "Cooking"
+ }
+ ],
+ "icon": [
+ {
+ "url": "https://jk.nipponalba.scot/images/profile.jpg",
+ "type": "Image",
+ "name": "profile picture"
+ }
+ ],
+ "preferredUsername": "jk.nipponalba.scot",
+ "summary": "",
+ "publicKey": {
+ "id": "jk.nipponalba.scot",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdarxwzxnNbJ2hneWOYHkYJowk\npyigQtxlUd0VjgSQHwxU9kWqfbrHBVADyTtcqi/4dAzQd3UnCI1TPNnn4LPZY9PW\noiWd3Zl1/EfLFxO7LU9GS7fcSLQkyj5JNhSlN3I8QPudZbybrgRDVZYooDe1D+52\n5KLGqC2ajrIVOiDRTQIDAQAB\n-----END PUBLIC KEY-----"
+ },
+ "inbox": "https://fed.brid.gy/jk.nipponalba.scot/inbox",
+ "outbox": "https://fed.brid.gy/jk.nipponalba.scot/outbox",
+ "following": "https://fed.brid.gy/jk.nipponalba.scot/following",
+ "followers": "https://fed.brid.gy/jk.nipponalba.scot/followers"
+}
diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs
index f4023856c..57f12f821 100644
--- a/test/pleroma/web/activity_pub/activity_pub_test.exs
+++ b/test/pleroma/web/activity_pub/activity_pub_test.exs
@@ -208,6 +208,33 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
assert user.name == "Bernie2020 group"
assert user.actor_type == "Group"
end
+
+ test "works for bridgy actors" do
+ user_id = "https://fed.brid.gy/jk.nipponalba.scot"
+
+ Tesla.Mock.mock(fn
+ %{method: :get, url: ^user_id} ->
+ %Tesla.Env{
+ status: 200,
+ body: File.read!("test/fixtures/bridgy/actor.json"),
+ headers: [{"content-type", "application/activity+json"}]
+ }
+ end)
+
+ {:ok, user} = ActivityPub.make_user_from_ap_id(user_id)
+
+ assert user.actor_type == "Person"
+
+ assert user.avatar == %{
+ "type" => "Image",
+ "url" => [%{"href" => "https://jk.nipponalba.scot/images/profile.jpg"}]
+ }
+
+ assert user.banner == %{
+ "type" => "Image",
+ "url" => [%{"href" => "https://jk.nipponalba.scot/images/profile.jpg"}]
+ }
+ end
end
test "it fetches the appropriate tag-restricted posts" do