Merge branch 'follow-pipeline' into 'develop'
authorHaelwenn <contact+git.pleroma.social@hacktivis.me>
Thu, 9 Jul 2020 10:32:24 +0000 (10:32 +0000)
committerHaelwenn <contact+git.pleroma.social@hacktivis.me>
Thu, 9 Jul 2020 10:32:24 +0000 (10:32 +0000)
Handle `Follow` activities with the pipeline

See merge request pleroma/pleroma!2734

docs/administration/updating.md
docs/configuration/cheatsheet.md
lib/pleroma/web/activity_pub/side_effects.ex
lib/pleroma/web/mastodon_api/controllers/status_controller.ex
priv/static/static-fe/static-fe.css
test/tasks/user_test.exs

index 2a08dac1f542451651f309c7ef06b3e45ba0f7ca..c994f3f16c0ddd5ed7e360125737b47f582ebe99 100644 (file)
@@ -1,6 +1,6 @@
 # Updating your instance
 
-You should **always check the release notes/changelog** in case there are config deprecations, special update special update steps, etc.
+You should **always check the [release notes/changelog](https://git.pleroma.social/pleroma/pleroma/-/releases)** in case there are config deprecations, special update steps, etc.
 
 Besides that, doing the following is generally enough:
 
index f6529b9405809de626b7b760a1365365032b941d..d0a57928ce3e68e8666ec39560a94a4b189ec23f 100644 (file)
@@ -155,7 +155,7 @@ config :pleroma, :mrf_user_allowlist, %{
   * `:strip_followers` removes followers from the ActivityPub recipient list, ensuring they won't be delivered to home timelines
   * `:reject` rejects the message entirely
 
-#### mrf_steal_emoji
+#### :mrf_steal_emoji
 * `hosts`: List of hosts to steal emojis from
 * `rejected_shortcodes`: Regex-list of shortcodes to reject
 * `size_limit`: File size limit (in bytes), checked before an emoji is saved to the disk
index de02baf0f8db15e3bfa8a024755ec388e846dc66..1d2c296a5c001a99d02c8ae72256d61029aa1dd4 100644 (file)
@@ -273,14 +273,20 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
     {:ok, object}
   end
 
-  def handle_undoing(%{data: %{"type" => "Like"}} = object) do
-    with %Object{} = liked_object <- Object.get_by_ap_id(object.data["object"]),
-         {:ok, _} <- Utils.remove_like_from_object(object, liked_object),
-         {:ok, _} <- Repo.delete(object) do
-      :ok
+  defp undo_like(nil, object), do: delete_object(object)
+
+  defp undo_like(%Object{} = liked_object, object) do
+    with {:ok, _} <- Utils.remove_like_from_object(object, liked_object) do
+      delete_object(object)
     end
   end
 
+  def handle_undoing(%{data: %{"type" => "Like"}} = object) do
+    object.data["object"]
+    |> Object.get_by_ap_id()
+    |> undo_like(object)
+  end
+
   def handle_undoing(%{data: %{"type" => "EmojiReact"}} = object) do
     with %Object{} = reacted_object <- Object.get_by_ap_id(object.data["object"]),
          {:ok, _} <- Utils.remove_emoji_reaction_from_object(object, reacted_object),
@@ -310,6 +316,11 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
 
   def handle_undoing(object), do: {:error, ["don't know how to handle", object]}
 
+  @spec delete_object(Object.t()) :: :ok | {:error, Ecto.Changeset.t()}
+  defp delete_object(object) do
+    with {:ok, _} <- Repo.delete(object), do: :ok
+  end
+
   defp send_notifications(meta) do
     Keyword.get(meta, :notifications, [])
     |> Enum.each(fn notification ->
index 3f4c53437829b5c4c7c48ce7aea8dbc6c381356a..12be530c999a94ff3b71ba4653dd4870dd93b489 100644 (file)
@@ -201,15 +201,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
   @doc "DELETE /api/v1/statuses/:id"
   def delete(%{assigns: %{user: user}} = conn, %{id: id}) do
     with %Activity{} = activity <- Activity.get_by_id_with_object(id),
-         render <-
-           try_render(conn, "show.json",
-             activity: activity,
-             for: user,
-             with_direct_conversation_id: true,
-             with_source: true
-           ),
          {:ok, %Activity{}} <- CommonAPI.delete(id, user) do
-      render
+      try_render(conn, "show.json",
+        activity: activity,
+        for: user,
+        with_direct_conversation_id: true,
+        with_source: true
+      )
     else
       _e -> {:error, :not_found}
     end
index db61ff2665ba2aef7f33dbfa8dbf29b7f6cdcba7..89e9f48777926d50450235221dcf8131d72e65d9 100644 (file)
@@ -80,6 +80,7 @@ header a:hover, .h-card a:hover {
 /* keep emoji from being hilariously huge */
 .display-name img {
     max-height: 1em;
+    max-width: 1em;
 }
 
 .display-name .nickname {
index 9220d23fcbaf0a4d2167c822eb3f5f9a523cc6b9..2a3e62e26bdc760cbd9d7276fe0000c9fafe13b4 100644 (file)
@@ -110,7 +110,23 @@ defmodule Mix.Tasks.Pleroma.UserTest do
 
     test "a remote user's create activity is deleted when the object has been pruned" do
       user = insert(:user)
+      user2 = insert(:user)
+
       {:ok, post} = CommonAPI.post(user, %{status: "uguu"})
+      {:ok, post2} = CommonAPI.post(user2, %{status: "test"})
+      obj = Object.normalize(post2)
+
+      {:ok, like_object, meta} = Pleroma.Web.ActivityPub.Builder.like(user, obj)
+
+      {:ok, like_activity, _meta} =
+        Pleroma.Web.ActivityPub.Pipeline.common_pipeline(
+          like_object,
+          Keyword.put(meta, :local, true)
+        )
+
+      like_activity.data["object"]
+      |> Pleroma.Object.get_by_ap_id()
+      |> Repo.delete()
 
       clear_config([:instance, :federating], true)
 
@@ -127,6 +143,7 @@ defmodule Mix.Tasks.Pleroma.UserTest do
         assert %{deactivated: true} = User.get_by_nickname(user.nickname)
 
         assert called(Pleroma.Web.Federator.publish(:_))
+        refute Pleroma.Repo.get(Pleroma.Activity, like_activity.id)
       end
 
       refute Activity.get_by_id(post.id)