@@ -6,7 +6,12 @@ defmodule Pleroma.Web.Metadata do | |||||
alias Phoenix.HTML | alias Phoenix.HTML | ||||
def build_tags(params) do | def build_tags(params) do | ||||
Enum.reduce(Pleroma.Config.get([__MODULE__, :providers], []), "", fn parser, acc -> | |||||
providers = [ | |||||
Pleroma.Web.Metadata.Providers.RestrictIndexing | |||||
| Pleroma.Config.get([__MODULE__, :providers], []) | |||||
] | |||||
Enum.reduce(providers, "", fn parser, acc -> | |||||
rendered_html = | rendered_html = | ||||
params | params | ||||
|> parser.build_tags() | |> parser.build_tags() | ||||
@@ -0,0 +1,25 @@ | |||||
# 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.Providers.RestrictIndexing do | |||||
@behaviour Pleroma.Web.Metadata.Providers.Provider | |||||
@moduledoc """ | |||||
Restricts indexing of remote users. | |||||
""" | |||||
@impl true | |||||
def build_tags(%{user: %{local: false}}) do | |||||
[ | |||||
{:meta, | |||||
[ | |||||
name: "robots", | |||||
content: "noindex, noarchive" | |||||
], []} | |||||
] | |||||
end | |||||
@impl true | |||||
def build_tags(%{user: %{local: true}}), do: [] | |||||
end |
@@ -0,0 +1,25 @@ | |||||
# Pleroma: A lightweight social networking server | |||||
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> | |||||
# SPDX-License-Identifier: AGPL-3.0-only | |||||
defmodule Pleroma.Web.MetadataTest do | |||||
use Pleroma.DataCase, async: true | |||||
import Pleroma.Factory | |||||
describe "restrict indexing remote users" do | |||||
test "for remote user" do | |||||
user = insert(:user, local: false) | |||||
assert Pleroma.Web.Metadata.build_tags(%{user: user}) =~ | |||||
"<meta content=\"noindex, noarchive\" name=\"robots\">" | |||||
end | |||||
test "for local user" do | |||||
user = insert(:user) | |||||
refute Pleroma.Web.Metadata.build_tags(%{user: user}) =~ | |||||
"<meta content=\"noindex, noarchive\" name=\"robots\">" | |||||
end | |||||
end | |||||
end |
@@ -0,0 +1,21 @@ | |||||
# 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.Providers.RestrictIndexingTest do | |||||
use ExUnit.Case, async: true | |||||
describe "build_tags/1" do | |||||
test "for remote user" do | |||||
assert Pleroma.Web.Metadata.Providers.RestrictIndexing.build_tags(%{ | |||||
user: %Pleroma.User{local: false} | |||||
}) == [{:meta, [name: "robots", content: "noindex, noarchive"], []}] | |||||
end | |||||
test "for local user" do | |||||
assert Pleroma.Web.Metadata.Providers.RestrictIndexing.build_tags(%{ | |||||
user: %Pleroma.User{local: true} | |||||
}) == [] | |||||
end | |||||
end | |||||
end |