+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 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 get_cached_tags(%{activity: activity, user: user} = params) do
- # 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)}#{activity.data["id"]}"
-
- Cachex.fetch!(:metadata_cache, key, fn _key ->
- {:commit, build_tags(params)}
- end)
- end
-
- def get_cached_tags(%{user: user} = params) do
- # I am unsure how well ETS works with big keys
- key = :erlang.term_to_binary(user)
-
- Cachex.fetch!(:metadata_cache, key, fn _key ->
- {:commit, build_tags(params)}
- end)
- end
-
def build_tags(params) do
- Enum.reduce(@parsers, "", fn parser, acc ->
+ providers = [
+ Pleroma.Web.Metadata.Providers.RelMe,
+ Pleroma.Web.Metadata.Providers.RestrictIndexing
+ | 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