diff options
| -rw-r--r-- | lib/pleroma/web/activity_pub/side_effects.ex | 28 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 32 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier/accept_handling_test.exs | 2 | 
3 files changed, 30 insertions, 32 deletions
| diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 5104d38ee..3ba7eaf9e 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -21,9 +21,37 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do    alias Pleroma.Web.Push    alias Pleroma.Web.Streamer    alias Pleroma.Workers.BackgroundWorker +  alias Pleroma.FollowingRelationship    def handle(object, meta \\ []) +  # Task this handles +  # - Follows +  # - Sends a notification +  def handle( +        %{ +          data: %{ +            "actor" => actor, +            "type" => "Accept", +            "object" => follow_activity_id +          } +        } = object, +        meta +      ) do +    with %Activity{actor: follower_id} = follow_activity <- +           Activity.get_by_ap_id(follow_activity_id), +         %User{} = followed <- User.get_cached_by_ap_id(actor), +         %User{} = follower <- User.get_cached_by_ap_id(follower_id), +         {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "accept"), +         {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_accept) do +      Notification.update_notification_type(followed, follow_activity) +      User.update_follower_count(followed) +      User.update_following_count(follower) +    end + +    {:ok, object, meta} +  end +    # Tasks this handle    # - Follows if possible    # - Sends a notification diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 5ea97e9b7..24da1ef9c 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -11,7 +11,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do    alias Pleroma.EctoType.ActivityPub.ObjectValidators    alias Pleroma.FollowingRelationship    alias Pleroma.Maps -  alias Pleroma.Notification    alias Pleroma.Object    alias Pleroma.Object.Containment    alias Pleroma.Repo @@ -536,35 +535,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do    end    def handle_incoming( -        %{"type" => "Accept", "object" => follow_object, "actor" => _actor, "id" => id} = data, -        _options -      ) do -    with actor <- Containment.get_actor(data), -         {:ok, %User{} = followed} <- User.get_or_fetch_by_ap_id(actor), -         {:ok, follow_activity} <- get_follow_activity(follow_object, followed), -         {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "accept"), -         %User{local: true} = follower <- User.get_cached_by_ap_id(follow_activity.data["actor"]), -         {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_accept) do -      User.update_follower_count(followed) -      User.update_following_count(follower) - -      Notification.update_notification_type(followed, follow_activity) - -      ActivityPub.accept(%{ -        to: follow_activity.data["to"], -        type: "Accept", -        actor: followed, -        object: follow_activity.data["id"], -        local: false, -        activity_id: id -      }) -    else -      _e -> -        :error -    end -  end - -  def handle_incoming(          %{"type" => "Reject", "object" => follow_object, "actor" => _actor, "id" => id} = data,          _options        ) do @@ -643,7 +613,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do          %{"type" => type} = data,          _options        ) -      when type in ~w{Update Block Follow} do +      when type in ~w{Update Block Follow Accept} do      with {:ok, %User{}} <- ObjectValidator.fetch_actor(data),           {:ok, activity, _} <-             Pipeline.common_pipeline(data, local: false) do diff --git a/test/web/activity_pub/transmogrifier/accept_handling_test.exs b/test/web/activity_pub/transmogrifier/accept_handling_test.exs index bc4cc227d..77d468f5c 100644 --- a/test/web/activity_pub/transmogrifier/accept_handling_test.exs +++ b/test/web/activity_pub/transmogrifier/accept_handling_test.exs @@ -82,7 +82,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.AcceptHandlingTest do      accept_data =        Map.put(accept_data, "object", Map.put(accept_data["object"], "actor", follower.ap_id)) -    :error = Transmogrifier.handle_incoming(accept_data) +    {:error, _} = Transmogrifier.handle_incoming(accept_data)      follower = User.get_cached_by_id(follower.id) | 
