diff options
| -rw-r--r-- | changelog.d/rich_media_config.skip | 0 | ||||
| -rw-r--r-- | lib/pleroma/web/rich_media/card.ex | 25 | ||||
| -rw-r--r-- | lib/pleroma/web/rich_media/parser.ex | 6 | ||||
| -rw-r--r-- | test/pleroma/web/rich_media/parser_test.exs | 8 | 
4 files changed, 28 insertions, 11 deletions
diff --git a/changelog.d/rich_media_config.skip b/changelog.d/rich_media_config.skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/changelog.d/rich_media_config.skip diff --git a/lib/pleroma/web/rich_media/card.ex b/lib/pleroma/web/rich_media/card.ex index 36a1ae44a..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 @@ -104,7 +108,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 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 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  | 
