summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-02-14 21:51:57 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-02-20 20:30:41 +0100
commit8d064eb451f13b2cdb444fcdbdff6057a8022ac2 (patch)
tree9c79cf5049b11a61f56e8998dbd90d275131ddce
parent3eddd9caa61a2ac431eb57cd4c835db608702a7d (diff)
rich_media/helpers.ex: Add config to disable fetching from remote activitiesfeatures/link-previews-disable-remote
-rw-r--r--CHANGELOG.md1
-rw-r--r--config/description.exs5
-rw-r--r--lib/pleroma/web/rich_media/helpers.ex11
-rw-r--r--test/web/rich_media/helpers_test.exs20
4 files changed, 34 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4127e21f7..9fd1f8924 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -75,6 +75,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- A new users admin digest email
- OAuth: admin scopes support (relevant setting: `[:auth, :enforce_oauth_admin_scope_usage]`).
- Add an option `authorized_fetch_mode` to require HTTP signatures for AP fetches.
+- Rich Media: Add `local_only` to `[:rich_media, :enabled]`, which forbids getting link previews for remote activities
<details>
<summary>API Changes</summary>
diff --git a/config/description.exs b/config/description.exs
index 53d980c83..b0966b60c 100644
--- a/config/description.exs
+++ b/config/description.exs
@@ -2105,8 +2105,9 @@ config :pleroma, :config_description, [
children: [
%{
key: :enabled,
- type: :boolean,
- description: "Enables RichMedia parsing of URLs."
+ type: [:boolean, :atom],
+ description: "Enables/disables RichMedia or allows it only on local activities",
+ suggestions: [true, false, :local_only]
},
%{
key: :ignore_hosts,
diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex
index 6506de46c..96c9686bc 100644
--- a/lib/pleroma/web/rich_media/helpers.ex
+++ b/lib/pleroma/web/rich_media/helpers.ex
@@ -49,8 +49,17 @@ defmodule Pleroma.Web.RichMedia.Helpers do
|> hd
end
+ # Comparison with true/false done to handle :local_only
+ defp can_fetch?(%Activity{local: true}) do
+ Config.get([:rich_media, :enabled]) != false
+ end
+
+ defp can_fetch?(_activity) do
+ Config.get([:rich_media, :enabled]) == true
+ end
+
def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do
- with true <- Config.get([:rich_media, :enabled]),
+ with true <- can_fetch?(activity),
%Object{} = object <- Object.normalize(activity),
false <- object.data["sensitive"] || false,
{:ok, page_url} <- HTML.extract_first_external_url(object, object.data["content"]),
diff --git a/test/web/rich_media/helpers_test.exs b/test/web/rich_media/helpers_test.exs
index 48884319d..e74890fd5 100644
--- a/test/web/rich_media/helpers_test.exs
+++ b/test/web/rich_media/helpers_test.exs
@@ -118,4 +118,24 @@ defmodule Pleroma.Web.RichMedia.HelpersTest do
assert %{} = Helpers.fetch_data_for_activity(activity4)
assert %{} = Helpers.fetch_data_for_activity(activity5)
end
+
+ test "only crawls from local posts when [:rich_media, :enabled] is set to :local_only" do
+ content = ~s[<a href="https://example.com/ogp">https://example.com/ogp</a>]
+ remote_user = insert(:user, local: false)
+ local_user = insert(:user, local: true)
+ remote_note = insert(:note, %{user: remote_user, data: %{"content" => content}})
+ local_note = insert(:note, %{user: local_user, data: %{"content" => content}})
+
+ remote_activity =
+ insert(:note_activity, %{user: remote_user, note: remote_note, local: false})
+
+ local_activity = insert(:note_activity, %{user: local_user, note: local_note, local: true})
+
+ Config.put([:rich_media, :enabled], :local_only)
+
+ assert %{} == Helpers.fetch_data_for_activity(remote_activity)
+
+ assert %{page_url: "https://example.com/ogp", rich_media: _} =
+ Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(local_activity)
+ end
end