Sfoglia il codice sorgente

Transmogrifier: Add tests for incoming follows to locked accounts.

tags/v1.1.4
lain 5 anni fa
parent
commit
3115b64cfe
2 ha cambiato i file con 32 aggiunte e 4 eliminazioni
  1. +4
    -3
      lib/pleroma/web/activity_pub/transmogrifier.ex
  2. +28
    -1
      test/web/activity_pub/transmogrifier/follow_handling_test.exs

+ 4
- 3
lib/pleroma/web/activity_pub/transmogrifier.ex Vedi File

@@ -458,10 +458,11 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
{:ok, %User{} = follower} <- User.get_or_fetch_by_ap_id(follower),
{:ok, activity} <- ActivityPub.follow(follower, followed, id, false) do
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_locked, false} <- {:user_locked, User.locked?(followed)},
{:follow, {:ok, follower}} <- {:follow, User.follow(follower, followed)} do
{_, false} <- {:user_locked, User.locked?(followed)},
{_, {:ok, follower}} <- {:follow, User.follow(follower, followed)},
{_, {:ok, _}} <- {:follow_state_update, Utils.update_follow_state(activity, "accept")} do
ActivityPub.accept(%{
to: [follower.ap_id],
actor: followed,


+ 28
- 1
test/web/activity_pub/transmogrifier/follow_handling_test.exs Vedi File

@@ -27,14 +27,41 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.FollowHandlingTest do
|> Poison.decode!()
|> 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["type"] == "Follow"
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)
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
# 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


Loading…
Annulla
Salva