+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
defmodule Pleroma.Web.Metadata do
alias Phoenix.HTML
- @parsers Pleroma.Config.get([:metadata, :providers], [])
+ def build_static_tags(params) do
+ providers = [
+ Pleroma.Web.Metadata.Providers.Theme
+ ]
- def get_cached_tags(%{user: user} = params) do
- # I am unsure how well ETS works with big keys
- # We don't need to use the both activity and a user since the object can't change it's content
- key = :erlang.term_to_binary(user)
+ Enum.reduce(providers, "", fn parser, acc ->
+ rendered_html =
+ params
+ |> parser.build_tags()
+ |> Enum.map(&to_tag/1)
+ |> Enum.map(&HTML.safe_to_string/1)
+ |> Enum.join()
- Cachex.fetch!(:metadata_cache, key, fn _key ->
- {:commit, build_tags(params)}
+ acc <> rendered_html
end)
end
def build_tags(params) do
- Enum.reduce(@parsers, "", fn parser, acc ->
+ providers = [
+ Pleroma.Web.Metadata.Providers.RelMe,
+ Pleroma.Web.Metadata.Providers.RestrictIndexing,
+ Pleroma.Web.Metadata.Providers.Theme
+ | activated_providers()
+ ]
+
+ Enum.reduce(providers, "", fn parser, acc ->
rendered_html =
params
|> parser.build_tags()
raise ArgumentError, message: "make_tag invalid args"
end
end
+
+ def activity_nsfw?(%{data: %{"sensitive" => sensitive}}) do
+ Pleroma.Config.get([__MODULE__, :unfurl_nsfw], false) == false and sensitive
+ end
+
+ def activity_nsfw?(_) do
+ false
+ end
+
+ defp activated_providers do
+ unless Pleroma.Config.restrict_unauthenticated_access?(:activities, :local) do
+ [Pleroma.Web.Metadata.Providers.Feed | Pleroma.Config.get([__MODULE__, :providers], [])]
+ else
+ []
+ end
+ end
end