Browse Source

Transmogrifier: Correctly save incoming ids for Accept/Reject.

merge-requests/1875/head
lain 4 years ago
parent
commit
37812740c4
3 changed files with 20 additions and 16 deletions
  1. +11
    -12
      lib/pleroma/web/activity_pub/activity_pub.ex
  2. +6
    -4
      lib/pleroma/web/activity_pub/transmogrifier.ex
  3. +3
    -0
      test/web/activity_pub/transmogrifier_test.exs

+ 11
- 12
lib/pleroma/web/activity_pub/activity_pub.ex View File

@@ -269,22 +269,21 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end

def accept(%{to: to, actor: actor, object: object} = params) do
# only accept false as false value
local = !(params[:local] == false)
def accept(params) do
accept_or_reject("Accept", params)
end

with data <- %{"to" => to, "type" => "Accept", "actor" => actor.ap_id, "object" => object},
{:ok, activity} <- insert(data, local),
:ok <- maybe_federate(activity) do
{:ok, activity}
end
def reject(params) do
accept_or_reject("Reject", params)
end

def reject(%{to: to, actor: actor, object: object} = params) do
# only accept false as false value
local = !(params[:local] == false)
def accept_or_reject(type, %{to: to, actor: actor, object: object} = params) do
local = Map.get(params, :local, true)
activity_id = Map.get(params, :activity_id, nil)

with data <- %{"to" => to, "type" => "Reject", "actor" => actor.ap_id, "object" => object},
with data <-
%{"to" => to, "type" => type, "actor" => actor.ap_id, "object" => object}
|> Utils.maybe_put("id", activity_id),
{:ok, activity} <- insert(data, local),
:ok <- maybe_federate(activity) do
{:ok, activity}


+ 6
- 4
lib/pleroma/web/activity_pub/transmogrifier.ex View File

@@ -514,7 +514,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
end

def handle_incoming(
%{"type" => "Accept", "object" => follow_object, "actor" => _actor, "id" => _id} = data,
%{"type" => "Accept", "object" => follow_object, "actor" => _actor, "id" => id} = data,
_options
) do
with actor <- Containment.get_actor(data),
@@ -528,7 +528,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
type: "Accept",
actor: followed,
object: follow_activity.data["id"],
local: false
local: false,
activity_id: id
})
else
_e -> :error
@@ -536,7 +537,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
end

def handle_incoming(
%{"type" => "Reject", "object" => follow_object, "actor" => _actor, "id" => _id} = data,
%{"type" => "Reject", "object" => follow_object, "actor" => _actor, "id" => id} = data,
_options
) do
with actor <- Containment.get_actor(data),
@@ -550,7 +551,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
type: "Reject",
actor: followed,
object: follow_activity.data["id"],
local: false
local: false,
activity_id: id
}) do
User.unfollow(follower, followed)



+ 3
- 0
test/web/activity_pub/transmogrifier_test.exs View File

@@ -909,6 +909,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do

assert activity.data["object"] == follow_activity.data["id"]

assert activity.data["id"] == accept_data["id"]

follower = User.get_cached_by_id(follower.id)

assert User.following?(follower, followed) == true
@@ -1013,6 +1015,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do

{:ok, activity} = Transmogrifier.handle_incoming(reject_data)
refute activity.local
assert activity.data["id"] == reject_data["id"]

follower = User.get_cached_by_id(follower.id)



Loading…
Cancel
Save