forked from AkkomaGang/akkoma
Merge branch 'fix/issue-1729' into 'develop'
Only update follower/following stats for actor types of users and bots. Closes #1565 and #1729 See merge request pleroma/pleroma!2464
This commit is contained in:
commit
c297667f16
2 changed files with 69 additions and 8 deletions
|
@ -1530,21 +1530,34 @@ def fetch_follow_information_for_user(user) do
|
||||||
defp normalize_counter(counter) when is_integer(counter), do: counter
|
defp normalize_counter(counter) when is_integer(counter), do: counter
|
||||||
defp normalize_counter(_), do: 0
|
defp normalize_counter(_), do: 0
|
||||||
|
|
||||||
defp maybe_update_follow_information(data) do
|
def maybe_update_follow_information(user_data) do
|
||||||
with {:enabled, true} <- {:enabled, Config.get([:instance, :external_user_synchronization])},
|
with {:enabled, true} <- {:enabled, Config.get([:instance, :external_user_synchronization])},
|
||||||
{:ok, info} <- fetch_follow_information_for_user(data) do
|
{_, true} <- {:user_type_check, user_data[:type] in ["Person", "Service"]},
|
||||||
info = Map.merge(data[:info] || %{}, info)
|
{_, true} <-
|
||||||
Map.put(data, :info, info)
|
{:collections_available,
|
||||||
|
!!(user_data[:following_address] && user_data[:follower_address])},
|
||||||
|
{:ok, info} <-
|
||||||
|
fetch_follow_information_for_user(user_data) do
|
||||||
|
info = Map.merge(user_data[:info] || %{}, info)
|
||||||
|
|
||||||
|
user_data
|
||||||
|
|> Map.put(:info, info)
|
||||||
else
|
else
|
||||||
|
{:user_type_check, false} ->
|
||||||
|
user_data
|
||||||
|
|
||||||
|
{:collections_available, false} ->
|
||||||
|
user_data
|
||||||
|
|
||||||
{:enabled, false} ->
|
{:enabled, false} ->
|
||||||
data
|
user_data
|
||||||
|
|
||||||
e ->
|
e ->
|
||||||
Logger.error(
|
Logger.error(
|
||||||
"Follower/Following counter update for #{data.ap_id} failed.\n" <> inspect(e)
|
"Follower/Following counter update for #{user_data.ap_id} failed.\n" <> inspect(e)
|
||||||
)
|
)
|
||||||
|
|
||||||
data
|
user_data
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.Federator
|
alias Pleroma.Web.Federator
|
||||||
|
|
||||||
|
import ExUnit.CaptureLog
|
||||||
|
import Mock
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import Tesla.Mock
|
import Tesla.Mock
|
||||||
import Mock
|
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
@ -2403,4 +2404,51 @@ defp private_messages(_) do
|
||||||
u3: %{r1: r3_1.id, r2: r3_2.id},
|
u3: %{r1: r3_1.id, r2: r3_2.id},
|
||||||
u4: %{r1: r4_1.id}}
|
u4: %{r1: r4_1.id}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "maybe_update_follow_information/1" do
|
||||||
|
setup do
|
||||||
|
clear_config([:instance, :external_user_synchronization], true)
|
||||||
|
|
||||||
|
user = %{
|
||||||
|
local: false,
|
||||||
|
ap_id: "https://gensokyo.2hu/users/raymoo",
|
||||||
|
following_address: "https://gensokyo.2hu/users/following",
|
||||||
|
follower_address: "https://gensokyo.2hu/users/followers",
|
||||||
|
type: "Person"
|
||||||
|
}
|
||||||
|
|
||||||
|
%{user: user}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "logs an error when it can't fetch the info", %{user: user} do
|
||||||
|
assert capture_log(fn ->
|
||||||
|
ActivityPub.maybe_update_follow_information(user)
|
||||||
|
end) =~ "Follower/Following counter update for #{user.ap_id} failed"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "just returns the input if the user type is Application", %{
|
||||||
|
user: user
|
||||||
|
} do
|
||||||
|
user =
|
||||||
|
user
|
||||||
|
|> Map.put(:type, "Application")
|
||||||
|
|
||||||
|
refute capture_log(fn ->
|
||||||
|
assert ^user = ActivityPub.maybe_update_follow_information(user)
|
||||||
|
end) =~ "Follower/Following counter update for #{user.ap_id} failed"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it just returns the input if the user has no following/follower addresses", %{
|
||||||
|
user: user
|
||||||
|
} do
|
||||||
|
user =
|
||||||
|
user
|
||||||
|
|> Map.put(:following_address, nil)
|
||||||
|
|> Map.put(:follower_address, nil)
|
||||||
|
|
||||||
|
refute capture_log(fn ->
|
||||||
|
assert ^user = ActivityPub.maybe_update_follow_information(user)
|
||||||
|
end) =~ "Follower/Following counter update for #{user.ap_id} failed"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue