summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-07-13 23:56:10 +0300
committerrinpatch <rinpatch@sdf.org>2019-07-13 23:56:10 +0300
commite5b850a99115859ceb028c3891f59d5e6ffd5d56 (patch)
treee1d539550d194a1f78be86e27a9c08764a43eaff
parente8fa477793e1395664f79d572800f11994cdd38d (diff)
downloadpleroma-e5b850a99115859ceb028c3891f59d5e6ffd5d56.tar.gz
pleroma-e5b850a99115859ceb028c3891f59d5e6ffd5d56.zip
Refactor fetching follow information to a separate function
-rw-r--r--lib/pleroma/user/info.ex1
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex51
2 files changed, 34 insertions, 18 deletions
diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex
index 2d8395b73..67e8801ea 100644
--- a/lib/pleroma/user/info.ex
+++ b/lib/pleroma/user/info.ex
@@ -16,6 +16,7 @@ defmodule Pleroma.User.Info do
field(:source_data, :map, default: %{})
field(:note_count, :integer, default: 0)
field(:follower_count, :integer, default: 0)
+ # Should be filled in only for remote users
field(:following_count, :integer, default: nil)
field(:locked, :boolean, default: false)
field(:confirmation_pending, :boolean, default: false)
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 0a22fe223..eadd335ca 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -1013,17 +1013,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
{:ok, user_data}
end
- defp maybe_update_follow_information(data) do
- with {:enabled, true} <-
- {:enabled, Pleroma.Config.get([:instance, :external_user_synchronization])},
- {:ok, following_data} <-
- Fetcher.fetch_and_contain_remote_object_from_id(data.following_address),
- following_count <- following_data["totalItems"],
- hide_follows <- collection_private?(following_data),
+ def fetch_follow_information_for_user(user) do
+ with {:ok, following_data} <-
+ Fetcher.fetch_and_contain_remote_object_from_id(user.following_address),
+ following_count when is_integer(following_count) <- following_data["totalItems"],
+ {:ok, hide_follows} <- collection_private(following_data),
{:ok, followers_data} <-
- Fetcher.fetch_and_contain_remote_object_from_id(data.follower_address),
- followers_count <- followers_data["totalItems"],
- hide_followers <- collection_private?(followers_data) do
+ Fetcher.fetch_and_contain_remote_object_from_id(user.follower_address),
+ followers_count when is_integer(followers_count) <- followers_data["totalItems"],
+ {:ok, hide_followers} <- collection_private(followers_data) do
info = %{
"hide_follows" => hide_follows,
"follower_count" => followers_count,
@@ -1031,8 +1029,22 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
"hide_followers" => hide_followers
}
- info = Map.merge(data.info, info)
- Map.put(data, :info, info)
+ info = Map.merge(user.info, info)
+ {:ok, Map.put(user, :info, info)}
+ else
+ {:error, _} = e ->
+ e
+
+ e ->
+ {:error, e}
+ end
+ end
+
+ defp maybe_update_follow_information(data) do
+ with {:enabled, true} <-
+ {:enabled, Pleroma.Config.get([:instance, :external_user_synchronization])},
+ {:ok, data} <- fetch_follow_information_for_user(data) do
+ data
else
{:enabled, false} ->
data
@@ -1046,19 +1058,22 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end
- defp collection_private?(data) do
+ defp collection_private(data) do
if is_map(data["first"]) and
data["first"]["type"] in ["CollectionPage", "OrderedCollectionPage"] do
- false
+ {:ok, false}
else
with {:ok, _data} <- Fetcher.fetch_and_contain_remote_object_from_id(data["first"]) do
- false
+ {:ok, false}
else
{:error, {:ok, %{status: code}}} when code in [401, 403] ->
- true
+ {:ok, true}
+
+ {:error, _} = e ->
+ e
- _e ->
- false
+ e ->
+ {:error, e}
end
end
end