forked from AkkomaGang/akkoma
Transmogrifier: Add tests for incoming follows to locked accounts.
This commit is contained in:
parent
50afe5ab9e
commit
3115b64cfe
2 changed files with 32 additions and 4 deletions
|
@ -458,10 +458,11 @@ def handle_incoming(
|
||||||
{:ok, %User{} = follower} <- User.get_or_fetch_by_ap_id(follower),
|
{:ok, %User{} = follower} <- User.get_or_fetch_by_ap_id(follower),
|
||||||
{:ok, activity} <- ActivityPub.follow(follower, followed, id, false) do
|
{:ok, activity} <- ActivityPub.follow(follower, followed, id, false) do
|
||||||
with deny_follow_blocked <- Pleroma.Config.get([:user, :deny_follow_blocked]),
|
with deny_follow_blocked <- Pleroma.Config.get([:user, :deny_follow_blocked]),
|
||||||
{:user_blocked, false} <-
|
{_, false} <-
|
||||||
{:user_blocked, User.blocks?(followed, follower) && deny_follow_blocked},
|
{:user_blocked, User.blocks?(followed, follower) && deny_follow_blocked},
|
||||||
{:user_locked, false} <- {:user_locked, User.locked?(followed)},
|
{_, false} <- {:user_locked, User.locked?(followed)},
|
||||||
{:follow, {:ok, follower}} <- {:follow, User.follow(follower, followed)} do
|
{_, {:ok, follower}} <- {:follow, User.follow(follower, followed)},
|
||||||
|
{_, {:ok, _}} <- {:follow_state_update, Utils.update_follow_state(activity, "accept")} do
|
||||||
ActivityPub.accept(%{
|
ActivityPub.accept(%{
|
||||||
to: [follower.ap_id],
|
to: [follower.ap_id],
|
||||||
actor: followed,
|
actor: followed,
|
||||||
|
|
|
@ -27,14 +27,41 @@ test "it works for incoming follow requests" do
|
||||||
|> Poison.decode!()
|
|> Poison.decode!()
|
||||||
|> Map.put("object", user.ap_id)
|
|> Map.put("object", user.ap_id)
|
||||||
|
|
||||||
{:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
|
{:ok, %Activity{data: data, local: false} = activity} = Transmogrifier.handle_incoming(data)
|
||||||
|
|
||||||
assert data["actor"] == "http://mastodon.example.org/users/admin"
|
assert data["actor"] == "http://mastodon.example.org/users/admin"
|
||||||
assert data["type"] == "Follow"
|
assert data["type"] == "Follow"
|
||||||
assert data["id"] == "http://mastodon.example.org/users/admin#follows/2"
|
assert data["id"] == "http://mastodon.example.org/users/admin#follows/2"
|
||||||
|
|
||||||
|
activity = Repo.get(Activity, activity.id)
|
||||||
|
assert activity.data["state"] == "accept"
|
||||||
assert User.following?(User.get_cached_by_ap_id(data["actor"]), user)
|
assert User.following?(User.get_cached_by_ap_id(data["actor"]), user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "with locked accounts, it does not create a follow or an accept" do
|
||||||
|
user = insert(:user, info: %{locked: true})
|
||||||
|
|
||||||
|
data =
|
||||||
|
File.read!("test/fixtures/mastodon-follow-activity.json")
|
||||||
|
|> Poison.decode!()
|
||||||
|
|> Map.put("object", user.ap_id)
|
||||||
|
|
||||||
|
{:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
|
||||||
|
|
||||||
|
assert data["state"] == "pending"
|
||||||
|
|
||||||
|
refute User.following?(User.get_cached_by_ap_id(data["actor"]), user)
|
||||||
|
|
||||||
|
accepts =
|
||||||
|
from(
|
||||||
|
a in Activity,
|
||||||
|
where: fragment("?->>'type' = ?", a.data, "Accept")
|
||||||
|
)
|
||||||
|
|> Repo.all()
|
||||||
|
|
||||||
|
assert length(accepts) == 0
|
||||||
|
end
|
||||||
|
|
||||||
test "it works for follow requests when you are already followed, creating a new accept activity" do
|
test "it works for follow requests when you are already followed, creating a new accept activity" do
|
||||||
# This is important because the remote might have the wrong idea about the
|
# This is important because the remote might have the wrong idea about the
|
||||||
# current follow status. This can lead to instance A thinking that x@A is
|
# current follow status. This can lead to instance A thinking that x@A is
|
||||||
|
|
Loading…
Reference in a new issue