Let favourites and emoji reactions optionally be hidden
authorAlex Gleason <alex@alexgleason.me>
Tue, 28 Jul 2020 19:49:49 +0000 (14:49 -0500)
committerAlex Gleason <alex@alexgleason.me>
Tue, 28 Jul 2020 19:58:30 +0000 (14:58 -0500)
config/config.exs
config/description.exs
docs/configuration/cheatsheet.md
lib/pleroma/web/mastodon_api/controllers/status_controller.ex
lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex
test/web/mastodon_api/controllers/status_controller_test.exs
test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs

index 48fe7c669b75da802ee30806de561227e166fb70..903a92cca0287d9fa402baa9f2b5e6fbbd6e60e4 100644 (file)
@@ -250,7 +250,8 @@ config :pleroma, :instance,
       number: 5,
       length: 16
     ]
-  ]
+  ],
+  show_reactions: true
 
 config :pleroma, :welcome,
   direct_message: [
index 91261c1e17e1228de1c1986b01bfe4771af410f4..9dc87824b5ba66987843ec7f6cdab7a1c6399f4f 100644 (file)
@@ -942,6 +942,11 @@ config :pleroma, :config_description, [
         description:
           "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
         suggestions: ["/instance/thumbnail.jpeg"]
+      },
+      %{
+        key: :show_reactions,
+        type: :boolean,
+        description: "Let favourites and emoji reactions be viewed through the API."
       }
     ]
   },
index 2a25a024addb83658a6a64fe68e3c4e3ca9bd6a7..2971ea324ff158571914b59b8c959c30668c61ed 100644 (file)
@@ -60,6 +60,7 @@ To add configuration to your config file, you can copy it from the base config.
 * `account_field_value_length`: An account field value maximum length (default: `2048`).
 * `external_user_synchronization`: Enabling following/followers counters synchronization for external users.
 * `cleanup_attachments`: Remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances.
+* `show_reactions`: Let favourites and emoji reactions be viewed through the API (default: `true`).
 
 ## Welcome
 * `direct_message`: - welcome message sent as a direct message.
index 9bb2ef117b414f15b40ca78fd3e729d5adf25029..ecfa38489837eadae7b299324fb6ebe8cf60dbc2 100644 (file)
@@ -314,7 +314,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
 
   @doc "GET /api/v1/statuses/:id/favourited_by"
   def favourited_by(%{assigns: %{user: user}} = conn, %{id: id}) do
-    with %Activity{} = activity <- Activity.get_by_id_with_object(id),
+    with true <- Pleroma.Config.get([:instance, :show_reactions]),
+         %Activity{} = activity <- Activity.get_by_id_with_object(id),
          {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)},
          %Object{data: %{"likes" => likes}} <- Object.normalize(activity) do
       users =
index 19dcffdf344f72210c5424468304f4bd09de1585..7f9254c135dc7e8f80d88f6366ac81c9a342d0c5 100644 (file)
@@ -25,7 +25,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionController do
   action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
 
   def index(%{assigns: %{user: user}} = conn, %{id: activity_id} = params) do
-    with %Activity{} = activity <- Activity.get_by_id_with_object(activity_id),
+    with true <- Pleroma.Config.get([:instance, :show_reactions]),
+         %Activity{} = activity <- Activity.get_by_id_with_object(activity_id),
          %Object{data: %{"reactions" => reactions}} when is_list(reactions) <-
            Object.normalize(activity) do
       reactions = filter(reactions, params)
index d34f300da932246a02a5429c424ec25d039558ad..e3f12716363271201ead646ad59fff2be47f7833 100644 (file)
@@ -21,6 +21,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
 
   setup do: clear_config([:instance, :federating])
   setup do: clear_config([:instance, :allow_relay])
+  setup do: clear_config([:instance, :show_reactions])
   setup do: clear_config([:rich_media, :enabled])
   setup do: clear_config([:mrf, :policies])
   setup do: clear_config([:mrf_keyword, :reject])
@@ -1432,6 +1433,20 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
       [%{"id" => id}] = response
       assert id == other_user.id
     end
+
+    test "returns empty array when :show_reactions is disabled", %{conn: conn, activity: activity} do
+      Pleroma.Config.put([:instance, :show_reactions], false)
+
+      other_user = insert(:user)
+      {:ok, _} = CommonAPI.favorite(other_user, activity.id)
+
+      response =
+        conn
+        |> get("/api/v1/statuses/#{activity.id}/favourited_by")
+        |> json_response_and_validate_schema(:ok)
+
+      assert Enum.empty?(response)
+    end
   end
 
   describe "GET /api/v1/statuses/:id/reblogged_by" do
index e1bb5ebfe39c3e49791ab617df03d63c2db4d8f9..8af2ee03fb7f6be628f5fc18fcb16111863519b4 100644 (file)
@@ -13,6 +13,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
 
   import Pleroma.Factory
 
+  setup do: clear_config([:instance, :show_reactions])
+
   test "PUT /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do
     user = insert(:user)
     other_user = insert(:user)
@@ -106,6 +108,23 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
              result
   end
 
+  test "GET /api/v1/pleroma/statuses/:id/reactions with :show_reactions disabled", %{conn: conn} do
+    Pleroma.Config.put([:instance, :show_reactions], false)
+
+    user = insert(:user)
+    other_user = insert(:user)
+
+    {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
+    {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅")
+
+    result =
+      conn
+      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")
+      |> json_response_and_validate_schema(200)
+
+    assert result == []
+  end
+
   test "GET /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do
     user = insert(:user)
     other_user = insert(:user)