diff options
author | Francis Dinh <normandy@firemail.cc> | 2018-05-17 22:15:57 -0400 |
---|---|---|
committer | Francis Dinh <normandy@firemail.cc> | 2018-05-17 22:15:57 -0400 |
commit | d8c842a7713ab2c9dd49bdabfad4f5a1b6120fcf (patch) | |
tree | 3005c14a3c06dc0d4a44734c7a406d1dffc19202 /lib | |
parent | 1d4bbec6b3239bb83b500a6a90e6686cb682cfac (diff) | |
download | pleroma-d8c842a7713ab2c9dd49bdabfad4f5a1b6120fcf.tar.gz |
Add support for incoming remote unfollows
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 24 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 18 |
2 files changed, 32 insertions, 10 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 399a66787..6a8129ac8 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -404,18 +404,22 @@ defmodule Pleroma.User do from( u in User, select_merge: %{ - search_distance: fragment( - "? <-> (? || ?)", - ^query, - u.nickname, - u.name - )} + search_distance: + fragment( + "? <-> (? || ?)", + ^query, + u.nickname, + u.name + ) + } ) - q = from(s in subquery(inner), - order_by: s.search_distance, - limit: 20 - ) + q = + from( + s in subquery(inner), + order_by: s.search_distance, + limit: 20 + ) Repo.all(q) end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 463d1e59d..0bec8c4dd 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -241,6 +241,24 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do end end + def handle_incoming( + %{ + "type" => "Undo", + "object" => %{"type" => "Follow", "object" => followed}, + "actor" => follower, + "id" => id + } = data + ) do + with %User{local: true} = followed = User.get_cached_by_ap_id(followed), + %User{} = follower = User.get_or_fetch_by_ap_id(follower), + {:ok, activity} <- ActivityPub.unfollow(follower, followed, false) do + User.unfollow(follower, followed) + {:ok, activity} + else + e -> :error + end + end + # TODO # Accept # Undo for non-Announce |