aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFrancis Dinh <normandy@firemail.cc>2018-05-17 22:15:57 -0400
committerFrancis Dinh <normandy@firemail.cc>2018-05-17 22:15:57 -0400
commitd8c842a7713ab2c9dd49bdabfad4f5a1b6120fcf (patch)
tree3005c14a3c06dc0d4a44734c7a406d1dffc19202 /lib
parent1d4bbec6b3239bb83b500a6a90e6686cb682cfac (diff)
downloadpleroma-d8c842a7713ab2c9dd49bdabfad4f5a1b6120fcf.tar.gz
Add support for incoming remote unfollows
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex24
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex18
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