diff options
author | tusooa <tusooa@kazv.moe> | 2022-09-05 15:00:19 +0000 |
---|---|---|
committer | tusooa <tusooa@kazv.moe> | 2022-09-05 15:00:19 +0000 |
commit | 9874b4c985ea715a37cf2d2a5c8db2fb26e28f3a (patch) | |
tree | e495f10d3cac124d405cfe01015821a930f3a1df /lib/mix | |
parent | e06f2b9f5ea58c90cafd7864a66809fe8ea0a96f (diff) | |
parent | f8afba95b20670b5d6e93896ccd27bb3fca003a2 (diff) | |
download | pleroma-9874b4c985ea715a37cf2d2a5c8db2fb26e28f3a.tar.gz pleroma-9874b4c985ea715a37cf2d2a5c8db2fb26e28f3a.zip |
Merge branch 'develop' into 'from/upstream-develop/tusooa/2892-backup-scope'
# Conflicts:
# CHANGELOG.md
Diffstat (limited to 'lib/mix')
-rw-r--r-- | lib/mix/tasks/pleroma/database.ex | 3 | ||||
-rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 32 |
2 files changed, 33 insertions, 2 deletions
diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 6b8f0ef68..ed560c177 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -154,9 +154,8 @@ defmodule Mix.Tasks.Pleroma.Database do |> join(:inner, [a], o in Object, on: fragment( - "(?->>'id') = COALESCE((?)->'object'->> 'id', (?)->>'object')", + "(?->>'id') = associated_object_id((?))", o.data, - a.data, a.data ) ) 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 |