projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'features/ingestion-page' into 'develop'
[akkoma]
/
lib
/
pleroma
/
web
/
activity_pub
/
mrf
/
anti_link_spam_policy.ex
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 14e5955ee17b37d985437dc1a5cea4477eb2893e..cdf17fd28c001aa6a3ff3d464e6033503e582194 100644
(file)
--- a/
lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex
+++ b/
lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex
@@
-1,20
+1,23
@@
# Pleroma: A lightweight social networking server
# Pleroma: A lightweight social networking server
-# Copyright © 201
9
Pleroma Authors <https://pleroma.social/>
+# Copyright © 201
7-2021
Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
alias Pleroma.User
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
alias Pleroma.User
+ @behaviour Pleroma.Web.ActivityPub.MRF.Policy
+
require Logger
# has the user successfully posted before?
require Logger
# has the user successfully posted before?
- defp
user_has_posted_before
?(%User{} = u) do
- u.
info.note_count > 0 || u.info
.follower_count > 0
+ defp
old_user
?(%User{} = u) do
+ u.
note_count > 0 || u
.follower_count > 0
end
# does the post contain links?
defp contains_links?(%{"content" => content} = _object) do
content
end
# does the post contain links?
defp contains_links?(%{"content" => content} = _object) do
content
+ |> Floki.parse_fragment!()
|> Floki.filter_out("a.mention,a.hashtag,a[rel~=\"tag\"],a.zrl")
|> Floki.attribute("a", "href")
|> length() > 0
|> Floki.filter_out("a.mention,a.hashtag,a[rel~=\"tag\"],a.zrl")
|> Floki.attribute("a", "href")
|> length() > 0
@@
-22,27
+25,33
@@
defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
defp contains_links?(_), do: false
defp contains_links?(_), do: false
+ @impl true
def filter(%{"type" => "Create", "actor" => actor, "object" => object} = message) do
def filter(%{"type" => "Create", "actor" => actor, "object" => object} = message) do
- with {:ok, %User{} = u} <- User.get_or_fetch_by_ap_id(actor),
+ with {:ok, %User{
local: false
} = u} <- User.get_or_fetch_by_ap_id(actor),
{:contains_links, true} <- {:contains_links, contains_links?(object)},
{:contains_links, true} <- {:contains_links, contains_links?(object)},
- {:
posted_before, true} <- {:posted_before, user_has_posted_before
?(u)} do
+ {:
old_user, true} <- {:old_user, old_user
?(u)} do
{:ok, message}
else
{:ok, message}
else
+ {:ok, %User{local: true}} ->
+ {:ok, message}
+
{:contains_links, false} ->
{:ok, message}
{:contains_links, false} ->
{:ok, message}
- {:
posted_before
, false} ->
- {:reject,
nil
}
+ {:
old_user
, false} ->
+ {:reject,
"[AntiLinkSpamPolicy] User has no posts nor followers"
}
{:error, _} ->
{:error, _} ->
- {:reject,
nil
}
+ {:reject,
"[AntiLinkSpamPolicy] Failed to get or fetch user by ap_id"
}
e ->
e ->
- Logger.warn("[MRF anti-link-spam] WTF: unhandled error #{inspect(e)}")
- {:reject, nil}
+ {:reject, "[AntiLinkSpamPolicy] Unhandled error #{inspect(e)}"}
end
end
# in all other cases, pass through
def filter(message), do: {:ok, message}
end
end
# in all other cases, pass through
def filter(message), do: {:ok, message}
+
+ @impl true
+ def describe, do: {:ok, %{}}
end
end