Commit 1d88abf2 authored by kaniini's avatar kaniini

user: do not allow refollowing somebody who has blocked a user

parent 8d2ee70d
......@@ -170,25 +170,30 @@ def register_changeset(struct, params \\ %{}) do
def follow(%User{} = follower, %User{info: info} = followed) do
ap_followers = followed.follower_address
if following?(follower, followed) or info["deactivated"] do
{:error, "Could not follow user: #{followed.nickname} is already on your list."}
else
if !followed.local && follower.local && !ap_enabled?(followed) do
Websub.subscribe(follower, followed)
end
cond do
following?(follower, followed) or info["deactivated"] ->
{:error, "Could not follow user: #{followed.nickname} is already on your list."}
following =
[ap_followers | follower.following]
|> Enum.uniq()
blocks?(followed, follower) ->
{:error, "Could not follow user: #{followed.nickname} blocked you."}
follower =
follower
|> follow_changeset(%{following: following})
|> update_and_set_cache
true ->
if !followed.local && follower.local && !ap_enabled?(followed) do
Websub.subscribe(follower, followed)
end
following =
[ap_followers | follower.following]
|> Enum.uniq()
{:ok, _} = update_follower_count(followed)
follower =
follower
|> follow_changeset(%{following: following})
|> update_and_set_cache
follower
{:ok, _} = update_follower_count(followed)
follower
end
end
......
......@@ -46,6 +46,15 @@ test "can't follow a deactivated users" do
{:error, _} = User.follow(user, followed)
end
test "can't follow a user who blocked us" do
blocker = insert(:user)
blockee = insert(:user)
{:ok, blocker} = User.block(blocker, blockee)
{:error, _} = User.follow(blockee, blocker)
end
# This is a somewhat useless test.
# test "following a remote user will ensure a websub subscription is present" do
# user = insert(:user)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment