
This allows discovering a page represents an ActivityPub object and also where to find the underlying representation. Other servers already implement this and some tools came to rely or profit from it. The alternate link is provided both with the "application/activity+json" format as used by Mastodon and the standard-compliant media type. Just like the feed provider, ActivityPub links are always enabled unless access to local posts is restricted and not configurable. The commit is based on earlier work by Charlotte 🦝 Deleńkec but with fixes and some tweaks. Co-authored-by: Charlotte 🦝 Deleńkec <lotte@chir.rs>
76 lines
1.8 KiB
Elixir
76 lines
1.8 KiB
Elixir
# 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
|
|
|
|
def build_static_tags(params) do
|
|
providers = [
|
|
Pleroma.Web.Metadata.Providers.Theme
|
|
]
|
|
|
|
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()
|
|
|
|
acc <> rendered_html
|
|
end)
|
|
end
|
|
|
|
def build_tags(params) do
|
|
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()
|
|
|> Enum.map(&to_tag/1)
|
|
|> Enum.map(&HTML.safe_to_string/1)
|
|
|> Enum.join()
|
|
|
|
acc <> rendered_html
|
|
end)
|
|
end
|
|
|
|
def to_tag(data) do
|
|
with {name, attrs, _content = []} <- data do
|
|
HTML.Tag.tag(name, attrs)
|
|
else
|
|
{name, attrs, content} ->
|
|
HTML.Tag.content_tag(name, content, attrs)
|
|
|
|
_ ->
|
|
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.Web.Metadata.Providers.ApUrl
|
|
| Pleroma.Config.get([__MODULE__, :providers], [])
|
|
]
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
end
|