Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/delete...
authorlain <lain@soykaf.club>
Tue, 5 May 2020 08:19:01 +0000 (10:19 +0200)
committerlain <lain@soykaf.club>
Tue, 5 May 2020 08:19:01 +0000 (10:19 +0200)
1  2 
lib/pleroma/web/activity_pub/object_validators/like_validator.ex
lib/pleroma/web/activity_pub/pipeline.ex
lib/pleroma/web/activity_pub/side_effects.ex
lib/pleroma/web/activity_pub/transmogrifier.ex
test/web/activity_pub/object_validator_test.exs
test/web/activity_pub/transmogrifier_test.exs

index 017e39abb7a8f033eb8b0abaf0d101fd1438b2f3,d5abb75675449e4d2c75f106a7ffd95c808cf4b4..657cdfdb1a0763f483f5810200e2389706a22332
@@@ -27,11 -40,11 +40,13 @@@ defmodule Pleroma.Web.ActivityPub.Pipel
      end
    end
  
-   defp maybe_federate(activity, meta) do
+   defp maybe_federate(%Object{}, _), do: {:ok, :not_federated}
+   defp maybe_federate(%Activity{} = activity, meta) do
      with {:ok, local} <- Keyword.fetch(meta, :local) do
 -      if local do
 +      do_not_federate = meta[:do_not_federate]
 +
 +      if !do_not_federate && local do
          Federator.publish(activity)
          {:ok, :federated}
        else
index 52bd5179f26f80e2bf80b3f9c5e945947c491981,6a8f1af960ffe34aadb35b287d2c0e6d38c9365e..7b53abeafc61de0f69bfef89b81c14f8265e8aaf
@@@ -17,62 -15,14 +17,57 @@@ defmodule Pleroma.Web.ActivityPub.SideE
    # - Add like to object
    # - Set up notification
    def handle(%{data: %{"type" => "Like"}} = object, meta) do
-     {:ok, result} =
-       Pleroma.Repo.transaction(fn ->
-         liked_object = Object.get_by_ap_id(object.data["object"])
-         Utils.add_like_to_object(object, liked_object)
+     liked_object = Object.get_by_ap_id(object.data["object"])
+     Utils.add_like_to_object(object, liked_object)
  
-         Notification.create_notifications(object)
+     Notification.create_notifications(object)
  
-         {:ok, object, meta}
-       end)
-     result
+     {:ok, object, meta}
    end
  
 +  # Tasks this handles:
 +  # - Delete and unpins the create activity
 +  # - Replace object with Tombstone
 +  # - Set up notification
 +  # - Reduce the user note count
 +  # - Reduce the reply count
 +  # - Stream out the activity
 +  def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do
 +    deleted_object =
 +      Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object)
 +
 +    result =
 +      case deleted_object do
 +        %Object{} ->
 +          with {:ok, deleted_object, activity} <- Object.delete(deleted_object),
 +               %User{} = user <- User.get_cached_by_ap_id(deleted_object.data["actor"]) do
 +            User.remove_pinnned_activity(user, activity)
 +
 +            {:ok, user} = ActivityPub.decrease_note_count_if_public(user, deleted_object)
 +
 +            if in_reply_to = deleted_object.data["inReplyTo"] do
 +              Object.decrease_replies_count(in_reply_to)
 +            end
 +
 +            ActivityPub.stream_out(object)
 +            ActivityPub.stream_out_participations(deleted_object, user)
 +            :ok
 +          end
 +
 +        %User{} ->
 +          with {:ok, _} <- User.delete(deleted_object) do
 +            :ok
 +          end
 +      end
 +
 +    if result == :ok do
 +      Notification.create_notifications(object)
 +      {:ok, object, meta}
 +    else
 +      {:error, result}
 +    end
 +  end
 +
    # Nothing to do
    def handle(object, meta) do
      {:ok, object, meta}