diff options
author | floatingghost <hannah@coffee-and-dreams.uk> | 2022-07-23 18:58:45 +0000 |
---|---|---|
committer | Tusooa Zhu <tusooa@kazv.moe> | 2022-08-03 01:07:53 -0400 |
commit | f2a9285ff089fbae043091898fb016f4aa16f689 (patch) | |
tree | 91c3b7ad7fe73d06db3928d1d4e01665ac59badf /lib/mix | |
parent | b2ba307f4dc7047ae2b21e2078ba741e2da11cdf (diff) | |
download | pleroma-f2a9285ff089fbae043091898fb016f4aa16f689.tar.gz |
bugfix/follow-state (#104)
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/104
Diffstat (limited to 'lib/mix')
-rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 96d4eb90b..50ffb7f27 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -421,6 +421,38 @@ defmodule Mix.Tasks.Pleroma.User do |> Stream.run() end + def run(["fix_follow_state", local_user, remote_user]) do + start_pleroma() + + with {:local, %User{} = local} <- {:local, User.get_by_nickname(local_user)}, + {:remote, %User{} = remote} <- {:remote, User.get_by_nickname(remote_user)}, + {:follow_data, %{data: %{"state" => request_state}}} <- + {:follow_data, Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(local, remote)} do + calculated_state = User.following?(local, remote) + + shell_info( + "Request state is #{request_state}, vs calculated state of following=#{calculated_state}" + ) + + if calculated_state == false && request_state == "accept" do + shell_info("Discrepancy found, fixing") + Pleroma.Web.CommonAPI.reject_follow_request(local, remote) + shell_info("Relationship fixed") + else + shell_info("No discrepancy found") + end + else + {:local, _} -> + shell_error("No local user #{local_user}") + + {:remote, _} -> + shell_error("No remote user #{remote_user}") + + {:follow_data, _} -> + shell_error("No follow data for #{local_user} and #{remote_user}") + end + end + defp set_moderator(user, value) do {:ok, user} = user |