Remove FollowBotPolicy
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Fri, 9 Dec 2022 19:59:27 +0000 (19:59 +0000)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Fri, 9 Dec 2022 19:59:27 +0000 (19:59 +0000)
CHANGELOG.md
docs/docs/configuration/cheatsheet.md
lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex [deleted file]
test/pleroma/web/activity_pub/mrf/follow_bot_policy_test.exs [deleted file]

index 017ec6a8cabf4b71a0fad2234d0e68d4d40a84a2..4f266d51437e551bdbead816e58dcc8ef60ac2d7 100644 (file)
@@ -23,6 +23,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Transient activities recieved from remote servers are no longer persisted in the database
 - Overhauled static-fe view for logged-out users
 
+## Removed
+- FollowBotPolicy
+
 ## Upgrade Notes
 - If you have an old instance, you will probably want to run `mix pleroma.database prune_task` in the foreground to catch it up with the history of your instance.
 
index 12c044d67500a38c1fe76a576accf9ca3b1b4673..3c8bbcf84d62c5ef533eeecc8b34e1d100042c0e 100644 (file)
@@ -221,11 +221,6 @@ Notes:
 - The hashtags in the configuration do not have a leading `#`.
 - This MRF Policy is always enabled, if you want to disable it you have to set empty lists
 
-#### :mrf_follow_bot
-
-* `follower_nickname`: The name of the bot account to use for following newly discovered users. Using `followbot` or similar is strongly suggested.
-
-
 ### :activitypub
 * `unfollow_blocked`: Whether blocks result in people getting unfollowed
 * `outgoing_blocks`: Whether to federate blocks to other instances
diff --git a/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex b/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex
deleted file mode 100644 (file)
index 7cf7de0..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do
-  @behaviour Pleroma.Web.ActivityPub.MRF.Policy
-  alias Pleroma.Config
-  alias Pleroma.User
-  alias Pleroma.Web.CommonAPI
-
-  require Logger
-
-  @impl true
-  def filter(message) do
-    with follower_nickname <- Config.get([:mrf_follow_bot, :follower_nickname]),
-         %User{actor_type: "Service"} = follower <-
-           User.get_cached_by_nickname(follower_nickname),
-         %{"type" => "Create", "object" => %{"type" => "Note"}} <- message do
-      try_follow(follower, message)
-    else
-      nil ->
-        Logger.warn(
-          "#{__MODULE__} skipped because of missing `:mrf_follow_bot, :follower_nickname` configuration, the :follower_nickname
-            account does not exist, or the account is not correctly configured as a bot."
-        )
-
-        {:ok, message}
-
-      _ ->
-        {:ok, message}
-    end
-  end
-
-  defp try_follow(follower, message) do
-    to = Map.get(message, "to", [])
-    cc = Map.get(message, "cc", [])
-    actor = [message["actor"]]
-
-    Enum.concat([to, cc, actor])
-    |> List.flatten()
-    |> Enum.uniq()
-    |> User.get_all_by_ap_id()
-    |> Enum.each(fn user ->
-      with false <- user.local,
-           false <- User.following?(follower, user),
-           false <- User.locked?(user),
-           false <- (user.bio || "") |> String.downcase() |> String.contains?("nobot") do
-        Logger.debug(
-          "#{__MODULE__}: Follow request from #{follower.nickname} to #{user.nickname}"
-        )
-
-        CommonAPI.follow(follower, user)
-      end
-    end)
-
-    {:ok, message}
-  end
-
-  @impl true
-  def describe do
-    {:ok, %{}}
-  end
-end
diff --git a/test/pleroma/web/activity_pub/mrf/follow_bot_policy_test.exs b/test/pleroma/web/activity_pub/mrf/follow_bot_policy_test.exs
deleted file mode 100644 (file)
index a615625..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-# Pleroma: A lightweight social networking server
-# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
-# SPDX-License-Identifier: AGPL-3.0-only
-
-defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicyTest do
-  use Pleroma.DataCase, async: true
-
-  alias Pleroma.User
-  alias Pleroma.Web.ActivityPub.MRF.FollowBotPolicy
-
-  import Pleroma.Factory
-
-  describe "FollowBotPolicy" do
-    test "follows remote users" do
-      bot = insert(:user, actor_type: "Service")
-      remote_user = insert(:user, local: false)
-      clear_config([:mrf_follow_bot, :follower_nickname], bot.nickname)
-
-      message = %{
-        "@context" => "https://www.w3.org/ns/activitystreams",
-        "to" => [remote_user.follower_address],
-        "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
-        "type" => "Create",
-        "object" => %{
-          "content" => "Test post",
-          "type" => "Note",
-          "attributedTo" => remote_user.ap_id,
-          "inReplyTo" => nil
-        },
-        "actor" => remote_user.ap_id
-      }
-
-      refute User.following?(bot, remote_user)
-
-      assert User.get_follow_requests(remote_user) |> length == 0
-
-      FollowBotPolicy.filter(message)
-
-      assert User.get_follow_requests(remote_user) |> length == 1
-    end
-
-    test "does not follow users with #nobot in bio" do
-      bot = insert(:user, actor_type: "Service")
-      remote_user = insert(:user, %{local: false, bio: "go away bots! #nobot"})
-      clear_config([:mrf_follow_bot, :follower_nickname], bot.nickname)
-
-      message = %{
-        "@context" => "https://www.w3.org/ns/activitystreams",
-        "to" => [remote_user.follower_address],
-        "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
-        "type" => "Create",
-        "object" => %{
-          "content" => "I don't like follow bots",
-          "type" => "Note",
-          "attributedTo" => remote_user.ap_id,
-          "inReplyTo" => nil
-        },
-        "actor" => remote_user.ap_id
-      }
-
-      refute User.following?(bot, remote_user)
-
-      assert User.get_follow_requests(remote_user) |> length == 0
-
-      FollowBotPolicy.filter(message)
-
-      assert User.get_follow_requests(remote_user) |> length == 0
-    end
-
-    test "does not follow local users" do
-      bot = insert(:user, actor_type: "Service")
-      local_user = insert(:user, local: true)
-      clear_config([:mrf_follow_bot, :follower_nickname], bot.nickname)
-
-      message = %{
-        "@context" => "https://www.w3.org/ns/activitystreams",
-        "to" => [local_user.follower_address],
-        "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
-        "type" => "Create",
-        "object" => %{
-          "content" => "Hi I'm a local user",
-          "type" => "Note",
-          "attributedTo" => local_user.ap_id,
-          "inReplyTo" => nil
-        },
-        "actor" => local_user.ap_id
-      }
-
-      refute User.following?(bot, local_user)
-
-      assert User.get_follow_requests(local_user) |> length == 0
-
-      FollowBotPolicy.filter(message)
-
-      assert User.get_follow_requests(local_user) |> length == 0
-    end
-
-    test "does not follow users requiring follower approval" do
-      bot = insert(:user, actor_type: "Service")
-      remote_user = insert(:user, %{local: false, is_locked: true})
-      clear_config([:mrf_follow_bot, :follower_nickname], bot.nickname)
-
-      message = %{
-        "@context" => "https://www.w3.org/ns/activitystreams",
-        "to" => [remote_user.follower_address],
-        "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
-        "type" => "Create",
-        "object" => %{
-          "content" => "I don't like randos following me",
-          "type" => "Note",
-          "attributedTo" => remote_user.ap_id,
-          "inReplyTo" => nil
-        },
-        "actor" => remote_user.ap_id
-      }
-
-      refute User.following?(bot, remote_user)
-
-      assert User.get_follow_requests(remote_user) |> length == 0
-
-      FollowBotPolicy.filter(message)
-
-      assert User.get_follow_requests(remote_user) |> length == 0
-    end
-  end
-end