Use info.fields instead of source_data for remote users
[akkoma] / lib / pleroma / user / info.ex
index 9e4d381f8c372d67ed4e00abb2a685b5c21b0566..ada9fb6897317adb85603cf8efeb13db66552e50 100644 (file)
@@ -50,6 +50,7 @@ defmodule Pleroma.User.Info do
     field(:emoji, {:array, :map}, default: [])
     field(:pleroma_settings_store, :map, default: %{})
     field(:fields, {:array, :map}, default: [])
+    field(:raw_fields, {:array, :map}, default: [])
 
     field(:notification_settings, :map,
       default: %{
@@ -270,8 +271,10 @@ defmodule Pleroma.User.Info do
       :follower_count,
       :following_count,
       :hide_follows,
+      :fields,
       :hide_followers
     ])
+    |> validate_fields()
   end
 
   def profile_update(info, params) do
@@ -288,6 +291,7 @@ defmodule Pleroma.User.Info do
       :show_role,
       :skip_thread_containment,
       :fields,
+      :raw_fields,
       :pleroma_settings_store
     ])
     |> validate_fields()
@@ -308,11 +312,12 @@ defmodule Pleroma.User.Info do
   end
 
   defp valid_field?(%{"name" => name, "value" => value}) do
+    name_limit = Pleroma.Config.get([:instance, :account_field_name_length], 255)
     value_limit = Pleroma.Config.get([:instance, :account_field_value_length], 255)
 
     is_binary(name) &&
       is_binary(value) &&
-      String.length(name) <= 255 &&
+      String.length(name) <= name_limit &&
       String.length(value) <= value_limit
   end
 
@@ -414,7 +419,7 @@ defmodule Pleroma.User.Info do
 
   # ``fields`` is an array of mastodon profile field, containing ``{"name": "…", "value": "…"}``.
   # For example: [{"name": "Pronoun", "value": "she/her"}, …]
-  def fields(%{source_data: %{"attachment" => attachment}}) do
+  def fields(%{fields: [], source_data: %{"attachment" => attachment}}) do
     attachment
     |> Enum.filter(fn %{"type" => t} -> t == "PropertyValue" end)
     |> Enum.map(fn fields -> Map.take(fields, ["name", "value"]) end)