926b5b1875b02b7e601da3a9f9bb9828ab9ad77b
[akkoma] / lib / pleroma / web / metadata.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.Metadata do
6 alias Phoenix.HTML
7
8 def build_tags(params) do
9 providers = [
10 Pleroma.Web.Metadata.Providers.Feed,
11 Pleroma.Web.Metadata.Providers.RelMe,
12 Pleroma.Web.Metadata.Providers.RestrictIndexing
13 | activated_providers()
14 ]
15
16 Enum.reduce(providers, "", fn parser, acc ->
17 rendered_html =
18 params
19 |> parser.build_tags()
20 |> Enum.map(&to_tag/1)
21 |> Enum.map(&HTML.safe_to_string/1)
22 |> Enum.join()
23
24 acc <> rendered_html
25 end)
26 end
27
28 def to_tag(data) do
29 with {name, attrs, _content = []} <- data do
30 HTML.Tag.tag(name, attrs)
31 else
32 {name, attrs, content} ->
33 HTML.Tag.content_tag(name, content, attrs)
34
35 _ ->
36 raise ArgumentError, message: "make_tag invalid args"
37 end
38 end
39
40 def activity_nsfw?(%{data: %{"sensitive" => sensitive}}) do
41 Pleroma.Config.get([__MODULE__, :unfurl_nsfw], false) == false and sensitive
42 end
43
44 def activity_nsfw?(_) do
45 false
46 end
47
48 defp activated_providers do
49 if Pleroma.Config.get!([:instance, :public]) do
50 Pleroma.Config.get([__MODULE__, :providers], [])
51 else
52 []
53 end
54 end
55 end