aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2018-06-19 00:36:40 +0000
committerWilliam Pitcock <nenolod@dereferenced.org>2018-06-19 00:59:26 +0000
commit320ca7b11e163d059a3f181e2d6eb5ea300f5b55 (patch)
treedb2b94edbce250dd4ccfa782ac864bc5176fdee2 /lib
parent25946f772d1c1d3ff8a4d2c70824654a9c22fc23 (diff)
downloadpleroma-320ca7b11e163d059a3f181e2d6eb5ea300f5b55.tar.gz
user: when processing a block in User.block(), ensure all follow relationships are broken
this is needed for activitypub conformance ref #213
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex21
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index b27397e13..bfa5d78a4 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -505,12 +505,25 @@ defmodule Pleroma.User do
Repo.all(q)
end
- def block(user, %{ap_id: ap_id}) do
- blocks = user.info["blocks"] || []
+ def block(blocker, %User{ap_id: ap_id} = blocked) do
+ # sever any follow relationships to prevent leaks per activitypub (Pleroma issue #213)
+ blocker =
+ if following?(blocker, blocked) do
+ {:ok, blocker, _} = unfollow(blocker, blocked)
+ blocker
+ else
+ blocker
+ end
+
+ if following?(blocked, blocker) do
+ unfollow(blocked, blocker)
+ end
+
+ blocks = blocker.info["blocks"] || []
new_blocks = Enum.uniq([ap_id | blocks])
- new_info = Map.put(user.info, "blocks", new_blocks)
+ new_info = Map.put(blocker.info, "blocks", new_blocks)
- cs = User.info_changeset(user, %{info: new_info})
+ cs = User.info_changeset(blocker, %{info: new_info})
update_and_set_cache(cs)
end