diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 45a39924b..0f9de25f9 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -49,7 +49,7 @@ defmodule Pleroma.User.Info do field(:mascot, :map, default: nil) field(:emoji, {:array, :map}, default: []) field(:pleroma_settings_store, :map, default: %{}) - field(:fields, {:array, :map}, default: []) + field(:fields, {:array, :map}, default: nil) field(:raw_fields, {:array, :map}, default: []) field(:notification_settings, :map, @@ -242,6 +242,14 @@ defmodule Pleroma.User.Info do end def remote_user_creation(info, params) do + cng = info + |> cast(params, [:fields]) + |> validate_fields(true) + fields = if cng.valid?, do: get_field(cng, :fields), else: [%{ + "name" => "Invalid fields", + "value" => "See full profile", + }] + info |> cast(params, [ :ap_enabled, @@ -256,13 +264,20 @@ defmodule Pleroma.User.Info do :hide_followers, :hide_follows, :follower_count, - :fields, :following_count ]) - |> validate_fields(true) + |> put_change(:fields, fields) end def user_upgrade(info, params, remote? \\ false) do + cng = info + |> cast(params, [:fields]) + |> validate_fields(remote?) + fields = if cng.valid?, do: get_field(cng, :fields), else: [%{ + "name" => "Invalid fields", + "value" => "See full profile", + }] + info |> cast(params, [ :ap_enabled, @@ -273,10 +288,9 @@ defmodule Pleroma.User.Info do :follower_count, :following_count, :hide_follows, - :fields, :hide_followers ]) - |> validate_fields(remote?) + |> put_change(:fields, fields) end def profile_update(info, params) do @@ -422,7 +436,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(%{fields: [], source_data: %{"attachment" => attachment}}) do + def fields(%{fields: nil, source_data: %{"attachment" => attachment}}) do limit = Pleroma.Config.get([:instance, :max_remote_account_fields], 0) attachment @@ -431,6 +445,8 @@ defmodule Pleroma.User.Info do |> Enum.take(limit) end + def fields(%{fields: nil}), do: [] + def fields(%{fields: fields}), do: fields def follow_information_update(info, params) do