diff options
Diffstat (limited to 'lib')
26 files changed, 40 insertions, 35 deletions
| diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index f2fec3ff6..250dac695 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -51,17 +51,6 @@ defmodule Pleroma.Web.ActivityPub.MRF do    @required_description_keys [:key, :related_policy] -  @callback filter(Map.t()) :: {:ok | :reject, Map.t()} -  @callback describe() :: {:ok | :error, Map.t()} -  @callback config_description() :: %{ -              optional(:children) => [map()], -              key: atom(), -              related_policy: String.t(), -              label: String.t(), -              description: String.t() -            } -  @optional_callbacks config_description: 0 -    def filter(policies, %{} = message) do      policies      |> Enum.reduce({:ok, message}, fn diff --git a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex index fc347236e..e78254280 100644 --- a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy do    @moduledoc "Adds expiration to all local Create activities" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter(activity) do diff --git a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex index b8bfdc3ce..851e95d22 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do    @moduledoc "Prevent followbots from following with a bit of heuristic" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    # XXX: this should become User.normalize_by_ap_id() or similar, really.    defp normalize_by_ap_id(%{"id" => id}), do: User.get_cached_by_ap_id(id) diff --git a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex index 40b19c3ab..cdf17fd28 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex @@ -5,7 +5,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do    alias Pleroma.User -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    require Logger diff --git a/lib/pleroma/web/activity_pub/mrf/drop_policy.ex b/lib/pleroma/web/activity_pub/mrf/drop_policy.ex index 378175205..b3ff86eed 100644 --- a/lib/pleroma/web/activity_pub/mrf/drop_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/drop_policy.ex @@ -5,7 +5,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.DropPolicy do    require Logger    @moduledoc "Drop and log everything received" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter(object) do diff --git a/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex b/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex index 2d3a10889..fad8d873b 100644 --- a/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex +++ b/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrepended do    alias Pleroma.Object    @moduledoc "Ensure a re: is prepended on replies to a post with a Subject" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @reply_prefix Regex.compile!("^re:[[:space:]]*", [:caseless]) diff --git a/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex b/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex index 7307c9c14..7cf7de068 100644 --- a/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex @@ -1,5 +1,5 @@  defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    alias Pleroma.Config    alias Pleroma.User    alias Pleroma.Web.CommonAPI diff --git a/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex b/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex index 51dbb1ad4..11871375e 100644 --- a/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy do    alias Pleroma.User -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @moduledoc "Remove bot posts from federated timeline"    require Pleroma.Constants diff --git a/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex b/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex index def0c437c..b7db4fa3d 100644 --- a/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HashtagPolicy do    Note: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.    """ -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp check_reject(message, hashtags) do      if Enum.any?(Config.get([:mrf_hashtag, :reject]), fn match -> match in hashtags end) do diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex index 768a669f3..504bd4d57 100644 --- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do    @moduledoc "Block messages with too much mentions (configurable)" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp delist_message(message, threshold) when threshold > 0 do      follower_collection = User.get_cached_by_ap_id(message["actor"]).follower_address diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex index f91b51bcf..646008dd9 100644 --- a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do    @moduledoc "Reject or Word-Replace messages with a keyword or regex" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp string_matches?(string, _) when not is_binary(string) do      false    end diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index 8dbf44071..25289d3a4 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do    @moduledoc "Preloads any attachments in the MediaProxy cache by prefetching them" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    alias Pleroma.HTTP    alias Pleroma.Web.MediaProxy diff --git a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex index 877277d4f..05b28e4f5 100644 --- a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex @@ -5,7 +5,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.MentionPolicy do    @moduledoc "Block messages which mention a user" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter(%{"type" => "Create"} = message) do diff --git a/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex index f4c5db05c..80bef591e 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.NoEmptyPolicy do    @moduledoc "Filter local activities which have no content" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    alias Pleroma.Web.Endpoint diff --git a/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex index 2ebc0674d..25031946c 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.NoOpPolicy do    @moduledoc "Does nothing (lets the messages go through unmodified)" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter(object) do diff --git a/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex index b658d7d41..90272766c 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.NoPlaceholderTextPolicy do    @moduledoc "Ensure no content placeholder is present (such as the dot from mastodon)" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter( diff --git a/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex b/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex index 2ad3fde0b..0d7146738 100644 --- a/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex +++ b/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.NormalizeMarkup do    @moduledoc "Scrub configured hypertext markup"    alias Pleroma.HTML -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter(%{"type" => "Create", "object" => child_object} = object) do diff --git a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex index aac24c0ec..9a211fd44 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do    require Pleroma.Constants    @moduledoc "Filter activities depending on their age" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp check_date(%{"object" => %{"published" => published}} = message) do      with %DateTime{} = now <- DateTime.utc_now(), diff --git a/lib/pleroma/web/activity_pub/mrf/policy.ex b/lib/pleroma/web/activity_pub/mrf/policy.ex new file mode 100644 index 000000000..a4a960c01 --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/policy.ex @@ -0,0 +1,16 @@ +# 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.Policy do +  @callback filter(Map.t()) :: {:ok | :reject, Map.t()} +  @callback describe() :: {:ok | :error, Map.t()} +  @callback config_description() :: %{ +              optional(:children) => [map()], +              key: atom(), +              related_policy: String.t(), +              label: String.t(), +              description: String.t() +            } +  @optional_callbacks config_description: 0 +end diff --git a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex index 47a43c6a2..b9d3e52c7 100644 --- a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex +++ b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do    alias Pleroma.Config    alias Pleroma.User -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    require Pleroma.Constants diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index d40348cb1..30562ac08 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do    @moduledoc "Filter activities depending on their origin instance" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    alias Pleroma.Config    alias Pleroma.FollowingRelationship diff --git a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex index 4c5e33619..c28f14a41 100644 --- a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do    alias Pleroma.Config    @moduledoc "Detect new emojis by their shortcode and steals them" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp accept_host?(host), do: host in Config.get([:mrf_steal_emoji, :hosts], []) diff --git a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex index 86965d47b..f84d7cc71 100644 --- a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicy do    require Logger -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp lookup_subchain(actor) do      with matches <- Config.get([:mrf_subchain, :match_actor]), diff --git a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex index 528093ac0..56ae654f2 100644 --- a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex @@ -4,7 +4,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do    alias Pleroma.User -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @moduledoc """       Apply policies based on user tags diff --git a/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex b/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex index 65b371bf3..1bcb3688b 100644 --- a/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy do    alias Pleroma.Config    @moduledoc "Accept-list of users from specified instances" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    defp filter_by_list(object, []), do: {:ok, object} diff --git a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex index ce559a239..20f57f609 100644 --- a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex @@ -5,7 +5,7 @@  defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicy do    @moduledoc "Filter messages which belong to certain activity vocabularies" -  @behaviour Pleroma.Web.ActivityPub.MRF +  @behaviour Pleroma.Web.ActivityPub.MRF.Policy    @impl true    def filter(%{"type" => "Undo", "object" => child_message} = message) do | 
