@@ -1250,21 +1250,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||||
defp get_actor_url(_url), do: nil | 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 = | fields = | ||||
data | data | ||||
|> Map.get("attachment", []) | |> Map.get("attachment", []) | ||||
@@ -1308,13 +1304,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||||
ap_id: data["id"], | ap_id: data["id"], | ||||
uri: get_actor_url(data["url"]), | uri: get_actor_url(data["url"]), | ||||
ap_enabled: true, | ap_enabled: true, | ||||
banner: banner, | |||||
banner: normalize_image(data["image"]), | |||||
fields: fields, | fields: fields, | ||||
emoji: emojis, | emoji: emojis, | ||||
is_locked: is_locked, | is_locked: is_locked, | ||||
is_discoverable: is_discoverable, | is_discoverable: is_discoverable, | ||||
invisible: invisible, | invisible: invisible, | ||||
avatar: avatar, | |||||
avatar: normalize_image(data["icon"]), | |||||
name: data["name"], | name: data["name"], | ||||
follower_address: data["followers"], | follower_address: data["followers"], | ||||
following_address: data["following"], | following_address: data["following"], | ||||
@@ -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" | |||||
} |
@@ -208,6 +208,33 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||||
assert user.name == "Bernie2020 group" | assert user.name == "Bernie2020 group" | ||||
assert user.actor_type == "Group" | assert user.actor_type == "Group" | ||||
end | 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 | end | ||||
test "it fetches the appropriate tag-restricted posts" do | test "it fetches the appropriate tag-restricted posts" do | ||||