add remote user count for the heck of it
[akkoma] / lib / pleroma / web / metadata.ex
index 23f152e068ca5cffd29e83f4a7c5769a0060203e..48801b5884da2761885e996221589bec7cfe5b3d 100644 (file)
@@ -1,35 +1,36 @@
+# 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 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_static_tags(params) do
+    providers = [
+      Pleroma.Web.Metadata.Providers.Theme
+    ]
 
-  def get_cached_tags(params) do
-    key = :erlang.term_to_binary(params)
+    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()
@@ -52,4 +53,20 @@ defmodule Pleroma.Web.Metadata do
         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