From c16ef40f134e69ad509a52dd3470672ca297f084 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 29 May 2024 07:59:02 +0200 Subject: [PATCH 1/3] RichMedia: Respect configuration on status previews --- changelog.d/rich_media_config.skip | 0 lib/pleroma/web/rich_media/card.ex | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelog.d/rich_media_config.skip diff --git a/changelog.d/rich_media_config.skip b/changelog.d/rich_media_config.skip new file mode 100644 index 000000000..e69de29bb diff --git a/lib/pleroma/web/rich_media/card.ex b/lib/pleroma/web/rich_media/card.ex index 36a1ae44a..f49bb2fee 100644 --- a/lib/pleroma/web/rich_media/card.ex +++ b/lib/pleroma/web/rich_media/card.ex @@ -104,7 +104,8 @@ defmodule Pleroma.Web.RichMedia.Card do @spec get_by_activity(Activity.t()) :: t() | nil | :error # Fake/Draft activity def get_by_activity(%Activity{id: "pleroma:fakeid"} = activity) do - with %Object{} = object <- Object.normalize(activity, fetch: false), + with {_, true} <- {:config, @config_impl.get([:rich_media, :enabled])}, + %Object{} = object <- Object.normalize(activity, fetch: false), url when not is_nil(url) <- HTML.extract_first_external_url_from_object(object) do case get_by_url(url) do # Cache hit From 65c8763907e28a12bc0a4c1269b5a765006d65b2 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 29 May 2024 08:00:19 +0200 Subject: [PATCH 2/3] RichMedia: Add extra checks on configuration --- lib/pleroma/web/rich_media/card.ex | 22 +++++++++++++--------- lib/pleroma/web/rich_media/parser.ex | 6 +++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/rich_media/card.ex b/lib/pleroma/web/rich_media/card.ex index f49bb2fee..040066f36 100644 --- a/lib/pleroma/web/rich_media/card.ex +++ b/lib/pleroma/web/rich_media/card.ex @@ -77,19 +77,23 @@ defmodule Pleroma.Web.RichMedia.Card do @spec get_or_backfill_by_url(String.t(), map()) :: t() | nil def get_or_backfill_by_url(url, backfill_opts \\ %{}) do - case get_by_url(url) do - %__MODULE__{} = card -> - card + if @config_impl.get([:rich_media, :enabled]) do + case get_by_url(url) do + %__MODULE__{} = card -> + card - nil -> - backfill_opts = Map.put(backfill_opts, :url, url) + nil -> + backfill_opts = Map.put(backfill_opts, :url, url) - Backfill.start(backfill_opts) + Backfill.start(backfill_opts) - nil + nil - :error -> - nil + :error -> + nil + end + else + nil end end diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index 37cf29029..7f6b5d388 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -15,10 +15,14 @@ defmodule Pleroma.Web.RichMedia.Parser do @spec parse(String.t()) :: {:ok, map()} | {:error, any()} def parse(url) do - with :ok <- validate_page_url(url), + with {_, true} <- {:config, @config_impl.get([:rich_media, :enabled])}, + :ok <- validate_page_url(url), {:ok, data} <- parse_url(url) do data = Map.put(data, "url", url) {:ok, data} + else + {:config, _} -> {:error, :rich_media_disabled} + e -> e end end From 49156f0183524f13a1363d17b2220718405ea5b6 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 7 Jun 2024 13:31:32 -0400 Subject: [PATCH 3/3] Fixes for default disabled rich media in test environment Also add a test to validate the correct error when disabled --- test/pleroma/web/rich_media/parser_test.exs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/pleroma/web/rich_media/parser_test.exs b/test/pleroma/web/rich_media/parser_test.exs index 3fcb5c808..a5f2563a2 100644 --- a/test/pleroma/web/rich_media/parser_test.exs +++ b/test/pleroma/web/rich_media/parser_test.exs @@ -13,6 +13,8 @@ defmodule Pleroma.Web.RichMedia.ParserTest do mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) end + setup_all do: clear_config([:rich_media, :enabled], true) + test "returns error when no metadata present" do assert {:error, _} = Parser.parse("https://example.com/empty") end @@ -127,4 +129,10 @@ defmodule Pleroma.Web.RichMedia.ParserTest do assert :error == Parser.parse(url) end) end + + test "returns error when disabled" do + clear_config([:rich_media, :enabled], false) + + assert match?({:error, :rich_media_disabled}, Parser.parse("https://example.com/ogp")) + end end