Merge mrf_simple-reject with quarantine (#137)
authorfloatingghost <hannah@coffee-and-dreams.uk>
Tue, 2 Aug 2022 14:19:24 +0000 (14:19 +0000)
committerfloatingghost <hannah@coffee-and-dreams.uk>
Tue, 2 Aug 2022 14:19:24 +0000 (14:19 +0000)
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/137

CHANGELOG.md
config/config.exs
config/description.exs
docs/docs/configuration/cheatsheet.md
lib/pleroma/config/deprecation_warnings.ex
lib/pleroma/web/activity_pub/publisher.ex
test/pleroma/web/activity_pub/publisher_test.exs

index 6010744dd50b543b1b6f31bac364109e2cc9d56c..c658af46064fad6dd67f8c11d62c223f2d901041 100644 (file)
@@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 ### Changed
 - quarantining is now considered absolutely; public activities are no longer
   an exception.
+- also merged quarantine and mrf reject - quarantine is now deprecated
 - flavours:
   - amd64 is built for debian stable. Compatible with ubuntu 20.
   - ubuntu-jammy is built for... well, ubuntu 22 (LTS)
index d14c4e3d72b69211dd1c84cb645753e63d83da2a..947ff0ecc6ce6a2511997f372a1958fa8ed75d75 100644 (file)
@@ -215,7 +215,6 @@ config :pleroma, :instance,
   ],
   allow_relay: true,
   public: true,
-  quarantined_instances: [],
   static_dir: "instance/static/",
   allowed_post_formats: [
     "text/plain",
index e864f090c2db78b46157a334c6d307bc84c55bcd..9cbd0024d1f3e7c0eb5b535dff5a4fda2ebdd0ba 100644 (file)
@@ -691,7 +691,7 @@ config :pleroma, :config_description, [
         key_placeholder: "instance",
         value_placeholder: "reason",
         description:
-          "List of ActivityPub instances where activities will not be sent, and the reason for doing so",
+          "(Deprecated, will be removed in next release) List of ActivityPub instances where activities will not be sent, and the reason for doing so",
         suggestions: [
           {"quarantined.com", "Reason"},
           {"*.quarantined.com", "Reason"}
index bac20070f3c78d1403dc4c7548cfaf7b55d0e69b..83d943c51d07fe95a04916a7a089109b4c681e1d 100644 (file)
@@ -34,7 +34,7 @@ To add configuration to your config file, you can copy it from the base config.
 * `federation_reachability_timeout_days`: Timeout (in days) of each external federation target being unreachable prior to pausing federating to it.
 * `allow_relay`: Permits remote instances to subscribe to all public posts of your instance. This may increase the visibility of your instance.
 * `public`: Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note that there is a dependent setting restricting or allowing unauthenticated access to specific resources, see `restrict_unauthenticated` for more details.
-* `quarantined_instances`: ActivityPub instances where activities will not be sent. They can still reach there via other means, we just won't send them.
+* `quarantined_instances`: *DEPRECATED* ActivityPub instances where activities will not be sent. They can still reach there via other means, we just won't send them.
 * `allowed_post_formats`: MIME-type list of formats allowed to be posted (transformed into HTML).
 * `extended_nickname_format`: Set to `true` to use extended local nicknames format (allows underscores/dashes). This will break federation with
     older software for theses nicknames.
@@ -131,7 +131,7 @@ To add configuration to your config file, you can copy it from the base config.
 * `media_removal`: List of instances to strip media attachments from and the reason for doing so.
 * `media_nsfw`: List of instances to tag all media as NSFW (sensitive) from and the reason for doing so.
 * `federated_timeline_removal`: List of instances to remove from the Federated Timeline (aka The Whole Known Network) and the reason for doing so.
-* `reject`: List of instances to reject activities (except deletes) from and the reason for doing so.
+* `reject`: List of instances to reject activities (except deletes) from and the reason for doing so. Additionally prevents activities from being sent to that instance.
 * `accept`: List of instances to only accept activities (except deletes) from and the reason for doing so.
 * `followers_only`: Force posts from the given instances to be visible by followers only and the reason for doing so.
 * `report_removal`: List of instances to reject reports from and the reason for doing so.
index 3675c5e4ac1e873520f7a7118d600a42d34564d0..8a336c35a3d5ace64455f7926e5a2ccf68603b1c 100644 (file)
@@ -17,7 +17,9 @@ defmodule Pleroma.Config.DeprecationWarnings do
     {[:instance, :mrf_transparency], [:mrf, :transparency],
      "\n* `config :pleroma, :instance, mrf_transparency` is now `config :pleroma, :mrf, transparency`"},
     {[:instance, :mrf_transparency_exclusions], [:mrf, :transparency_exclusions],
-     "\n* `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`"}
+     "\n* `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`"},
+    {[:instance, :quarantined_instances], [:mrf_simple, :reject],
+     "\n* `config :pleroma, :instance, :quarantined_instances` is now covered by `:pleroma, :mrf_simple, :reject`"}
   ]
 
   def check_simple_policy_tuples do
@@ -81,7 +83,7 @@ defmodule Pleroma.Config.DeprecationWarnings do
   end
 
   def check_quarantined_instances_tuples do
-    has_strings = Config.get([:instance, :quarantined_instances]) |> Enum.any?(&is_binary/1)
+    has_strings = Config.get([:instance, :quarantined_instances], []) |> Enum.any?(&is_binary/1)
 
     if has_strings do
       Logger.warn("""
index cd820fa3dcdb20241f92e45fb597fb92ad052f2f..ed67a060d9637f5d2c09a1e6740d3546ce1c934f 100644 (file)
@@ -103,11 +103,16 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
     end
   end
 
+  defp blocked_instances do
+    Config.get([:instance, :quarantined_instances], []) ++
+      Config.get([:mrf_simple, :reject], [])
+  end
+
   defp should_federate?(inbox) do
     %{host: host} = URI.parse(inbox)
 
     quarantined_instances =
-      Config.get([:instance, :quarantined_instances], [])
+      blocked_instances()
       |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples()
       |> Pleroma.Web.ActivityPub.MRF.subdomains_regex()
 
index 95f12de2d869ffbe84f07f2f5f718fd6db4dfae8..0f1d621b1d265c89f7a76136887be73cc3b157f0 100644 (file)
@@ -26,6 +26,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
   setup_all do
     clear_config([:instance, :federating], true)
     clear_config([:instance, :quarantined_instances], [])
+    clear_config([:mrf_simple, :reject], [])
   end
 
   describe "gather_webfinger_links/1" do
@@ -270,12 +271,14 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
   end
 
   describe "publish/2" do
-    test_with_mock "doesn't publish any activity to quarantined instances.",
+    test_with_mock "doesn't publish any activity to quarantined or rejected instances.",
                    Pleroma.Web.Federator.Publisher,
                    [:passthrough],
                    [] do
       Config.put([:instance, :quarantined_instances], [{"domain.com", "some reason"}])
 
+      Config.put([:mrf_simple, :reject], [{"rejected.com", "some reason"}])
+
       follower =
         insert(:user, %{
           local: false,
@@ -283,9 +286,18 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
           ap_enabled: true
         })
 
+      another_follower =
+        insert(:user, %{
+          local: false,
+          inbox: "https://rejected.com/users/nick2/inbox",
+          ap_enabled: true
+        })
+
       actor = insert(:user, follower_address: follower.ap_id)
 
       {:ok, follower, actor} = Pleroma.User.follow(follower, actor)
+      {:ok, _another_follower, actor} = Pleroma.User.follow(another_follower, actor)
+
       actor = refresh_record(actor)
 
       note_activity =
@@ -321,6 +333,22 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
                  id: public_note_activity.data["id"]
                })
              )
+
+      assert not called(
+               Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{
+                 inbox: "https://rejected.com/users/nick2/inbox",
+                 actor_id: actor.id,
+                 id: note_activity.data["id"]
+               })
+             )
+
+      assert not called(
+               Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{
+                 inbox: "https://rejected.com/users/nick1/inbox",
+                 actor_id: actor.id,
+                 id: public_note_activity.data["id"]
+               })
+             )
     end
 
     test_with_mock "Publishes a non-public activity to non-quarantined instances.",