From 40d9d2098c85f1a8a6a5ff2b17adc78bbba3fd6c Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 18 Nov 2018 22:15:03 +0100 Subject: [PATCH] Fix user updating from AP. --- lib/pleroma/user.ex | 7 ++++++- lib/pleroma/user/info.ex | 6 ++++++ lib/pleroma/web/activity_pub/transmogrifier.ex | 4 ---- test/user_test.exs | 4 +++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e71b33304..565218b4c 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -128,12 +128,17 @@ def upgrade_changeset(struct, params \\ %{}) do params |> Map.put(:last_refreshed_at, NaiveDateTime.utc_now()) + info_cng = + struct.info + |> User.Info.user_upgrade(params[:info]) + struct - |> cast(params, [:bio, :name, :info, :follower_address, :avatar, :last_refreshed_at]) + |> cast(params, [:bio, :name, :follower_address, :avatar, :last_refreshed_at]) |> unique_constraint(:nickname) |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/) |> validate_length(:bio, max: 5000) |> validate_length(:name, max: 100) + |> put_embed(:info, info_cng) end def password_update_changeset(struct, params) do diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 4a4c620ed..b664af81c 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -90,4 +90,10 @@ def remote_user_creation(info, params) do info |> cast(params, [:source_data]) end + + # Receives data from user_data_from_user_object + def user_upgrade(info, params) do + info + |> cast(params, [:ap_enabled, :source_data, :banner, :locked]) + end end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 5864855b0..2d11c40c5 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -850,10 +850,6 @@ defp user_upgrade_task(user) do def upgrade_user_from_ap_id(ap_id, async \\ true) do with %User{local: false} = user <- User.get_by_ap_id(ap_id), {:ok, data} <- ActivityPub.fetch_and_prepare_user_from_ap_id(ap_id) do - data = - data - |> Map.put(:info, Map.merge(user.info, data[:info])) - already_ap = User.ap_enabled?(user) {:ok, user} = diff --git a/test/user_test.exs b/test/user_test.exs index f37f4521d..f345f001f 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -185,12 +185,14 @@ test "updates an existing user, if stale" do local: false, nickname: "admin@mastodon.example.org", ap_id: "http://mastodon.example.org/users/admin", - last_refreshed_at: a_week_ago + last_refreshed_at: a_week_ago, + info: %{} ) assert orig_user.last_refreshed_at == a_week_ago user = User.get_or_fetch_by_ap_id("http://mastodon.example.org/users/admin") + assert user.info.source_data["endpoints"] refute user.last_refreshed_at == orig_user.last_refreshed_at end