Use info.fields instead of source_data for remote users
[akkoma] / lib / pleroma / web / activity_pub / transmogrifier.ex
index 0fcc81bf3c03da529c95ea3e6c2b790d6ecc2de6..2be2e3294682438edf4cdd605440d301b6be4205 100644 (file)
@@ -598,11 +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"]) || []
+
+      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, fields: fields})
 
       actor
       |> User.upgrade_changeset(update_data)