Use info.fields instead of source_data for remote users
[akkoma] / lib / pleroma / web / activity_pub / transmogrifier.ex
index 225c34875841a20ecc9303a855c245839bcbc6f9..2be2e3294682438edf4cdd605440d301b6be4205 100644 (file)
@@ -598,13 +598,17 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
 
       banner = new_user_data[:info][:banner]
       locked = new_user_data[:info][:locked] || false
-      attachment = get_in(new_user_data, [:info, "source_data", "attachment"])
+      attachment = get_in(new_user_data, [:info, :source_data, "attachment"]) || []
+
+      fields =
+        attachment
+        |> Enum.filter(fn %{"type" => t} -> t == "PropertyValue" end)
+        |> Enum.map(fn fields -> Map.take(fields, ["name", "value"]) end)
 
       update_data =
         new_user_data
         |> Map.take([:name, :bio, :avatar])
-        |> Map.put(:info, %{banner: banner, locked: locked})
-        |> Map.put(:info, %{"banner" => banner, "locked" => locked, "source_data" => source_data})
+        |> Map.put(:info, %{banner: banner, locked: locked, fields: fields})
 
       actor
       |> User.upgrade_changeset(update_data)