restrict remote users from indexing
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Wed, 1 Apr 2020 06:55:05 +0000 (09:55 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Wed, 1 Apr 2020 06:57:12 +0000 (09:57 +0300)
lib/pleroma/web/metadata.ex
lib/pleroma/web/metadata/restrict_indexing.ex [new file with mode: 0644]
test/web/metadata/metadata_test.exs [new file with mode: 0644]
test/web/metadata/restrict_indexing_test.exs [new file with mode: 0644]

index c9aac27dca207aef7f2cbe3915d9991009798076..a9f70c43e32259b23b732eb5dc16c0124a17c00e 100644 (file)
@@ -6,7 +6,12 @@ defmodule Pleroma.Web.Metadata do
   alias Phoenix.HTML
 
   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 =
         params
         |> parser.build_tags()
diff --git a/lib/pleroma/web/metadata/restrict_indexing.ex b/lib/pleroma/web/metadata/restrict_indexing.ex
new file mode 100644 (file)
index 0000000..f156078
--- /dev/null
@@ -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
diff --git a/test/web/metadata/metadata_test.exs b/test/web/metadata/metadata_test.exs
new file mode 100644 (file)
index 0000000..3f8b29e
--- /dev/null
@@ -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
diff --git a/test/web/metadata/restrict_indexing_test.exs b/test/web/metadata/restrict_indexing_test.exs
new file mode 100644 (file)
index 0000000..aad0bac
--- /dev/null
@@ -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